Dogodek Form OnSave (sklic na API odjemalca) v aplikacijah, ki temeljijo na modelu

Do OnSave dogodka pride, ko:

  • Uporabnik izbere gumb Shrani aliosveži v ukazni vrstici, tudi če ni nobenih spremenjenih podatkov za shranjevanje.
  • Koda izvede metodo formContext.data.entity.save , tudi če ni spremenjenih podatkov za shranjevanje.
  • Uporabnik se premakne stran od obrazca in v obrazcu so neshranjeni podatki.
  • Možnost samodejnega shranjevanja je omogočena 30 sekund po spremenjenih podatkih in neshranjenih podatkih v obrazcu.
  • Koda izvede metodo formContext.data.save in v obrazcu so neshranjeni podatki.
  • Koda izvede metodo formContext.data.refresh , ki kot prvi parameter poda resnično vrednost, v obrazcu pa so neshranjeni podatki.

opomba,

Dogodek OnSave za zapise sestanka, ponavljajočega Book se sestanka ali storitvene dejavnosti bo preklical postopek shranjevanja in uporabil sporočilo, da ohrani spremembo namesto Create ali Update. Zaradi tega in rutine OnSave za PostSave obravnavo dogodkov za te tabele ne bodo delovale.

Če želite določiti, kateri gumb je bil kliknjen za izvedbo shranjevanja, uporabite metodo getSaveMode .

Dejanje shranjevanja lahko prekličete tako, da uporabite metodo preventDefault v predmetu argumentov dogodka. Metoda preventDefault je dostopna z metodo getEventArgs, ki je del konteksta izvajanja. Kontekst izvajanja je samodejno posredovan rutini za obravnavo dogodkov obrazca.

Podpora za asinhrono rutino za obravnavo dogodkov

Dogodek OnSave lahko počaka na obljube, ki jih pridobiti rutine za obravnavo dogodkov, da se poravnajo pred shranjevanjem, OnSave kar omogoča asinhrono (»asinhrono«).

Dogodek OnSave postane asinhron, ko rutina OnSave za obravnavo dogodkov vrne obljubo. Shranjevanje zapisa se zgodi, ko razrešite vsako obljubo, ki jo vrne rutina za obravnavo. Za vse obljube, ki so vrnjene, je 10-sekundna omejitev za vsako obljubo, potem ko platforma meni, da je obljuba potekla. Ta časovna omejitev je uporabljena za posamezno obljubo. Če je na primer vrnjenih pet obljub, je skupni čas čakanja 50 sekund.

Če je obljuba zavrnjena ali je potekla časovna omejitev, postopek shranjevanja še naprej deluje podobno kot pri trenutnih napakah skripta. Uporabite metodo preventDefault v predmetu argumentov dogodka v določeni rutini za obravnavo, če želite preprečiti, da bi se dogodek shranjevanja zgodilo, če pride do napake skripta/zavrnjene obljube ali se časi rutine za obravnavo odtehtajo.

Shranjevanje lahko prekličete tudi ne glede na napako v rutini za obravnavo ali pa ne uporabite metode preventDefault v predmetu argumentov dogodka. Če ta način pokličete, dogodek Asinhrono vklopljeno shranjevanje počaka na poravnavo vseh obljub, vendar shranjevanje ne bo izvedeno. Klicanje te metode pomeni, da se bo logika v .then() & .catch() izvedla.

Dogodek OnSave čaka na eno obljubo, vrnjeno na rutino za obravnavo. Če je zahtevanih več obljub, priporočamo, da vse obljube prelomite v metodi in Promise.all() vrnete posamezno dobljeno obljubo. Za več rutin, ki vrnejo obljubo, vam priporočamo, da ustvarite enega rutino za obravnavo, ki pokliče vse dogodke in vrne eno samo obljubo, ki prelomi vse zahtevane obljube. Ta postopek je minimiziranje časa čakanja, ki ga povzroči časovna omejitev.

Example scenario on when to use async OnSave handlers

Priporočamo vam, da ustvarite opravilo servisa delovnega naloga. Preverite, ali ima izbrano sredstvo kupca isti račun, naveden v delovnem nalogu. Prejemanje računa v delovnem nalogu in s sredstvom stranke sta asinhrona postopka in ga je treba dokončati, preden lahko pride do preverjanja veljavnosti.

V tem primeru, ker obstaja več asinhronih procesov in oba klica vrneta eno obljubo tako, da obe prelomita v načinu Promise.all() .

opomba,

Metodo preventDefault lahko uporabljate le sinhrono.

Primer:

 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"));
   });
 }

Omogočanje asinhronega shranjevanja z nastavitvijo aplikacije

Če želite uporabiti rutine za obravnavo asinhronega shranjevanja, jo morate omogočiti prek nastavitve aplikacije:

  1. Obiščite spletno mesto https://make.powerapps.com.

  2. Preverite, ali ste izbrali ustrezno okolje.

  3. V levem podoknu za krmarjenje izberite Programi.

  4. Izberite aplikacijo in nato ... (tri pike). Izberite Uredi.

  5. V ukazni vrstici izberite Nastavitve.

  6. Ko se odpre pogovorno okno, izberite Funkcije.

  7. Vklopite rutino za obravnavo asinhronega shranjevanja.

  8. Izberite možnost Shrani.

    Nastavitev aplikacije Asinhrono onSave

Asinhrone časovne omejitve ob shranjevanju

Ko uporabite asinhrono OnSave rutino za obravnavo, obrazec počaka, da se izpolni obljuba, ki jo vrne rutina za obravnavo. Če želite zagotoviti pravočasno dokončanje shranjevanja obrazca, bo rutina za obravnavo prikazala izjemo časovne omejitve po 10 OnSave sekundah, da vas obvesti, da morate za boljšo učinkovitost delovanja nastaviti asinhrono rutino za obravnavo.

Obstajajo primeri, kjer je potrebno začasno zauporati OnSave rutino za obravnavo za več kot 10 sekund. Primer je odpiranje pogovornega okna in čakanje na uporabnikov vnos, preden nadaljujete shranjevanje. Če želite zagotoviti, da postopek asinhronega sinhronizacije čaka na rešitev obljube, uporabite metodo disableAsyncTimeout .

opomba,

Pred čakanjem na disableAsyncTimeout izjave ali asinhrone klice morate poklicati.

Primer:

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?" });
 }

Ko je poklican disableAsyncTimeout , časovna omejitev za to rutino za obravnavo ni uporabljena. Še vedno čaka, da se izpolni obljuba tega rutine.

Ta vzorec uporabite previdno, saj lahko vpliva na učinkovitost shranjevanja obrazca.

Dogodek grid onsave
Dogodki (sklic na API odjemalca)
Dogodki v obrazcih in mrežah v aplikacijah, ki temeljijo na modelu