Пакетный апекс и курсоры
У меня возникли трудности с этим абзацем из пакетной документации 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 - огромное улучшение).