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

Collection size exceeds maximum size of 1,000. Как "спагинировать" ПДФ страницу?

Ну пятница таки принесла головоломную задачу.

на родительском объекте есть Кнопка которая открывает ВФ страницу, на которую выводится, к примеру, имена всех дочерних записей. Дочерних записей может быть много.

И это можно было бы организовать в виде пагинируемого листа - благо у Дмитрия есть хорошая тема в блоге об этом.

Но нет - эта страница должна выводится и печататься как ПДФ, - пагинацию не сделать. Ну и ладно с этим - им все равно сколько страниц - все равно все нужны и все печатать.

но дочерних записей как оказалось можут быть тысчи! и на ВФ странице они приходят на фронт в виде Листа-коллекции, и он выпадает по лимиту (вот не думал, что с этим лимитом когда-нибудь столкнусь).

И что делать?

пока как идею - организовать цепочку самооткрывающихся страниц - сначало вызывается первая страница и если ее контроллер видит что там более 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. Использование множества листов может привести к лимиту по размеру вьюстейта. Мне кажется, проще и надежнее подгрузить скриптом, но тут пдф, так что даже и не знаю.

Den Brown
похоже что лимит только на каждую коллекцию:

http://kuldeeptyagi.blogspot.com/2011/05/salesforce-work-around-to-overcome-1000.html

но не уверен, буду проверять


Нужно использовать 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".

ReadOnly Annotation

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.

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]

wilder
Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate

Огромное спасибо.

Поставил - и все: страница размотала (один) лист на 2400 записей.

Но подгружать страницу пришлось около минуты - это оказалось 400 страниц!

Но все равно тему нужно изучить, еще не факт что 2400 - это предел у них.

Этот случай как та гифка про акулу сбивающую самолет ("Этот кейс не был предусмотрен") в ссылке в поздравлениях Дмитрия (там есть много гифок в комментах).

Дима Лисовский
Лимит на оператор repeat.

спасибо, это тоже интересный вопрос, в ошибке писалось, что превышен размер Колекции, так там есть еще лимит по итерациям рипитора? каждого или итерации всех рипитором суммируются? это нужно попробовать

[quote="wilder"]
Нужно использовать readonly в странице. С репитом это не поможет, зато сильно поможет с viewstate
[/quote]

Огромное спасибо. 

Поставил - и все: страница размотала (один) лист на 2400 записей.

Но подгружать страницу пришлось около минуты - это оказалось 400 страниц!

Но все равно тему нужно изучить, еще не факт что 2400 - это предел у них.

Этот случай как та гифка про акулу сбивающую самолет ("Этот кейс не был предусмотрен") в ссылке в поздравлениях Дмитрия (там есть много гифок в комментах).

[quote="Дима Лисовский"]Лимит на оператор repeat. [/quote]
спасибо, это тоже интересный вопрос, в ошибке писалось, что превышен размер Колекции, так там есть еще лимит по итерациям рипитора? каждого или итерации всех рипитором суммируются? это нужно попробовать
одного, вот дока https://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_repeat.htm

Дима Лисовский
Но подгружать страницу пришлось около минуты - это оказалось 400 страниц!

почему бы не формировать пдф асинхронно и не слать письмом клиенту?

пример формирования пдф и отправки по 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 кодов). КОгда я отправлю на браузер, даже в виде ПДФ дока - картинки грузятся на клиенте.

А если генерировать такой ПДФ на сервере, то получается что картинки будут подгружены в момент создания? тогда и размер будет - "будь здоров". Но этот момент - что произойдет с картинками-линками - если генить ПДФ на сервере из ВФ страницы (или собирать строка за строкой - и вставлять линк) - мне не совсем ясен. ВОзможно (и вероятно) что все картинки и не будут подгружаться на сервере, но не факт что вне брузера они подгрузятся в документ на клиенте.

Если ты генеришь ПДФ то салесфорс всегда вставляет картинки внутрь и это проблема.

Если ты генеришь ПДФ то салесфорс всегда вставляет картинки внутрь и это проблема.

wilder
вставляет картинки внутрь и

то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым?

а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?

[quote="wilder"]вставляет картинки внутрь и[/quote]

то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым? 

а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?

Den Brown
wilder
вставляет картинки внутрь и

то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым?

а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?

В этом одновремено и плюс и минус. да все картинки вставляются внутрь и формирует полностью готовый документ.

На клиенте никакие линки не подгружаются. все есть внутри документа. Если тебе нужно что бы что-то подгружалось используй другой формат.

[quote="Den Brown"][quote="wilder"]вставляет картинки внутрь и[/quote]

то есть если я указываю в ВФ странице(которая ПДФ) линк на картинку, а потом програмно генеру из этой ВФ страницы ПДф док, то салесфорс подгружает (или пытается подгрузить) каждую картинку в док и отправлет док полность готовым? 

а если ПДФ док собирался строка за строкой? или подгузятся ли эти линки на клиенте если открыть док в обычном ПДФ ридере?[/quote]

В этом одновремено и плюс и минус. да все картинки вставляются внутрь и формирует полностью готовый документ.

На клиенте никакие линки не подгружаются. все есть внутри документа. Если тебе нужно что бы что-то подгружалось используй другой формат. 

Подтверждаю - pdf формируется на стороне Salesforce и возвращается готовым документом.
Клиент (браузер) тут вообще не при чем.
На счет картинок ничего не скажу, но расскажу вот какой прикол - салесфорсовский генератор плохо переваривает css стили и сложную разметку VF страниц. Точный пример не приведу, было давно. НО помню как долго мучились со шрифтами которые заказчик хотел видеть в PDF, плюс на некоторые DOM элементы не применялись стили.

Поэтому я бы лучше посмотрел в сторону сторонних сервисов для формирования PDF.

Подтверждаю - pdf формируется на стороне Salesforce и возвращается готовым документом. 
Клиент (браузер) тут вообще не при чем.
На счет картинок ничего не скажу, но расскажу вот какой прикол - салесфорсовский генератор плохо переваривает css стили и сложную разметку VF страниц. Точный пример не приведу, было давно. НО помню как долго мучились со шрифтами которые заказчик хотел видеть в PDF, плюс на некоторые DOM элементы не применялись стили. 

Поэтому я бы лучше посмотрел в сторону сторонних сервисов для формирования PDF.

wilder
На клиенте никакие линки не подгружаются. все есть внутри документа.

Это со сгенерированным програмно ПДФ.

А с ВФ рендер как ПДФ страницей - здесь на клиенте подгужаются картинки?

Dmitry Shnyrev
салесфорсовский генератор плохо переваривает css

там вообще стилей почти нет. все форматирую средствами html. а вот никогда ранее не виданые мной стили для ПДФ форматирования там работают

[quote="wilder"]На клиенте никакие линки не подгружаются. все есть внутри документа. [/quote]

Это со сгенерированным програмно ПДФ. 

А с ВФ рендер как ПДФ страницей - здесь на клиенте подгужаются картинки?

[quote="Dmitry Shnyrev"]салесфорсовский генератор плохо переваривает css [/quote]

там вообще стилей почти нет. все форматирую средствами html. а вот никогда ранее не виданые мной стили для ПДФ форматирования там работают