Салесфорце нам омогућава да обрадимо или извршимо одређени број изјава/записа истовремено. Постоје нека ограничења за извршавање или обраду ДМЛ изјава, Апек класа итд. Ове границе су познате као границе гувернера. У овом водичу ћемо видети шта су ограничења гувернера и како се њима може руковати. Такође, Салесфорце Апек обезбеђује класу „Лимит“ да зна ограничења која се односе на облачиће, Апек класе, Лигхтнинг веб компоненте, СОСЛ и СОКЛ изјаве.
Ограничења гувернера
Размотрите сценарио где су Алиш и Субаш две особе које користе Салесфорце орг. Алиса жели да обради или изврши 1000 ДМЛ изјава у једној трансакцији. Паралелно, Субасх жели да учита 5000 записа одједном. Ако то раде паралелно, Салесфорце неће прихватити и постаје ужурбан. Дакле, границе гувернера долазе у обзир. У овом случају, Алисх може обрадити 100 ДМЛ одједном, а Субасх може обрадити 500 записа одједном. Они могу да користе АсинцхроноусБатцх Апек да изврше сваку трансакцију на посебној нити без ометања сваког од њих и да заврше свој задатак.
У основи, ограничења гувернера у Салесфорце-у ограничавају обраду и извршење у више трансакција. „Апек лимитс пер-Трансацтион Апек Лимитс“ се рачуна за сваку трансакцију, а „Сизе-Специфиц Апек Лимит“ се бави величином кода. Салесфорце подржава два процеса: синхроне и асинхроне процесе. У синхроном процесу, Апек скрипта се извршава у једном потезу, док се у асинхроном процесу Апек скрипта извршава раздвајањем на више послова.
Дозвољена ограничења
Хајде да разговарамо о броју ограничења за различите сценарије:
- Може бити могуће обрадити/покренути 100 СОКЛ упита у синхроном Апек-у и 200 СОКЛ упита у асинхроном Апек-у.
- Само 50.000 записа ће се вратити из СОКЛ упита за синхрони и асинхрони апекс.
- Ако користимо Датабасе.гетКуериЛоцатор(), само 10.000 се враћа истовремено за синхрони и асинхрони Апек.
- У оба сценарија, број издатих СОСЛ упита је 20.
- Величина гомиле која је потребна за обраду синхроног Апек-а је 6 МБ. За асинхрони Апек, потребна величина гомиле је двострука, што је чини 12 МБ.
- Максимално ЦПУ време које је дозвољено за синхрони Апек је 10.000 милисекунди и 60.000 милисекунди за асинхрони Апек.
- За оба Апека је дозвољено само 10 минута за извршење.
- У оба случаја можемо користити само 10 сендЕмаил() метод са 100 прималаца.
- Знакови који су присутни у Апек класи или у Апек окидачу морају бити унутар 1 милион.
- У Батцх Апек-у (асинхрони), величина је 200. КуериЛоцатор() класе „База података“ враћа 50 милиона записа по трансакцији.
- Само 5 Апек послова ће бити у реду или активно.
Пример класе ЛИМИТ:
Апек може специфицирати ограничења гувернера у класи „ЛИМИТ“. Ова класа пружа неке методе које говоре о границама гувернера. Погледајмо следећи пример који приказује нека ограничења гувернера:
Систем.дебуг('Број збирних упита који се могу обрадити: '+ Лимитс.гетЛимитАггрегатеКуериес());
Систем.дебуг('Број исказа Веб сервиса који се могу обрадити: '+ Лимитс.гетЛимитЦаллоутс());
Систем.дебуг('Број записа који се могу обрадити: '+ Лимитс.гетЛимитДмлРовс());
Систем.дебуг('Број ДМЛ изјава се може позвати: '+ Лимитс.гетЛимитДмлСтатементс());
Систем.дебуг('Укупна количина меморије у бајтовима: '+ Лимитс.гетЛимитХеапСизе());
Систем.дебуг('Број СОКЛ упита се може издати: '+ Лимитс.гетЛимитКуериес());
Систем.дебуг('Број записа се може издати: '+ Лимитс.гетЛимитКуериРовс());
Систем.дебуг('Број СОСЛ упита се може издати: '+ Лимитс.гетЛимитСослКуериес());
Излаз:
Такође је могуће проверити колико ДМЛ исказа/редова може бити враћено коришћењем метода „доме“ које су присутне у класи „ЛИМИТ“.
- Лимитс.гетДМЛСтатементс() враћа укупне ДМЛ изјаве које се користе у инстанци.
- Лимитс.гетДМЛРовс() враћа укупан број редова које враћају ДМЛ изрази.
- Лимитс.гетЦпуТиме() враћа ЦПУ искоришћено време за тренутну трансакцију у милисекундама.
Пример употребе:
Хајде да напишемо СОКЛ упит који враћа два записа из објекта „ВоркОрдер“. Након тога, избришите ова два записа користећи „делете“ ДМЛ.
Систем.дебуг('ДМЛ изјаве:'+Лимитс.гетДМЛСтатементс());Систем.дебуг('Ровс: '+Лимитс.гетДмлРовс());
Систем.дебуг('ЦПУ Тиме'+Лимитс.гетЦпуТиме());
// СОКЛ упит за одабир 2 реда из ВоркОрдер објекта
Листа<ВоркОрдер> налога = [ИЗАБИР ИД ИЗ ОГРАНИЧЕЊА ВоркОрдер 2];
//Користите делете ДМЛ за брисање два реда
брисање налога;
Систем.дебуг('**Након СОКЛ:**');
Систем.дебуг('ДМЛ изјаве:'+Лимитс.гетДМЛСтатементс());
Систем.дебуг('Ровс: '+Лимитс.гетДмлРовс());
Систем.дебуг('ЦПУ Тиме'+Лимитс.гетЦпуТиме());
Излаз:
У датом примеру нема ДМЛ изјава и 0 редова. Постојеће ЦПУ време је 1 милисекунда. Након враћања 2 реда из СОКЛ упита и брисања ова два реда, укупан број ДМЛ изјава које враћа Лимитс.гетДМЛСтатементс() је 1, укупан број редова које враћа Лимитс.гетДМЛРовс() је 2, а ЦПУ време које је потребно за извршење ове трансакције је 51 милисекунда.
Пример најбоље праксе: „НИКАД НЕ КОРИСТИТЕ ДМЛ У петљи“
Хајде да видимо како можемо да покренемо код без добијања ограничења гувернера. Прво креирамо запис о објекту „Производ“ (АПИ – Производ2) од „ВоркОрдер“ објекта тако што додељујемо субјект „ВоркОрдер“ „Називу производа“ у самој петљи „фор“. Погледајмо следећи код:
Продуцт2 прод_обј;за (ВоркОрдер во_објецт : [СЕЛЕЦТ Субјецт ФРОМ ВоркОрдер])
{
прод_обј = нови производ2(име = во_објецт.Субјецт);
инсерт прод_обј;
}
То можемо да урадимо на бољи начин тако што ћемо прогласити листу (прод_с), а затим сачувати прод_обј на листи. Ову листу можемо уметнути у производ изван петље.
Листа<Производ2> прод_с = нова Листа<Производ2>();Продуцт2 прод_обј;
за (ВоркОрдер во_објецт : [СЕЛЕЦТ Субјецт ФРОМ ВоркОрдер])
{
прод_обј = нови производ2(име = во_објецт.Субјецт);
прод_с.адд(прод_обј);
}
инсерт прод_обј;
Закључак
Сада смо сазнали која су Апек ограничења у Салесфорце-у са детаљним објашњењем. Боље је користити Асинхрони Апек процес да бисте добили боље границе гувернера у поређењу са Синхрони Апек. Такође смо научили о ограничењима гувернера за различите сценарије и дали пример демонстрације у вези са бројем ограничења из класе „Лимит“. Такође смо верификовали број ДМЛ изјава, редова и ЦПУ времена тако што смо покренули једну ДМЛ изјаву. Овај водич смо закључили разматрањем једног примера најбоље праксе.