Piezīmes
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt pierakstīties vai mainīt direktorijus.
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt mainīt direktorijus.
Notikums OnSave notiek, ja:
- Lietotājs komandjoslā atlasa pogu Saglabāt vai Atsvaidzināt pat tad, ja nav mainīti saglabājamie dati.
- Kods izpilda metodi formContext.data.entity.save pat tad, ja nav mainīti saglabājamie dati.
- Lietotājs pārvietojas prom no veidlapas, un veidlapā ir nesaglabāti dati.
- Opcija Automātiskā saglabāšana ir iespējota 30 sekundes pēc tam, kad dati ir mainīti un veidlapā ir nesaglabāti dati.
- Code izpilda metodi formContext.data.save , un veidlapā ir nesaglabāti dati.
- Kods izpilda metodi formContext.data.refresh , nododot patieso vērtību kā pirmo parametru, un veidlapā ir nesaglabāti dati.
Piezīmes
TikšanāsOnSave, periodiskās tikšanās vai pakalpojuma darbības ierakstu notikums atcels saglabāšanas operāciju un izmantos Book ziņojumu, lai saglabātu izmaiņas, nevis Create vai .Update Šī OnSave iemesla dēļ šo PostSave tabulu notikumu apdarinātāji nedarbosies.
Lai noteiktu, uz kuras pogas tika noklikšķināts, lai veiktu saglabāšanu, izmantojiet getSaveMode metodi.
Saglabāšanas darbību var atcelt, izmantojot metodi preventDefault notikuma argumentu objektā. Metode preventDefault ir pieejama, izmantojot metodi getEventArgs, kas ir daļa no izpildes konteksta. Izpildes konteksts tiek automātiski nodots veidlapas notikumu apdarinātājam.
Asinhronā notikumu apdarinātāja atbalsts
Notikumam OnSave ir iespēja gaidīt, līdz notikumu apdarinātāju atgrieztie solījumi tiks nokārtoti pirms saglabāšanas, ļaujot OnSave notikumam būt asinhronam ("asinhronam").
Notikums OnSave kļūst asinhrons, kad OnSave notikumu apdarinātājs atgriež solījumu. Ieraksta saglabāšana notiek, kad tiek atrisināts katrs apstrādātāja atgrieztais solījums. Visiem atgrieztajiem solījumiem katram solījumam ir 10 sekunžu ierobežojums, pēc tam platforma uzskata, ka solījumi ir pārtraukti. Šis taimauts tiek piemērots katram solījumam. Piemēram, ja mums ir atgriezti pieci solījumi, kopējais gaidīšanas laiks ir 50 sekundes.
Ja solījums tiek noraidīts vai tam ir iestājies taimauts, saglabāšanas operācija turpina darboties līdzīgi pašreizējām skripta kļūdām. Izmantojiet metodi preventDefault konkrētā apdarinātāja notikuma argumentu objektā, ja vēlaties novērst saglabāšanas notikuma norisi, ja ir skripta kļūda/noraidīts solījums vai apdarinātāja taimauts.
Saglabāšanas operāciju var atcelt arī neatkarīgi no apdarinātāja kļūdas vai ne, izmantojot preventDefault metodi notikuma argumentu objektā. Ja šī metode tiek izsaukta, notikums Async OnSave gaida, līdz visi solījumi tiks nokārtoti, bet saglabāšana nenotiks. Šīs metodes izsaukšana nozīmē, ka tiks izpildīta loģika &.then().catch().
Pasākums OnSave gaida vienu solījumu, kas tiek atgriezts katram apstrādātājam. Ja ir nepieciešami vairāki solījumi, ieteicams visus solījumus iesaiņot metodē Promise.all() un atgriezt vienu iegūto solījumu. Vairākiem apdarinātājiem, kas visi atgriež solījumu, ieteicams izveidot vienu apdarinātāju, kas izsauc visus notikumus un atgriež vienu solījumu, kas aptver visus nepieciešamos solījumus. Šī prakse ir paredzēta, lai samazinātu gaidīšanas laiku, ko izraisa taimauts.
Scenārija piemērs par to, kad lietot asinhronus OnSave apdarinātājus
Apsveriet iespēju izveidot darba pasūtījuma pakalpojuma uzdevumu, jums ir jāpārbauda, vai atlasītajam debitora aktīvam ir tas pats konts, kas norādīts darba pasūtījumā. Konta iegūšana darba pasūtījumā un debitora aktīvā ir asinhroni procesi, un tie ir jāpabeidz pirms validācijas.
Šajā scenārijā, tā kā ir vairāki asinhroni procesi un abi zvani atgriež vienu solījumu, abus Promise.all() iesaiņojot metodē.
Piezīmes
Metodi preventDefault var izmantot tikai sinhroni.
Piemēram:
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"));
});
}
Iespējot Async OnSave, izmantojot lietotnes iestatījumu
Lai izmantotu asinhronu opcijuSaglabāt apdarinātājus, tas ir jāiespējo, izmantojot lietotnes iestatījumus:
Dodieties uz https://make.powerapps.com.
Pārliecinieties, vai ir atlasīta pareizā vide.
Kreisās puses navigācijas rūtī atlasiet Programmas.
Atlasiet programmu un pēc tam atlasiet ... (elipses). Atlasiet Rediģēt.
Komandjoslā atlasiet Iestatījumi .
Kad tiek atvērts dialoglodziņš, atlasiet Līdzekļi.
Ieslēdziet opciju AsinhronsSaglabāt apdarinātāju.
Atlasiet vienumu Saglabāt.
Asinhrons ieslēgtsTaimautu saglabāšana
Ja izmantojat asinhronu OnSave apdarinātāju, veidlapa gaida, līdz tiek izpildīts apdarinātāja atgrieztais solījums. Lai nodrošinātu, ka veidlapas saglabāšana tiek pabeigta savlaicīgi, apdarinātājs pēc 10 sekundēm izdarīs taimauta izņēmumu, lai informētu par asinhronā OnSave apdarinātāja noregulēšanu labākai veiktspējai.
Ir scenāriji, kad ir jāaptur OnSave apdarinātājs ilgāk par 10 sekundēm. Piemērs ir dialoga atvēršana un lietotāja ievades gaidīšana pirms saglabāšanas turpināšanas. Lai pārliecinātos, ka asinhronā operācija gaida solījuma atrisināšanu, izmantojiet disableAsyncTimeout metodi.
Piezīmes
Jums ir jāzvana disableAsyncTimeout , pirms gaida paziņojumus vai asinhronus zvanus.
Piemēram:
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?" });
}
Ja tiek izsaukts atspējojošais AsyncTimeout , šī apdarinātāja taimauts netiek lietots. Tā turpina gaidīt, kad šī apsaimniekotāja solījums tiks izpildīts.
Šis modelis jālieto piesardzīgi, jo tas var ietekmēt veidlapas saglabāšanas veiktspēju.
Saistītie raksti
Grid OnSave notikums
Notikumi (klienta API atsauce)
Notikumi veidlapās un režģos modeļa vadītās programmās