Ну пятница таки принесла головоломную задачу.
на родительском объекте есть Кнопка которая открывает ВФ страницу, на которую выводится, к примеру, имена всех дочерних записей. Дочерних записей может быть много.
И это можно было бы организовать в виде пагинируемого листа - благо у Дмитрия есть хорошая тема в блоге об этом.
Но нет - эта страница должна выводится и печататься как ПДФ, - пагинацию не сделать. Ну и ладно с этим - им все равно сколько страниц - все равно все нужны и все печатать.
но дочерних записей как оказалось можут быть тысчи! и на ВФ странице они приходят на фронт в виде Листа-коллекции, и он выпадает по лимиту (вот не думал, что с этим лимитом когда-нибудь столкнусь).
И что делать?
пока как идею - организовать цепочку самооткрывающихся страниц - сначало вызывается первая страница и если ее контроллер видит что там более 1000 единиц, то открывает (только с JS получается?) еще одну страницу куда передает параметр о том, сколько тысяч уже выбрано...
но может есть и более изящное решение...
хотя постойте Collection size exceeds maximum size of 1,000 - это на все коллекции идущие на фронт или на каждую? так я бы мог настругать несколько Листов и готово...
или контролер при виде что там много тысяч мог бы рендерить спец страинцу с кнопками: распечатать первую тысячук, распечатать вторую тысячу с открытием в новое окно, тогда бы обошлось без JS.
похоже что лимит только на каждую коллекцию:
http://kuldeeptyagi.blogspot.com/2011/05/salesforce-work-around-to-overcome-1000.html
но не уверен, буду проверять
Лимит на оператор repeat. Использование множества листов может привести к лимиту по размеру вьюстейта. Мне кажется, проще и надежнее подгрузить скриптом, но тут пдф, так что даже и не знаю.
Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate
view state не будет на странице если страница без формы. (<apex:form>)
выводить больше 1000 в том числе и с в repeat должно работать с "readonly".
Огромное спасибо.
Поставил - и все: страница размотала (один) лист на 2400 записей.
Но подгружать страницу пришлось около минуты - это оказалось 400 страниц!
Но все равно тему нужно изучить, еще не факт что 2400 - это предел у них.
Этот случай как та гифка про акулу сбивающую самолет ("Этот кейс не был предусмотрен") в ссылке в поздравлениях Дмитрия (там есть много гифок в комментах).
пример формирования пдф и отправки по email http://blog.jeffdouglas.com/2010/07/16/create-and-email-a-pdf-with-salesforce-com/
это очень разумный вариант! не думаю что у них будет много случаев таких здоровучих листов, но если "завоют" - то так и сделаю. Получается что если это будет асинронно сгенерированный ПДФ, то в плане лимитов на размер Листа там должно быть вообще без проблем.
А нет. для моего случай не пойдет. У меня на каждой странице по несколько картинок (это линки на гугловский сервис по генерации QR кодов). КОгда я отправлю на браузер, даже в виде ПДФ дока - картинки грузятся на клиенте.
А если генерировать такой ПДФ на сервере, то получается что картинки будут подгружены в момент создания? тогда и размер будет - "будь здоров". Но этот момент - что произойдет с картинками-линками - если генить ПДФ на сервере из ВФ страницы (или собирать строка за строкой - и вставлять линк) - мне не совсем ясен. ВОзможно (и вероятно) что все картинки и не будут подгружаться на сервере, но не факт что вне брузера они подгрузятся в документ на клиенте.
Если ты генеришь ПДФ то салесфорс всегда вставляет картинки внутрь и это проблема.
то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым?
а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?
В этом одновремено и плюс и минус. да все картинки вставляются внутрь и формирует полностью готовый документ.
На клиенте никакие линки не подгружаются. все есть внутри документа. Если тебе нужно что бы что-то подгружалось используй другой формат.
Подтверждаю - pdf формируется на стороне Salesforce и возвращается готовым документом.
Клиент (браузер) тут вообще не при чем.
На счет картинок ничего не скажу, но расскажу вот какой прикол - салесфорсовский генератор плохо переваривает css стили и сложную разметку VF страниц. Точный пример не приведу, было давно. НО помню как долго мучились со шрифтами которые заказчик хотел видеть в PDF, плюс на некоторые DOM элементы не применялись стили.
Поэтому я бы лучше посмотрел в сторону сторонних сервисов для формирования PDF.
На клиенте никакие линки не подгружаются. все есть внутри документа.
Это со сгенерированным програмно ПДФ.
А с ВФ рендер как ПДФ страницей - здесь на клиенте подгужаются картинки?
салесфорсовский генератор плохо переваривает css
там вообще стилей почти нет. все форматирую средствами html. а вот никогда ранее не виданые мной стили для ПДФ форматирования там работают