Jaa


Lomakkeen OnSave-tapahtuma (asiakkaan ohjelmointirajapinnan viittaus) mallipohjaisissa sovelluksissa

Tapahtuma OnSave ilmenee seuraavissa tilanteissa:

  • Käyttäjä valitsee komentopalkista Tallenna - tai Päivitä-painikkeen , vaikka tallennettavaa tietoa ei olisikaan muutettu.
  • Code suorittaa formContext.data.entity.save-menetelmän , vaikka tallennettavaa tietoa ei olisi muutettu.
  • Käyttäjä siirtyy pois lomakkeesta ja lomakkeessa on tallentamattomia tietoja.
  • Automaattinen tallennus -asetus on käytössä 30 sekunnin kuluttua tietojen muuttumisesta ja lomakkeella on tallentamattomia tietoja.
  • Koodi suorittaa formContext.data.save-menetelmän , ja lomakkeella on tallentamattomia tietoja.
  • Code suorittaa formContext.data.refresh-menetelmän välittämällä tosi-arvon ensimmäisenä parametrina, ja lomakkeessa on tallentamattomia tietoja.

Note

TapaamisenOnSave, toistuvan tapaamisen tai palveluaktiviteetin tietueiden tapahtuma peruuttaa tallennustoiminnon ja käyttää Book viestiä muutoksen säilymiseen - tai Create-tapahtuman sijaanUpdate. Tämän OnSavePostSave vuoksi näiden taulukoiden tapahtumakäsittelijät eivät toimi.

Voit selvittää, mitä painiketta napsautettiin tallennuksen suorittamiseksi, käyttämällä getSaveMode-menetelmää .

Voit peruuttaa tallenna-toiminnon käyttämällä preventDefault-menetelmää tapahtumaargumentit-objektissa. preventDefault-menetelmä on käytettävissä getEventArgs-menetelmällä, joka on osa suorituskontekstia. Suorituskonteksti välitetään automaattisesti lomakkeen tapahtumakäsittelijälle.

Asynkronisen tapahtumakäsittelijän tuki

OnSave-tapahtuma pystyy odottamaan tapahtumakäsittelijöiden palauttamia lupauksia sopimaan ennen tallentamista, jolloin OnSave tapahtuma on asynkroninen ("asynkroninen").

Tapahtumasta OnSave tulee asynkroninen, OnSave kun tapahtumakäsittelijä palauttaa lupauksen. Tietueen tallentaminen tapahtuu, kun jokainen käsittelijän palauttama lupaus ratkaistaan. Kaikille palautetuille lupauksille on 10 sekunnin raja kullekin lupaukselle, sen jälkeen alusta harkitsee aikakatkaisua. Tätä aikakatkaisua sovelletaan lupausta kohti. Esimerkiksi jos meillä on viisi lupausta palautettuna, odotusaika on yhteensä 50 sekuntia.

Jos lupaus hylätään tai aikakatkaistaan, tallennustoiminto toimii edelleen samalla tavalla kuin nykyiset komentosarjavirheet. Käytä preventDefault-menetelmää tapahtumaargumenttien objektissa kyseisessä käsittelijässä, jos haluat estää tallennustapahtuman toteutumisen, jos komentosarjavirhe/hylätty lupaus tai käsittelijä aikakatkaistaan.

Voit myös peruuttaa tallennustoiminnon riippumatta käsittelijän virheestä tai olla käyttämättä preventDefault-menetelmää tapahtumaargumenttien objektissa. Jos tätä menetelmää kutsutaan, Async OnSave -tapahtuma odottaa kaikkia lupauksia, mutta pelastusta ei tapahdu. Tämän menetelmän kutsuminen tarkoittaa , että kohteen & .then().catch() logiikka suoritetaan.

Tapahtuma OnSave odottaa yhtä lupaa, joka palautetaan käsittelijää kohti. Jos useita lupauksia vaaditaan, on suositeltavaa rivittää kaikki menetelmän Promise.all() lupaukset ja palauttaa yksittäinen tulokseksi saatava lupaus. Useille käsittelijöille, jotka kaikki palauttavat lupauksen, suosittelemme luomaan yhden käsittelijän, joka kutsuu kaikki tapahtumat, ja palauttamaan yhden lupauksen, joka rivittää kaikki vaaditut lupaukset. Tämä käytäntö on minimoida aikakatkaisun aiheuttamat odotusajat.

Esimerkkitilanne asynkronisia OnSave-käsittelijöitä kannattaa käyttää

Harkitse työtilauksen palvelutehtävän luomista. Sinun on vahvistettava, että valitulla asiakkaan resurssilla on sama tili, joka on lueteltu työtilauksessa. Työtilauksen ja asiakasresurssin tilin noutaminen on asynkronista prosessia, joka on suoritettava loppuun ennen kuin vahvistus voidaan tehdä.

Tässä skenaariossa, koska asynkronisia prosesseja on useita ja molemmat kutsut palauttavat yhden lupauksen sijoittamalla molemmat menetelmään Promise.all() .

Note

Menetelmää preventDefault voidaan käyttää vain synkronisesti.

Esimerkki:

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

Async OnSave -toiminnon ottaminen käyttöön sovellusasetuksen avulla

Jos haluat käyttää asynkronista onSave-käsittelijää, sinun on otettava se käyttöön sovellusasetuksen kautta:

  1. Siirry kohteeseen https://make.powerapps.com.

  2. Varmista, että valitset oikean ympäristön.

  3. Valitse vasemmassa siirtymisruudussa Sovellukset.

  4. Valitse sovellus ja valitse sitten ... (kolme pistettä). Valitse Muokkaa.

  5. Valitse komentopalkista Asetukset .

  6. Kun valintaikkuna avautuu, valitse Ominaisuudet.

  7. Ota Async onSave-käsittelijä käyttöön.

  8. Valitse Tallenna.

    Async OnSave -sovelluksen asetus

Async OnSave-aikakatkaisut

Kun käytät asynkronista OnSave käsittelijää, lomake odottaa käsittelijän palauttaman lupauksen täyttämistä. Sen varmistamiseksi, että lomake tallennetaan ajallaan, käsittelijä aiheuttaa aikakatkaisupoikkeuksen 10 sekunnin kuluttua kertoakseen asynkronisen OnSave käsittelijän hienosäätötoimintoa suorituskyvyn parantamiseksi.

On tilanteita, joissa käsittelijän OnSave keskeyttäminen kestää yli 10 sekuntia. Esimerkki on valintaikkunan avaaminen ja odottaminen käyttäjän syötettä ennen tallentamisen jatkamista. Varmista, että asynkroninen toiminto odottaa lupauksen ratkaisemista, käyttämällä disableAsyncTimeout-menetelmää .

Note

Sinun on kutsuttava disableAsyncTimeout ennen odottavia lausuntoja tai asynkronisia kutsuja.

Esimerkki:

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

Kun disableAsyncTimeout kutsutaan, kyseisen käsittelijän aikakatkaisua ei käytetä. Se odottaa edelleen, että käsittelijän lupaus täyttyy.

Tätä kaavaa tulee käyttää varoen, koska se saattaa vaikuttaa lomakkeen suorituskykyyn.

Ruudukon OnSave-tapahtuma
Tapahtumat (asiakasohjelman ohjelmointirajapinnan viittaus)
Mallimuotoisten sovellusten lomakkeiden ja ruudukoiden tapahtumat