Ну пятница таки принесла головоломную задачу.
на родительском объекте есть Кнопка которая открывает ВФ страницу, на которую выводится, к примеру, имена всех дочерних записей. Дочерних записей может быть много.
И это можно было бы организовать в виде пагинируемого листа - благо у Дмитрия есть хорошая тема в блоге об этом.
Но нет - эта страница должна выводится и печататься как ПДФ, - пагинацию не сделать. Ну и ладно с этим - им все равно сколько страниц - все равно все нужны и все печатать.
но дочерних записей как оказалось можут быть тысчи! и на ВФ странице они приходят на фронт в виде Листа-коллекции, и он выпадает по лимиту (вот не думал, что с этим лимитом когда-нибудь столкнусь).
И что делать?
пока как идею - организовать цепочку самооткрывающихся страниц - сначало вызывается первая страница и если ее контроллер видит что там более 1000 единиц, то открывает (только с JS получается?) еще одну страницу куда передает параметр о том, сколько тысяч уже выбрано...
но может есть и более изящное решение...
хотя постойте Collection size exceeds maximum size of 1,000 - это на все коллекции идущие на фронт или на каждую? так я бы мог настругать несколько Листов и готово...
или контролер при виде что там много тысяч мог бы рендерить спец страинцу с кнопками: распечатать первую тысячук, распечатать вторую тысячу с открытием в новое окно, тогда бы обошлось без JS.
Ну пятница таки принесла головоломную задачу. на родительском объекте есть Кнопка которая открывает ВФ страницу, на которую выводится, к примеру, имена всех дочерних записей. Дочерних записей может быть много. И это можно было бы организовать в виде пагинируемого листа - благо у Дмитрия есть хорошая тема в блоге об этом. Но нет - эта страница должна выводится и печататься как ПДФ, - пагинацию не сделать. Ну и ладно с этим - им все равно сколько страниц - все равно все нужны и все печатать. но дочерних записей как оказалось можут быть тысчи! и на ВФ странице они приходят на фронт в виде Листа-коллекции, и он выпадает по лимиту (вот не думал, что с этим лимитом когда-нибудь столкнусь). И что делать? пока как идею - организовать цепочку самооткрывающихся страниц - сначало вызывается первая страница и если ее контроллер видит что там более 1000 единиц, то открывает (только с JS получается?) еще одну страницу куда передает параметр о том, сколько тысяч уже выбрано... но может есть и более изящное решение... хотя постойте [b]Collection size exceeds maximum size of 1,000[/b] - это на все коллекции идущие на фронт или на каждую? так я бы мог настругать несколько Листов и готово... или контролер при виде что там много тысяч мог бы рендерить спец страинцу с кнопками: распечатать первую тысячук, распечатать вторую тысячу с открытием в новое окно, тогда бы обошлось без JS.
похоже что лимит только на каждую коллекцию:
http://kuldeeptyagi.blogspot.com/2011/05/salesforce-work-around-to-overcome-1000.html
но не уверен, буду проверять
похоже что лимит только на каждую коллекцию: http://kuldeeptyagi.blogspot.com/2011/05/salesforce-work-around-to-overcome-1000.html но не уверен, буду проверять
Лимит на оператор repeat. Использование множества листов может привести к лимиту по размеру вьюстейта. Мне кажется, проще и надежнее подгрузить скриптом, но тут пдф, так что даже и не знаю.
Лимит на оператор repeat. Использование множества листов может привести к лимиту по размеру вьюстейта. Мне кажется, проще и надежнее подгрузить скриптом, но тут пдф, так что даже и не знаю.
Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate
[quote="Den Brown"]похоже что лимит только на каждую коллекцию: http://kuldeeptyagi.blogspot.com/2011/05/salesforce-work-around-to-overcome-1000.html но не уверен, буду проверять[/quote] Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate
view state не будет на странице если страница без формы. (<apex:form>)
выводить больше 1000 в том числе и с в repeat должно работать с "readonly".
view state не будет на странице если страница без формы. (<apex:form>) выводить больше 1000 в том числе и с в repeat должно работать с "readonly". [url=http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_annotation_ReadOnly.htm]ReadOnly Annotation[/url] [quote]Visualforce pages can call controller methods with the @ReadOnly annotation, and those methods will run with the same relaxed restrictions. To increase other Visualforce-specific limits, such as the size of a collection that can be used by an iteration component like <apex:pageBlockTable>, you can set the readonly attribute on the <apex:page> tag to true. For more information, see Working with Large Sets of Data in the Visualforce Developer's Guide.[/quote]
вот еще [url=https://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_readonly_context.htm]Working with Large Sets of Data[/url]
Огромное спасибо.
Поставил - и все: страница размотала (один) лист на 2400 записей.
Но подгружать страницу пришлось около минуты - это оказалось 400 страниц!
Но все равно тему нужно изучить, еще не факт что 2400 - это предел у них.
Этот случай как та гифка про акулу сбивающую самолет ("Этот кейс не был предусмотрен") в ссылке в поздравлениях Дмитрия (там есть много гифок в комментах).
[quote="wilder"] Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate [/quote] Огромное спасибо. Поставил - и все: страница размотала (один) лист на 2400 записей. Но подгружать страницу пришлось около минуты - это оказалось 400 страниц! Но все равно тему нужно изучить, еще не факт что 2400 - это предел у них. Этот случай как та гифка про акулу сбивающую самолет ("Этот кейс не был предусмотрен") в ссылке в поздравлениях Дмитрия (там есть много гифок в комментах). [quote="Дима Лисовский"]Лимит на оператор repeat. [/quote] спасибо, это тоже интересный вопрос, в ошибке писалось, что превышен размер Колекции, так там есть еще лимит по итерациям рипитора? каждого или итерации всех рипитором суммируются? это нужно попробовать
одного, вот дока https://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_repeat.htm
пример формирования пдф и отправки по email http://blog.jeffdouglas.com/2010/07/16/create-and-email-a-pdf-with-salesforce-com/
[quote="Дима Лисовский"]Но подгружать страницу пришлось около минуты - это оказалось 400 страниц![/quote] почему бы не формировать пдф асинхронно и не слать письмом клиенту? пример формирования пдф и отправки по email http://blog.jeffdouglas.com/2010/07/16/create-and-email-a-pdf-with-salesforce-com/
это очень разумный вариант! не думаю что у них будет много случаев таких здоровучих листов, но если "завоют" - то так и сделаю. Получается что если это будет асинронно сгенерированный ПДФ, то в плане лимитов на размер Листа там должно быть вообще без проблем.
А нет. для моего случай не пойдет. У меня на каждой странице по несколько картинок (это линки на гугловский сервис по генерации QR кодов). КОгда я отправлю на браузер, даже в виде ПДФ дока - картинки грузятся на клиенте.
А если генерировать такой ПДФ на сервере, то получается что картинки будут подгружены в момент создания? тогда и размер будет - "будь здоров". Но этот момент - что произойдет с картинками-линками - если генить ПДФ на сервере из ВФ страницы (или собирать строка за строкой - и вставлять линк) - мне не совсем ясен. ВОзможно (и вероятно) что все картинки и не будут подгружаться на сервере, но не факт что вне брузера они подгрузятся в документ на клиенте.
[quote="Дима Лисовский"]почему бы не формировать пдф асинхронно и не слать письмом клиенту?[/quote] это очень разумный вариант! не думаю что у них будет много случаев таких здоровучих листов, но если "завоют" - то так и сделаю. Получается что если это будет асинронно сгенерированный ПДФ, то в плане лимитов на размер Листа там должно быть вообще без проблем. А нет. для моего случай не пойдет. У меня на каждой странице по несколько картинок (это линки на гугловский сервис по генерации QR кодов). КОгда я отправлю на браузер, даже в виде ПДФ дока - картинки грузятся на клиенте. А если генерировать такой ПДФ на сервере, то получается что картинки будут подгружены в момент создания? тогда и размер будет - "будь здоров". Но этот момент - что произойдет с картинками-линками - если генить ПДФ на сервере из ВФ страницы (или собирать строка за строкой - и вставлять линк) - мне не совсем ясен. ВОзможно (и вероятно) что все картинки и не будут подгружаться на сервере, но не факт что вне брузера они подгрузятся в документ на клиенте.
Если ты генеришь ПДФ то салесфорс всегда вставляет картинки внутрь и это проблема.
Если ты генеришь ПДФ то салесфорс всегда вставляет картинки внутрь и это проблема.
то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым?
а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?
[quote="wilder"]вставляет картинки внутрь и[/quote] то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым? а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?
В этом одновремено и плюс и минус. да все картинки вставляются внутрь и формирует полностью готовый документ.
На клиенте никакие линки не подгружаются. все есть внутри документа. Если тебе нужно что бы что-то подгружалось используй другой формат.
[quote="Den Brown"][quote="wilder"]вставляет картинки внутрь и[/quote] то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым? а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?[/quote] В этом одновремено и плюс и минус. да все картинки вставляются внутрь и формирует полностью готовый документ. На клиенте никакие линки не подгружаются. все есть внутри документа. Если тебе нужно что бы что-то подгружалось используй другой формат.
Подтверждаю - pdf формируется на стороне Salesforce и возвращается готовым документом.
Клиент (браузер) тут вообще не при чем.
На счет картинок ничего не скажу, но расскажу вот какой прикол - салесфорсовский генератор плохо переваривает css стили и сложную разметку VF страниц. Точный пример не приведу, было давно. НО помню как долго мучились со шрифтами которые заказчик хотел видеть в PDF, плюс на некоторые DOM элементы не применялись стили.
Поэтому я бы лучше посмотрел в сторону сторонних сервисов для формирования PDF.
Подтверждаю - pdf формируется на стороне Salesforce и возвращается готовым документом. Клиент (браузер) тут вообще не при чем. На счет картинок ничего не скажу, но расскажу вот какой прикол - салесфорсовский генератор плохо переваривает css стили и сложную разметку VF страниц. Точный пример не приведу, было давно. НО помню как долго мучились со шрифтами которые заказчик хотел видеть в PDF, плюс на некоторые DOM элементы не применялись стили. Поэтому я бы лучше посмотрел в сторону сторонних сервисов для формирования PDF.
На клиенте никакие линки не подгружаются. все есть внутри документа.
Это со сгенерированным програмно ПДФ.
А с ВФ рендер как ПДФ страницей - здесь на клиенте подгужаются картинки?
салесфорсовский генератор плохо переваривает css
там вообще стилей почти нет. все форматирую средствами html. а вот никогда ранее не виданые мной стили для ПДФ форматирования там работают
[quote="wilder"]На клиенте никакие линки не подгружаются. все есть внутри документа. [/quote] Это со сгенерированным програмно ПДФ. А с ВФ рендер как ПДФ страницей - здесь на клиенте подгужаются картинки? [quote="Dmitry Shnyrev"]салесфорсовский генератор плохо переваривает css [/quote] там вообще стилей почти нет. все форматирую средствами html. а вот никогда ранее не виданые мной стили для ПДФ форматирования там работают