Салесфорце Апек – ограничења гувернера

Salesforce Apek Ogranicena Guvernera



Салесфорце нам омогућава да обрадимо или извршимо одређени број изјава/записа истовремено. Постоје нека ограничења за извршавање или обраду ДМЛ изјава, Апек класа итд. Ове границе су познате као границе гувернера. У овом водичу ћемо видети шта су ограничења гувернера и како се њима може руковати. Такође, Салесфорце Апек обезбеђује класу „Лимит“ да зна ограничења која се односе на облачиће, Апек класе, Лигхтнинг веб компоненте, СОСЛ и СОКЛ изјаве.

Ограничења гувернера

Размотрите сценарио где су Алиш и Субаш две особе које користе Салесфорце орг. Алиса жели да обради или изврши 1000 ДМЛ изјава  у једној трансакцији. Паралелно, Субасх жели да учита 5000 записа одједном. Ако то раде паралелно, Салесфорце неће прихватити и постаје ужурбан. Дакле, границе гувернера долазе у обзир. У овом случају, Алисх може обрадити 100 ДМЛ одједном, а Субасх може обрадити 500 записа одједном. Они могу да користе АсинцхроноусБатцх Апек да изврше сваку трансакцију на посебној нити без ометања сваког од њих и да заврше свој задатак.







У основи, ограничења гувернера у Салесфорце-у ограничавају обраду и извршење у више трансакција. „Апек лимитс пер-Трансацтион Апек Лимитс“ се рачуна за сваку трансакцију, а „Сизе-Специфиц Апек Лимит“ се бави величином  кода. Салесфорце подржава два процеса: синхроне и асинхроне процесе. У синхроном процесу, Апек скрипта се извршава у једном потезу, док се у асинхроном процесу Апек скрипта извршава раздвајањем на више послова.



Дозвољена ограничења

Хајде да разговарамо о броју ограничења за различите сценарије:



  1. Може бити могуће обрадити/покренути 100 СОКЛ упита у синхроном Апек-у и 200 СОКЛ упита у асинхроном Апек-у.
  2. Само 50.000 записа ће се вратити из СОКЛ упита за синхрони и асинхрони апекс.
  3. Ако користимо Датабасе.гетКуериЛоцатор(), само 10.000 се враћа истовремено за синхрони и асинхрони Апек.
  4. У оба сценарија, број издатих СОСЛ упита је 20.
  5. Величина гомиле која је потребна за обраду синхроног Апек-а је 6 МБ. За асинхрони Апек, потребна величина гомиле је двострука, што је чини 12 МБ.
  6. Максимално ЦПУ време које је дозвољено за синхрони Апек је 10.000 милисекунди и 60.000 милисекунди за асинхрони Апек.
  7. За оба Апека је дозвољено само 10 минута за извршење.
  8. У оба случаја можемо користити само 10 сендЕмаил() метод са 100 прималаца.
  9. Знакови који су присутни у Апек класи или у Апек окидачу морају бити унутар 1 милион.
  10. У Батцх Апек-у (асинхрони), величина је 200. КуериЛоцатор() класе „База података“ враћа 50 милиона записа по трансакцији.
  11. Само 5 Апек послова ће бити у реду или активно.

Пример класе ЛИМИТ:

Апек може специфицирати ограничења гувернера у класи „ЛИМИТ“. Ова класа пружа неке методе које говоре о границама гувернера. Погледајмо следећи пример који приказује нека ограничења гувернера:





Систем.дебуг('Број збирних упита који се могу обрадити: '+ Лимитс.гетЛимитАггрегатеКуериес());

Систем.дебуг('Број исказа Веб сервиса који се могу обрадити: '+ Лимитс.гетЛимитЦаллоутс());

Систем.дебуг('Број записа који се могу обрадити: '+ Лимитс.гетЛимитДмлРовс());

Систем.дебуг('Број ДМЛ изјава се може позвати: '+ Лимитс.гетЛимитДмлСтатементс());

Систем.дебуг('Укупна количина меморије у бајтовима: '+ Лимитс.гетЛимитХеапСизе());

Систем.дебуг('Број СОКЛ упита се може издати: '+ Лимитс.гетЛимитКуериес());

Систем.дебуг('Број записа се може издати: '+ Лимитс.гетЛимитКуериРовс());

Систем.дебуг('Број СОСЛ упита се може издати:  '+ Лимитс.гетЛимитСослКуериес());

Излаз:

Такође је могуће проверити колико ДМЛ исказа/редова може бити враћено коришћењем метода „доме“ које су присутне у класи „ЛИМИТ“.



  1. Лимитс.гетДМЛСтатементс() враћа укупне ДМЛ изјаве које се користе у инстанци.
  2. Лимитс.гетДМЛРовс() враћа укупан број редова које враћају ДМЛ изрази.
  3. Лимитс.гетЦпуТиме() враћа ЦПУ искоришћено време за тренутну трансакцију у милисекундама.

Пример употребе:

Хајде да напишемо СОКЛ упит који враћа два записа из објекта „ВоркОрдер“. Након тога, избришите ова два записа користећи „делете“ ДМЛ.

Систем.дебуг('ДМЛ изјаве:'+Лимитс.гетДМЛСтатементс());

Систем.дебуг('Ровс: '+Лимитс.гетДмлРовс());

Систем.дебуг('ЦПУ Тиме'+Лимитс.гетЦпуТиме());

// СОКЛ упит за одабир 2 реда из ВоркОрдер објекта

Листа<ВоркОрдер> налога = [ИЗАБИР ИД ИЗ ОГРАНИЧЕЊА ВоркОрдер 2];

//Користите делете ДМЛ за брисање два реда

брисање налога;

Систем.дебуг('**Након СОКЛ:**');

Систем.дебуг('ДМЛ изјаве:'+Лимитс.гетДМЛСтатементс());

Систем.дебуг('Ровс: '+Лимитс.гетДмлРовс());

Систем.дебуг('ЦПУ Тиме'+Лимитс.гетЦпуТиме());

Излаз:

У датом примеру нема ДМЛ изјава и 0 редова. Постојеће ЦПУ време је 1 милисекунда. Након враћања 2 реда из СОКЛ упита и брисања ова два реда, укупан број ДМЛ изјава које враћа Лимитс.гетДМЛСтатементс() је 1, укупан број редова које враћа Лимитс.гетДМЛРовс()  је 2, а ЦПУ време које је потребно за извршење ове трансакције је 51 милисекунда.

Пример најбоље праксе:  „НИКАД НЕ КОРИСТИТЕ ДМЛ У петљи“

Хајде да видимо како можемо да покренемо код без добијања ограничења гувернера. Прво креирамо запис о објекту „Производ“ (АПИ – Производ2) од   „ВоркОрдер“ објекта тако што додељујемо субјект „ВоркОрдер“ „Називу производа“ у самој петљи „фор“. Погледајмо следећи код:

Продуцт2 прод_обј;

за (ВоркОрдер во_објецт : [СЕЛЕЦТ Субјецт ФРОМ ВоркОрдер])

{

прод_обј = нови производ2(име = во_објецт.Субјецт);

инсерт прод_обј;

}

То можемо да урадимо на бољи начин тако што ћемо прогласити листу (прод_с), а затим сачувати прод_обј на листи. Ову листу можемо уметнути у производ изван петље.

Листа<Производ2> прод_с = нова Листа<Производ2>();

Продуцт2 прод_обј;

за (ВоркОрдер во_објецт : [СЕЛЕЦТ Субјецт ФРОМ ВоркОрдер])

{

прод_обј = нови производ2(име = во_објецт.Субјецт);

прод_с.адд(прод_обј);

}

инсерт прод_обј;

Закључак

Сада смо сазнали која су Апек ограничења у Салесфорце-у са детаљним објашњењем. Боље је користити Асинхрони Апек процес да бисте добили боље границе гувернера у поређењу са Синхрони Апек. Такође смо научили о ограничењима гувернера за различите сценарије и дали пример демонстрације у вези са бројем ограничења из класе „Лимит“. Такође смо верификовали број ДМЛ изјава, редова и ЦПУ времена тако што смо покренули једну ДМЛ изјаву. Овај водич смо закључили разматрањем једног примера најбоље праксе.