Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az OnSave esemény akkor fordul elő, ha:
- A felhasználó a parancssáv Mentés vagy Frissítés gombját választja, még akkor is, ha nincs mentendő adat.
- A kód végrehajtja a formContext.data.entity.save metódust, még akkor is, ha nincs mentendő módosított adat.
- A felhasználó eltávolodik az űrlaptól, és nincsenek mentett adatok az űrlapon.
- Az Automatikus mentés beállítás engedélyezve van, 30 másodperccel az adatok módosítása után, és az űrlapon nem mentett adatok találhatók.
- A Kód végrehajtja a formContext.data.save metódust, és nincsenek mentett adatok az űrlapon.
- A Kód végrehajtja a formContext.data.refresh metódust, amely valódi értéket ad át első paraméterként, és nem mentett adatok találhatók az űrlapon.
Megjegyzés:
A OnSave találkozó, az ismétlődő találkozó vagy a szolgáltatástevékenység rekordjainak eseménye megszakítja a mentési műveletet, és az Book üzenet használatával megőrzi a módosítást ahelyett Create , hogy vagy Update. Emiatt a OnSavePostSave táblák eseménykezelői nem fognak működni.
Annak megállapításához, hogy melyik gombra kattintott a mentés végrehajtásához, használja a getSaveMode metódust .
A mentési műveletet az eseményargumentum-objektum preventDefault metódusával szakíthatja meg. A preventDefault metódus a végrehajtási környezet részét képező getEventArgs metódussal érhető el. A végrehajtási környezet automatikusan át lesz adva az űrlap eseménykezelőjének.
Aszinkron eseménykezelő támogatása
Az OnSave-esemény képes várni az eseménykezelők által visszaadott ígéreteket a mentés előtt, így az OnSave esemény aszinkron ("aszinkron") lesz.
Az OnSave esemény aszinkronná válik, amikor az OnSave eseménykezelő ígéretet ad vissza. A rekord mentése a kezelő által visszaadott összes ígéret feloldásakor történik. A visszaadott ígéretek esetében minden ígéretre 10 másodperces korlát vonatkozik, ezt követően a platform úgy véli, hogy az ígéretek időtúllépésre kerülnek. Ezt az időtúllépést ígéretenként alkalmazza a rendszer. Ha például öt ígéretet adunk vissza, a teljes várakozási idő 50 másodperc.
Ha az ígéret elutasításra vagy időtúllépésre kerül, a mentési művelet továbbra is az aktuális szkripthibákhoz hasonlóan fog viselkedni. Használja a preventDefault metódust az adott kezelő eseményargumentum-objektumán belül, ha meg szeretné akadályozni a mentési esemény bekövetkezését, ha szkripthiba/elutasított ígéret vagy kezelő túllépi az időkorlátot.
A mentési műveletet a kezelő hibájától függetlenül is megszakíthatja, vagy nem használhatja a preventDefault metódust az eseményargumentum-objektumon belül. Ha ezt a metódust hívják meg, az Async OnSave esemény megvárja az összes ígéretet, de a mentés nem történik meg. Ennek a metódusnak a meghívása azt jelenti, hogy a > .catch() rendszeren belüli .then() logika végrehajtja.
Az OnSave esemény egy, kezelőnként visszaadott ígéretre vár. Ha több ígéretre van szükség, javasoljuk, hogy csomagolja be az összes ígéretet a Promise.all() metódusba, és adja vissza az egyetlen eredményül kapott ígéretet. Több olyan kezelő esetében, amelyek mindegyike ígéretet ad vissza, javasoljuk, hogy hozzon létre egy kezelőt, amely meghívja az összes eseményt, és egyetlen ígéretet ad vissza, amely az összes szükséges ígéretet becsomagolja. Ez a gyakorlat az időtúllépés által okozott várakozási idő minimalizálása.
Példaforgatókönyv az aszinkron OnSave kezelők használatára
Érdemes lehet létrehozni egy munkarendelési szolgáltatásfeladatot, és ellenőriznie kell, hogy a kiválasztott ügyféleszköz ugyanazzal a fiókkal rendelkezik-e a munkarendelésben. A fiók beolvasása a munkarendelésen és az ügyféleszközön egyaránt aszinkron folyamat, és az ellenőrzés előtt be kell fejezni.
Ebben a forgatókönyvben, mivel több aszinkron folyamat is létezik, és mindkét hívás egyetlen ígéretet ad vissza úgy, hogy mindkettőt becsomagolja a Promise.all() metódusba.
Megjegyzés:
A preventDefault metódus csak szinkron módon használható.
Például:
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"));
});
}
Az Async OnSave engedélyezése alkalmazásbeállítással
Az aszinkron mentési kezelők használatához engedélyeznie kell azt egy alkalmazásbeállításon keresztül:
Ugrás ide: https://make.powerapps.com.
Győződjön meg arról, hogy a megfelelő környezetet választja ki.
Válassza a bal navigációs ablaktáblán az Alkalmazások elemet.
Jelölje ki az alkalmazást, majd válassza a ... (három pont) lehetőséget. Válassza a Szerkesztés lehetőséget.
Válassza a Beállítások lehetőséget a parancssávon.
Amikor megnyílik a párbeszédpanel, válassza a Szolgáltatások lehetőséget.
Kapcsolja be az Async-t aSave-kezelőn.
Válassza az Mentésgombot.
Async OnSave időtúllépések
Aszinkron OnSave kezelő használata esetén az űrlap megvárja a kezelő által visszaadott ígéret teljesítését. Annak érdekében, hogy az űrlap mentése időben befejeződjön, a kezelő 10 másodperc után időtúllépési kivételt küld, hogy tudassa Önvel az aszinkron OnSave kezelő hangolását a jobb teljesítmény érdekében.
Vannak olyan helyzetek, amikor a OnSave kezelő 10 másodpercnél hosszabb ideig történő szüneteltetése szükséges. Ilyen például egy párbeszédpanel megnyitása és a felhasználó bemenetének várakozása a mentés folytatása előtt. Annak érdekében, hogy az aszinkron művelet megvárja az ígéret feloldását, használja a disableAsyncTimeout metódust .
Megjegyzés:
Minden várakozási utasítás vagy aszinkron hívás előtt hívnia disableAsyncTimeout kell.
Például:
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?" });
}
A disableAsyncTimeout meghívásakor a rendszer nem alkalmazza a kezelő időtúllépését. Továbbra is várja, amíg a kezelő ígérete teljesül.
Ezt a mintát körültekintően kell használni, mivel ez befolyásolhatja az űrlap mentésének teljesítményét.
Kapcsolódó cikkek
Grid OnSave esemény
Események (ügyfél API-referencia)
Események űrlapokban és rácsokban a modellvezérelt alkalmazásokban