Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с паблишером / 12 сообщений из 12, страница 1 из 1
15.02.2018, 13:12
    #39602282
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
Привет, что-то ищу ответ на вроде бы простой вопрос по XSL и не нахожу.

Формирую отчет, есть шаблон XSL. После прохода цикла мне просто нужно узнать номер последней выведенной командой ROW строки.
При этом не все строки я беру, а position() и last() считают каждую итерацию.

Ну вот можно же принудительно написать <Row ss:Index="10" или если не указывать индекс явно, то автоматом следующая используется.

Нужно узнать текущий индекс в конце работы с данными. Или как организовать переменную в которую запишу сколько строк уже выведено (но прочел что переменных XSL не изменяются).

Боюсь что тут http://www.sql.ru/forum/1276463/kak-uznat-nomer-stroki-v-xsl ответа не дождусь, может в этой ветке помогут.
...
Рейтинг: 0 / 0
15.02.2018, 13:24
    #39602297
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
Т.к. не нужно спрашивать на форуме то, что легко находится в гугле )))

К примеру:
http://adivaconsulting.com/bi-publisher/item/81-rtf-template-working-with-variables.html

Насколько я помню, сам BI Publisher достаточно активно счетчики в .RTF шаблонах использует. Т.ч. переназначать BI Publisher переменные вполне можно (это не чистые переменные XSL, а переменные BI Publisher'а)

Как вызвать xdoxslt ф-ции из XSL шаблона (надо ли их как-то описывать), не знаю. Но всегда можно посмотреть на XSL-FO шаблоны генерируемые паблишером.

IMHO & AFAIK.

p.s. С паблишером работал лет 10 назад (((
...
Рейтинг: 0 / 0
15.02.2018, 13:33
    #39602304
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
Я не нагуглил к сожалению, читаю XSLT.

Простое же вроде действие, узнать индекс последней строки, в которую подавали данные. Мне нужно это именно в файле сделать. Думал на поверхности ответ.

Нужно или считать самому (но как если пишут о xsl:variable "переменные в XSLT нельзя изменять") или всё же думаю должен быть встроенный метод.
...
Рейтинг: 0 / 0
15.02.2018, 16:32
    #39602488
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--last показывает общее количество итераций-->		
		<xsl:if test="position() = last()">
			<Row ss:AutoFitHeight="0" ss:Height="15">
				<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
				<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
			</Row>
		</xsl:if>


в цикле крутите?
перенесите после </xsl:for-each> и Ваши Rows.
...
Рейтинг: 0 / 0
15.02.2018, 18:38
    #39602601
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
K790Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--last показывает общее количество итераций-->		
		<xsl:if test="position() = last()">
			<Row ss:AutoFitHeight="0" ss:Height="15">
				<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
				<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
			</Row>
		</xsl:if>


в цикле крутите?
перенесите после </xsl:for-each> и Ваши Rows.

В цикле last() показывает сколько итераций прошло. За циклом выводит 1.

Что мне надо, просто хочу узнать сколько раз выполнилась команда <Row> </Row>, т.е. сколько я уже строк в выходном файле заполнил.
...
Рейтинг: 0 / 0
15.02.2018, 19:08
    #39602621
KateNast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
работала с этой программой, очень тяжелая вещь
...
Рейтинг: 0 / 0
15.02.2018, 19:21
    #39602629
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
KateNastработала с этой программой, очень тяжелая вещь
Назвать XML Publisher очень тяжелой вещью.....

Это Вы наверное на Oracle Reports не работали, после Репортсов XML Publisher "как каравелла по зелёным волнам, прохладным ливнем после жаркого дня" ( С )

)))

IMHO
...
Рейтинг: 0 / 0
16.02.2018, 13:32
    #39602933
VARCHAR4000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
leprechaunK790Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--last показывает общее количество итераций-->		
		<xsl:if test="position() = last()">
			<Row ss:AutoFitHeight="0" ss:Height="15">
				<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
				<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
			</Row>
		</xsl:if>


в цикле крутите?
перенесите после </xsl:for-each> и Ваши Rows.

В цикле last() показывает сколько итераций прошло. За циклом выводит 1.

Что мне надо, просто хочу узнать сколько раз выполнилась команда <Row> </Row>, т.е. сколько я уже строк в выходном файле заполнил.

Ту на помощь приходит variable...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:for-each select="//G_ROWS">  
	<Row ss:AutoFitHeight="0" ss:Height="15">
		<Cell ss:StyleID="Default"><Data ss:Type="String">Cтрока</Data></Cell>
		<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="position()"/></Data></Cell>
	</Row>
	<xsl:variable name="varCOUNT_ROWS"><xsl:value-of select="last()"/></xsl:variable>	
</xsl:for-each>
	<Row ss:AutoFitHeight="0" ss:Height="15">
		<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
		<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="$varCOUNT_ROWS"/></Data></Cell>
	</Row>
...
Рейтинг: 0 / 0
16.02.2018, 14:33
    #39602995
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
VARCHAR4000

Ту на помощь приходит variable...



Так да пришла бы на помощь variable, но в цикле что Вы указали last() будет считать просто количество итераций, а я могу и по 2-3 строки добавлять внутри.
Если бы она как нормальная переменная могла наращивать значение счетчиком +1, то и вопроса бы не было.
...
Рейтинг: 0 / 0
16.02.2018, 15:25
    #39603070
VARCHAR4000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
leprechaunVARCHAR4000

Ту на помощь приходит variable...



Так да пришла бы на помощь variable, но в цикле что Вы указали last() будет считать просто количество итераций, а я могу и по 2-3 строки добавлять внутри.
Если бы она как нормальная переменная могла наращивать значение счетчиком +1, то и вопроса бы не было.

Не совсем понял...

Если идет речь о вложенности циклов, в каждом цикле объявляйте свою переменная...
Так это и есть обычная переменная, инициализируйте ее сначала 0, а в цикле инкрементируйте...

Не вижу проблем...
...
Рейтинг: 0 / 0
16.02.2018, 18:55
    #39603292
leprechaun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
[quot VARCHAR4000]leprechaunпропущено...

Не совсем понял...

Если идет речь о вложенности циклов, в каждом цикле объявляйте свою переменная...
Так это и есть обычная переменная, инициализируйте ее сначала 0, а в цикле инкрементируйте...

Не вижу проблем...

Да как её наращивать эту переменную, если тут написано https://xsltdev.ru/xslt/xsl-variable/
что переменные в XSLT нельзя изменять.
Как я понял могу лишь раз объявить как хранилище значения. Если бы в цикле была одна строка, их еще можно сложить, но в моём одном цикле может быть 2-3 команды Row и не этот счетчик с каждой не увеличить, считать будет только итерации.
...
Рейтинг: 0 / 0
20.02.2018, 18:42
    #39605063
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с паблишером
Для тех у кого нет рук ))), пример из моего ответа выше (2-ое сообщение в данной теме) в виде XSL шаблона. Самое сложное было XML Publisher Desktop поставить (((

проверял в BI Publisher Template Viewer в режиме XSLT

XML файл с данными для проверки
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
 <NAME>Template Expert</NAME>
 <DESCRIPTION>Congratulations on your first Template</DESCRIPTION>
 <ROWS>
   <ROW><NAME>1</NAME></ROW>
   <ROW><NAME>2</NAME></ROW>
   <ROW><NAME>3</NAME></ROW>
   <ROW><NAME>4</NAME></ROW>
 </ROWS>
</DATA>



Собственно XSLT-шаблон с инкрементом Publisher-ой переменной counter
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.xdo.template.rtf.XSLTFunctions" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   <xsl:param name="_XDOCTX">#</xsl:param>
   <xsl:template match="/">
     <xsl:value-of select="xdoxslt:set_variable($_XDOCTX, 'counter', 0)"/>
     <xsl:for-each select=".//ROW">
        <xsl:value-of select="xdoxslt:set_variable($_XDOCTX, 'counter', xdoxslt:get_variable($_XDOCTX, 'counter') + 1)"/>
        Row processing.
      </xsl:for-each>
End of rows. Counter=<xsl:value-of select="xdoxslt:get_variable($_XDOCTX, 'counter')"/>
   </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с паблишером / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]