Здравствуйте!
ситуация такая:
на стандартном листе (view) записей поставил кнопку чекнув в ее настройках Display Checkboxes (for Multi-Record Selection).
после этого на следущей VF странице (куда мы приходим с кнопки) все чекнутые пользователем записи доступны в переменной !selected (просто магия!) при стандартном контроллере (то есть кастомного или расширенного контроллера нет). Только разметка, где Apex:repeat разматывает массив !selected.
Но, это ПДФ-нутая страница. И там нужно ставить разделение страниц (например так: <div style="page-break-after: always" />, иначе дизайн может поплыть.
И мне нужно ставить этот Див после 20-го повторения Рипита, а я не знаю как "словить" этот момент только средствами доступными в VF разметке. Пока в Рипите просто ограничил кол-во Rows.
Наверное придется расширять станд контроллер. Но как там получить эти записи в !selected?
Пока это не срочный вопрос, но как говорится, есть над чем подумать...
Здравствуйте! ситуация такая: на стандартном листе (view) записей поставил кнопку чекнув в ее настройках [i]Display Checkboxes (for Multi-Record Selection)[/i]. после этого на следущей VF странице (куда мы приходим с кнопки) все чекнутые пользователем записи доступны в переменной [b]!selected[/b] (просто магия!) при стандартном контроллере (то есть кастомного или расширенного контроллера нет). Только разметка, где Apex:repeat разматывает массив !selected. Но, это ПДФ-нутая страница. И там нужно ставить разделение страниц (например так: [i]<div style="page-break-after: always" />[/i], иначе дизайн может поплыть. И мне нужно ставить этот Див после 20-го повторения Рипита, а я не знаю как "словить" этот момент только средствами доступными в VF разметке. Пока в Рипите просто ограничил кол-во Rows. Наверное придется расширять станд контроллер. Но как там получить эти записи в !selected? Пока это не срочный вопрос, но как говорится, есть над чем подумать...
Все очень просто
Есть такая конструкция:
<apex:variable var="rowNum" value="{!1}"/>
<apex:repeat value="{!myCollection}" var="item">
...
<apex:variable var="rowNum" value="{!rowNum + 1}"/>
</apex:repeat>
Объявляем переменную прямо на VF странице и потом в цикле repeat увеличиваем на единицу.
Как дальше использовать переменную для того чтобы разбить пачку на пачки по 20 не составит труда
Подробности можно можно найти здесь
http://blog.jeffdouglas.com/2010/04/02/visualforce-row-counter-for-iteration-components/
Все очень просто :) Есть такая конструкция: [code] <apex:variable var="rowNum" value="{!1}"/> <apex:repeat value="{!myCollection}" var="item"> ... <apex:variable var="rowNum" value="{!rowNum + 1}"/> </apex:repeat> [/code] Объявляем переменную прямо на VF странице и потом в цикле repeat увеличиваем на единицу. Как дальше использовать переменную для того чтобы разбить пачку на пачки по 20 не составит труда :) Подробности можно можно найти здесь [url]http://blog.jeffdouglas.com/2010/04/02/visualforce-row-counter-for-iteration-components/[/url]
Ну сегодня просто день чудес! Меня приятно удивил !selected, но это было не последней хорошей новостью.
А оператор % в формулах работает??
буду пробовать вот так:
<apex:pageBlock rendered="{ (!rowNum%20=0), true, false }">
<div style="page-break-after: always" />
</apex:pageBlock>
Ну сегодня просто день чудес! Меня приятно удивил !selected, но это было не последней хорошей новостью. А оператор [b]%[/b] в формулах работает?? буду пробовать вот так: <apex:pageBlock rendered="{ (!rowNum%20=0), true, false }"> <div style="page-break-after: always" /> </apex:pageBlock>
Все вроде готово. Пришлось немного пободаться с формулами.
Вот это задается в начале странице:
<apex:variable var="rowNum" value="{!0}"/>
и обратите внимание, что отсчет начинается с нуля, иначе вы будите удивляться, почему на первой странце элеметов на один меньше, чем на последующих.
Далее прямо в самом Рипите (после выводимых элеметов) ставите:
<apex:variable var="rowNum" value="{!rowNum + 1}"/>
<apex:pageBlock rendered="{! IF(MOD(rowNum,20)=0,true, false)}" >
Вот тут указана формула MOD(n1,n2). В отличие от оператора "%" (который в формулах не работает) она вовращает остаток от деление первого аргумета на второй, а не значение после запятой в результате деления. Но в нашем случае механизм использования аналогичен с "%" - ловим "0".
И как указано в CSS руководствах при использовании сл стиля:
<div style="page-break-before: always" >
див не должен быть абсолютно пустым.
Пока все.
PS:
Но я уже чувствую, что попросят выбранные в !selected записи сортировать в момент вывода (на PDF страницу) по какому то полю. И тут придется думать как это сделать в пределах только VF странице, или как-то получать доступ к !selected в расширении стандартного контроллера.
Все вроде готово. Пришлось немного пободаться с формулами. Вот это задается в начале странице: [code]<apex:variable var="rowNum" value="{!0}"/>[/code] и обратите внимание, что отсчет начинается с нуля, иначе вы будите удивляться, почему на первой странце элеметов на один меньше, чем на последующих. Далее [b]прямо в самом Рипите[/b] (после выводимых элеметов) ставите: [code] <apex:variable var="rowNum" value="{!rowNum + 1}"/> <apex:pageBlock rendered="{! IF(MOD(rowNum,20)=0,true, false)}" > [/code] Вот тут указана формула MOD(n1,n2). В отличие от оператора "%" (который в формулах не работает) она вовращает остаток от деление первого аргумета на второй, а не значение после запятой в результате деления. Но в нашем случае механизм использования аналогичен с "%" - ловим "0". И как указано в CSS руководствах при использовании сл стиля: <div style="page-break-before: always" > див не должен быть абсолютно пустым. Пока все. PS: Но я уже чувствую, что попросят выбранные в !selected записи сортировать в момент вывода (на PDF страницу) по какому то полю. И тут придется думать как это сделать в пределах только VF странице, или как-то получать доступ к !selected в расширении стандартного контроллера.