Белешка
Приступ овој страници захтева ауторизацију. Можете покушати да се пријавите или промените директоријуме.
Приступ овој страници захтева ауторизацију. Можете покушати да промените директоријуме.
Догађај OnSave се дешава када:
- Корисник бира дугме Сачувај или Освежи у командној траци, чак и када нема промењених података за чување.
- Код извршава метод формЦонтеxт.дата.ентитy.саве , чак и када нема промењених података за чување.
- Корисник се удаљава од обрасца и у обрасцу се налазе несачувани подаци.
- Опција АутоСаве је омогућена, 30 секунди након што су подаци променили и постоје несачувани подаци у обрасцу.
- Код извршава метод формЦонтеxт.дата.саве и у обрасцу су несачувани подаци.
- Код извршава метод формЦонтеxт.дата.рефресх који преноси праву вредност као први параметар и у обрасцу су несачувани подаци.
Белешка
Догађај OnSave за именовање, понављајући састанак или евиденцију сервисних активности ће отказати операцију чувања и користити Book поруку да задржи промену, а не Create или Update. Због тога OnSave и руковаоци догађајима за ове табеле PostSave неће радити.
Да бисте утврдили на које дугме је кликнуто да бисте извршили чување, користите метод гетСавеМоде .
Можете отказати акцију чувања користећи метод превентДефаулт унутар објекта аргумената догађаја. Метода превентДефаулт је доступна коришћењем методе гетЕвентАргс која је део контекста извршења. Контекст извршења се аутоматски просљеђује руковаоцу догађаја обрасца.
Подршка за асинхроне руковаоце догађајима
ОнСаве догађај има могућност да сачека обећања која су вратили руковаоци догађаја да се измире пре чувања, омогућавајући догађају OnSave да буде асинхрони ("асинхрони").
Догађај OnSave постаје асинхрони када OnSave руковалац догађаја врати обећање. Чување записа се дешава када се реши свако обећање које је вратио руковалац. За сва обећања која се враћају, постоји ограничење од 10 секунди за свако обећање, након чега платформа сматра да ће обећања бити истекла. Овај тајм-аут се примењује по обећању. На пример, ако имамо пет обећања враћена, укупно време чекања је 50 секунди.
Ако је обећање одбијено или је истекло, операција чувања наставља да се понаша слично тренутним грешкама скрипте. Користите превентДефаулт метод унутар објекта аргумената догађаја у том одређеном руковаоцу ако желите да спречите догађај чувања да се деси ако постоји грешка скрипте / одбијено обећање или руковалац истекло време.
Такође можете отказати операцију чувања без обзира на грешку у руковаоцу или не користећи метод превентДефаулт унутар објекта аргумената догађаја. Ако се овај метод позове, Асинхрони ОнСаве догађај чека да се сва обећања измире, али се чување неће догодити. Позивање ове методе значи да ће се логика унутар
Догађај OnSave чека једно обећање враћено по руковаоцу. Ако је потребно више обећања, препоручује се да се сва обећања умотају у методу Promise.all() и врате једно резултирајуће обећање. За више руковаоца који сви враћају обећање, препоручујемо вам да креирате један руковалац који позива све догађаје и врати једно обећање које завршава сва потребна обећања. Ова пракса је да се смањи време чекања узроковано тајм-аутом.
Пример сценарија када користити асинхроне руковаоце ОнСаве
Размислите о креирању сервисног задатка радног налога, потребно је да потврдите да изабрана имовина купца има исти налог наведен у радном налогу. Преузимање рачуна на радном налогу и имовини купца су асинхрони процеси и потребно их је завршити пре него што дође до валидације.
У овом сценарију, пошто постоји више асинхроних процеса и оба позива враћају једно обећање омотавањем оба у методу Promise.all() .
Белешка
Метода preventDefault се може користити само синхроно.
На пример:
function myHandler() {
return Promise.all([getWorkOrderPromise, getCustomerAssetPromise]).then((values) => {
var workOrder = values[0];
var customerAsset = values[1];
// Perform validation
if (isValid(workOrder, customerAsset)) {
return Promise.resolve();
}
return Promise.reject(new Error("Validation failed for the work order and customer asset"));
});
}
Омогућите Асинхрони ОнСаве помоћу подешавања апликације
Да бисте користили асинхроне руковаоце онСаве, потребно је да га омогућите кроз подешавање апликације:
Иди на https://make.powerapps.com.
Уверите се да изаберете исправно окружење.
Изаберите Апликације у левом окну за навигацију.
Изаберите апликацију, а затим изаберите ... (елипсе). Изаберите Уреди.
Изаберите Подешавања из командне траке.
Када се дијалог отвори, изаберите Карактеристике .
Укључите Асинхрони онСаве руковалац .
Изаберите ставку Сачувај.
Асинхрони ОнСаве тајмаут
Када користите асинхрони OnSave руковалац, образац чека да се испуни обећање које је вратио руковалац. Да би се осигурало да се сачување обрасца заврши благовремено, руковалац ће бацити изузетак од временског ограничења након 10 секунди како би вас обавестио да подесите асинхрони OnSave руковалац за боље перформансе.
Постоје сценарији у којима је потребно паузирање руковаоца OnSave дуже од 10 секунди. Пример је отварање дијалога и чекање корисничког уноса пре него што наставите да чувате. Да бисте били сигурни да асинхрона операција чека да се обећање реши, користите метод дисаблеАсyнцТимеоут .
Белешка
Морате позвати disableAsyncTimeout пре било каквих изјава чекати или асинхроне позиве.
На пример:
async function myHandler(context) {
context.getEventArgs().disableAsyncTimeout();
// The 10000ms time out will not be disabled if the above line does not come before all async awaits
await Xrm.Navigation.openConfirmDialog({ text: "Are you sure you want to save?" });
}
Када се позове дисаблеАсyнцТимеоут , временско ограничење за тај руковалац се не примењује. Наставља да чека да се испуни обећање тог руководиоца.
Овај образац треба користити са опрезом јер може утицати на перформансе образца сачувати.
Сродни чланци
Грид ОнСаве догађај
Догађаји (референца клијентског АПИ-ја)
Догађаји у облицима и мрежама у апликацијама заснованим на моделу