Регистрация  |  Вход

Как в бесконтроллерной VF странице от-итерировать секцию N-ное количество раз

есть VF страница на стандарном контроллере. Расширение пока делать не будем.

одно из полей в приходящей записи - это число.

Это число в нашем случае означает то, сколько раз нужно повторить одинаковый блок разметки на странице.

как это реализовать?

есть <apex:repeat> - но он работает только с Списком/Коллекцией.

есть <apex:variable> - но как ее использовать с <apex:repeat>?

фактически нужно простейшее средство для итерации на ВФ странице, которое "вырубается" формулой сравнивающей значение в том Поле с <apex:variable>-счетчиком

да, кстати JS не предлагать, так как это renderAs="pdf" страница

пока есть пару часов подумать, если ничего не придет в голову, придется "обработать напильником" в виде расширения к контроллеру.

есть VF страница на стандарном контроллере. Расширение пока делать не будем.

одно из полей в приходящей записи - это число.

Это число в нашем случае означает то, сколько раз нужно повторить одинаковый блок разметки на странице.

как это реализовать?

есть <apex:repeat> - но он работает только с Списком/Коллекцией.

есть <apex:variable> - но как ее использовать с  <apex:repeat>?

фактически нужно простейшее средство для итерации на ВФ странице, которое "вырубается" формулой сравнивающей значение в том Поле с <apex:variable>-счетчиком

да, кстати JS не предлагать, так как это renderAs="pdf" страница

пока есть пару часов подумать, если ничего не придет в голову, придется "обработать напильником" в виде расширения к контроллеру.

Мдя, ну и задачка. Звучит вроде легко, но что-то решения я тоже не нашел пока гуглил. Без JS как без рук.

Мдя, ну и задачка. Звучит вроде легко, но что-то решения я тоже не нашел пока гуглил. Без JS как без рук. 

вот если бы можно было бы объявить <apex:variable> как List с требуемым количеством элеметов в списке,
то можо было легко впрячь <apex:repeat>

а так придется "заваривать" этот List в расширении

вот если бы можно было бы объявить <apex:variable> как List с требуемым количеством элеметов в списке,
то можо было легко впрячь <apex:repeat>

а так придется "заваривать" этот  List в расширении 

В порядке особых извращений и с некоторыми ограничениями вот вариант решения - заводим FieldSet в который добавляем какие-то поля. В моём примере я взял объект Account и добавил в FieldSet с именем A 10 полей, и создаём такую страницу:

<apex:page>
<apex:variable var="i" value="{!0}"/>
<apex:repeat var="a" value="{!$ObjectType.Account.FieldSets.A}">
<apex:repeat var="b" value="{!$ObjectType.Account.FieldSets.A}">
<apex:outputText value="{!i}" rendered="{!TEXT(i) != $CurrentPage.parameters.n}"/><br/>
<apex:variable var="i" value="{!i + 1}" rendered="{!TEXT(i) != $CurrentPage.parameters.n}"/>
</apex:repeat>
</apex:repeat>
</apex:page>

В данном случае кол-во итераций ограничено 100, но легко масштабируется например до 1000, больше вряд ли понадобится, да и в том случае тоже легко масштабировать. Кол-во итераций ограничено параметром запроса с именем n.

В порядке особых извращений и с некоторыми ограничениями вот вариант решения - заводим FieldSet в который добавляем какие-то поля. В моём примере я взял объект Account и добавил в FieldSet с именем A 10 полей, и создаём такую страницу:
[code]
<apex:page>
	<apex:variable var="i" value="{!0}"/>
	<apex:repeat var="a" value="{!$ObjectType.Account.FieldSets.A}">
		<apex:repeat var="b" value="{!$ObjectType.Account.FieldSets.A}">
			<apex:outputText value="{!i}" rendered="{!TEXT(i) != $CurrentPage.parameters.n}"/><br/>
			<apex:variable var="i" value="{!i + 1}" rendered="{!TEXT(i) != $CurrentPage.parameters.n}"/>
		</apex:repeat>
	</apex:repeat>
</apex:page>
[/code]

В данном случае кол-во итераций ограничено 100, но легко масштабируется например до 1000, больше вряд ли понадобится, да и в том случае тоже легко масштабировать. Кол-во итераций ограничено параметром запроса с именем n.

Это однозначно зачет ! Жаль что здесь нет лайков :)

Это однозначно зачет ! Жаль что здесь нет лайков :)

ilya leshchuk
<apex:repeat var="a" value="{!$ObjectType.Account.FieldSets.A}">

вместо Листа в repeat "присунули" FieldSets, который создан только для того, что "активировать" repeat

но никакие поля из FieldSets не выводятся, repeat "крутиться" уже с нашими собственными кастомными задачами.

для увеличения числа итерации, repeat вложен в repeat...

...ну и фантазия у людей :)

[quote="ilya leshchuk"]<apex:repeat var="a" value="{!$ObjectType.Account.FieldSets.A}">[/quote]

вместо Листа в repeat "присунули" FieldSets, который создан только для того, что "активировать" repeat

но никакие поля из FieldSets не выводятся,  repeat "крутиться" уже с нашими собственными кастомными задачами.

для увеличения числа итерации,  repeat вложен в  repeat...

...ну и фантазия у людей :)

Как задача звучала так и решение нашли

Как задача звучала так и решение нашли :D 

Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?

Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?

DocuSign, Panda вроде как делать это может.

DocuSign, Panda вроде как делать это может. 

Dmitry Shnyrev
Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?

Я нет,но делал скриншоты из страничек через js и потом вставлял в PDF.

[quote="Dmitry Shnyrev"]Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?[/quote]
Я нет,но делал скриншоты из страничек через js и потом вставлял в PDF.

Sergey Prichepo
делал скриншоты из страничек через js

с помощью JS можно делать скриншот?

[quote="Sergey Prichepo"]делал скриншоты из страничек через js [/quote]

с помощью JS можно делать скриншот?

Dmitry Shnyrev
Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?

А резонный вопрос "зачем"? Стандартными форсовскими методами не получается?

[quote="Dmitry Shnyrev"]Кстати, а никто не сталкивался со сторонними сервисами по генерации PDF?[/quote]
А резонный вопрос "зачем"? Стандартными форсовскими методами не получается?

Den Brown
Sergey Prichepo
делал скриншоты из страничек через js

с помощью JS можно делать скриншот?


В связке с HTML5 да.

[quote="Den Brown"][quote="Sergey Prichepo"]делал скриншоты из страничек через js [/quote]

с помощью JS можно делать скриншот?[/quote]
В связке с HTML5 да.

ilya leshchuk
Стандартными форсовскими методами не получается?

видел ПДФ с инпут полями и, возможно даже ДропДаун списками. Такого не сделать стандартными средствами...
хотя может у ПДФ есть XML формат и можно просто делать по template-у...

[quote="ilya leshchuk"]Стандартными форсовскими методами не получается?[/quote]

видел ПДФ с инпут полями и, возможно даже ДропДаун списками. Такого не сделать стандартными средствами...
хотя может у ПДФ есть XML формат и можно просто делать по template-у...