Märkus.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida sisse logida või kausta vahetada.
Juurdepääs sellele lehele nõuab autoriseerimist. Võite proovida kausta vahetada.
Sündmus OnSave toimub järgmistel juhtudel.
- Kasutaja valib käsuribal nupu Salvesta või Värskenda isegi siis, kui salvestamiseks pole muudetud andmeid.
- Kood käivitab meetodi formContext.data.entity.save isegi siis, kui salvestamiseks pole muudetud andmeid.
- Kasutaja navigeerib vormist eemale ja vormil on salvestamata andmeid.
- Suvand Automaatsalvestus on lubatud, 30 sekundit pärast andmete muutmist ja vormil on salvestamata andmeid.
- Kood käivitab meetodi formContext.data.save ja vormil on salvestamata andmeid.
- Kood käivitab meetodi formContext.data.refresh , mis edastab esimese parameetrina tõese väärtuse ja vormil on salvestamata andmeid.
Märkus.
OnSave Kohtumise, korduva kohtumise või teenusetegevuse kirjete sündmus tühistab salvestamistoimingu ja kasutab sõnumit Book muudatuse püsimiseks, mitte Create või Update. Seetõttu OnSavePostSave ei tööta nende tabelite sündmuseohjurid.
Salvestamiseks klõpsatud nupu määramiseks kasutage meetodit getSaveMode .
Salvestustoimingu saate tühistada sündmuseargumentide objekti meetodi preventDefault abil. Meetodile preventDefault pääseb juurde täitmiskonteksti kuuluva meetodi getEventArgs abil. Käivituskontekst edastatakse automaatselt vormi sündmuseohjurile.
Asünkroonse sündmuseohjuri tugi
OnSave-sündmus saab enne salvestamist oodata, kuni sündmuseohjurite tagastatud lubadused lahendatakse, võimaldades OnSave sündmuse asünkroonset ("asünkroonne").
Sündmus OnSave muutub asünkroonseks, kui OnSave sündmuseohjur tagastab lubaduse. Kirje salvestamine toimub siis, kui ohjuri iga tagastatud lubadus on lahendatud. Kõigi tagastatavate lubaduste puhul kehtib iga lubaduse jaoks 10-sekundiline piirang, pärast mida peab platvorm lubaduste aegumist. See ajalõpp kehtib lubaduse kohta. Näiteks kui meil on tagastatud viis lubadust, on ooteaeg kokku 50 sekundit.
Kui lubadus lükatakse tagasi või aegub, käitub salvestustoiming samamoodi nagu praegused skriptitõrked. Kasutage selle ohjuri sündmuseargumentide objektis meetodit preventDefault , kui soovite ennetada salvestamissündmuse toimumist skriptitõrke/hüljatud lubaduse või ohjuri ajalõpu korral.
Salvestustoimingu saate tühistada ka sõltumata ohjuri tõrkest või sündmuseargumentide objektis meetodi preventDefault kasutamisest. Selle meetodi kutsumisel ootab Async OnSave-sündmus kõiki lubadusi, kuid salvestamist ei toimu. Selle meetodi kutsumine tähendab, et & .catch() käivitusloogika .then() .
Sündmus OnSave ootab ühe ohjuri kohta ühe lubaduse tagastamist. Kui vajate mitut lubadust, on soovitatav kõik meetodis Promise.all() sisalduvad lubadused murda ja tagastada üks saadud lubadus. Mitmele ohjurile, kes kõik lubaduse tagastavad, soovitame teil luua ühe ohjuri, mis kutsub kõik sündmused ja tagastab ühe lubaduse, mis murrab kõik nõutavad lubadused. See harjutus minimeerib ajalõpust tingitud ooteaegu.
Example scenario on when to use async OnSave handlers
Kaaluge töötellimuse hooldusülesande loomist, peate kontrollima, kas valitud kliendi varal on töötellimuses loetletud sama konto. Töötellimuse ja kliendivara konto toomine on nii asünkroonsed protsessid kui ka need tuleb enne valideerimist lõpule viia.
Selles stsenaariumis, kuna on mitu asünkroonset protsessi ja mõlemad kõned tagastavad ühe lubaduse, mähides mõlemad meetodisse Promise.all() .
Märkus.
Seda preventDefault meetodit saab kasutada ainult sünkroonselt.
Näiteks:
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"));
});
}
Luba Async OnSave rakenduse sätte abil
Aync onSave'i ohjurite kasutamiseks peate selle rakenduse sätte kaudu lubama.
Minge lehele https://make.powerapps.com.
Veenduge, et valite õige keskkonna.
Valige vasakpoolsel navigeerimispaanil suvand Rakendused.
Valige rakendus ja seejärel ... ( kolmikpunkt). Valige Redigeeri.
Valige käsuribal Sätted .
Kui dialoogiboks avaneb, valige Funktsioonid.
Lülitage sisse Async onSave ohjur.
Valige käsk Salvesta.
Async OnSave'i ajalõpud
Asünkroonse OnSave ohjuri kasutamisel ootab vorm ohjuri tagastatud lubaduse täitmist. Veendumaks, et vormi salvestamine on õigeaegselt lõpule viidud, põhjustab ohjur 10 sekundi pärast ajalõpu erandi, et anda teile teada asünkroonse OnSave ohjuri häälestamisest parema jõudluse huvides.
On stsenaariume, kus ohjuri peatamine OnSave kauem kui 10 sekundit on vajalik. Näide on dialoogi avamine ja kasutaja sisendi ootamine enne salvestamise jätkamist. Veendumaks, et asünkroonne toiming ootab lubaduse lahendamist, kasutage meetodit disableAsyncTimeout .
Märkus.
Enne mis tahes ootelolevaid või asünkroonseid kõnesid peate helistama disableAsyncTimeout .
Näiteks:
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?" });
}
Kui disableAsyncTimeout kutsutakse, ei rakendata selle ohjuri ajalõppu. See jätkab selle ohjuri lubaduse täitmist.
Seda mustrit tuleks kasutada ettevaatlikult, kuna see võib mõjutada vormi salvestamise jõudlust.
Seotud artiklid
Grid OnSave'i sündmus
Sündmused (kliendi API viide)
Sündmused mudelipõhiste rakenduste vormides ja ruudustikes