Пакетный апекс и курсоры

У меня возникли трудности с этим абзацем из пакетной документации Apex. речь идет о курсорах запросов, о которых я не узнал. Может кто-нибудь объяснить, пожалуйста, КК и что здесь происходит?

Пользователь может одновременно открыть до 50 курсоров запросов. Например, если открыто 50 курсоров и клиентское приложение все еще вошло в систему, когда тот же пользователь пытается открыть новый, самый старый из 50 курсоров освобождается. Обратите внимание, что этот предел отличается для пакетного метода Apexstart, в котором одновременно может быть открыто до пяти курсоров запросов для каждого пользователя. Другие пакетные методы Apex имеют верхний предел в 50 курсоров.

Ограничения курсора для различных функций Force.com отслеживаются отдельно. Например, вы можете одновременно открывать курсоры запросов 50Apex, 50 пакетных курсоров и 50Visualforce.

1 ответ

Решение

Я понимаю, что курсоры запросов возвращают пакетный и заблокированный список записей (заблокированный в том смысле, что другие обновления / изменения, например, за пределами пакетного Apex, не допускаются, пока с записями работают). Обычно курсоры запросов в Apex возвращаются Database.getQueryLocator метод.

Записи не все возвращаются одновременно, но разбиты на пакеты данных. Если было 500 записей, возможно, будут возвращены только первые 200 (это определяется областью действия / размером пакета, который по умолчанию равен 200), тогда код выполнения пакета будет выполняться снова для вторых 200, и снова для последнего 100 записей. Та же концепция применима к нумерации страниц Visualforce (обратите внимание на Database.getQueryLocator используется в стандартной инициализации контроллера в примере).

Что касается ограничений, в принципе, вы можете иметь только 50 звонков Database.getQueryLocator 50 пакетных классов Apex и 50 страниц Visualforce с разбиением на страницы (используя метод, описанный в примере) открываются / запускаются одновременно (этот предел составлял 5; 50 - огромное улучшение).

Другие вопросы по тегам