Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Peristiwa berlaku OnSave apabila:
- Pengguna memilih butang Simpan atau Muat Semula dalam bar perintah, walaupun tiada data yang diubah untuk disimpan.
- Kod melaksanakan kaedah formContext.data.entity.save , walaupun tiada data yang diubah untuk disimpan.
- Pengguna menavigasi jauh daripada borang dan terdapat data yang tidak disimpan dalam borang.
- Pilihan Autosimpan didayakan, 30 saat selepas data berubah dan terdapat data yang tidak disimpan dalam borang.
- Kod melaksanakan kaedah formContext.data.save dan terdapat data yang tidak disimpan dalam borang.
- Kod melaksanakan kaedah formContext.data.refresh yang menghantar nilai sebenar sebagai parameter pertama dan terdapat data yang tidak disimpan dalam borang.
Nota
Acara OnSave untuk janji temu, janji temu berulang atau rekod aktiviti perkhidmatan akan membatalkan operasi simpan dan menggunakan Book mesej untuk meneruskan perubahan dan bukannya Create atau Update. Oleh kerana itu, OnSave dan PostSave pengendali acara untuk jadual ini tidak akan berfungsi.
Untuk menentukan butang yang diklik untuk melakukan simpanan, gunakan kaedah getSaveMode .
Anda boleh membatalkan tindakan simpan dengan menggunakan kaedah preventDefault dalam objek argumen peristiwa. Kaedah preventDefault boleh diakses dengan menggunakan kaedah getEventArgs yang merupakan sebahagian daripada konteks pelaksanaan. Konteks pelaksanaan dihantar secara automatik kepada pengendali peristiwa borang.
Sokongan pengendali peristiwa tak segerak
Acara OnSave mempunyai keupayaan untuk menunggu janji yang dikembalikan oleh pengendali peristiwa untuk diselesaikan sebelum menyimpan, membolehkan OnSave peristiwa menjadi tak segerak ("tak segerak").
OnSave Peristiwa menjadi tak selacak apabila OnSave pengendali peristiwa mengembalikan janji. Menyimpan rekod berlaku apabila setiap janji yang dikembalikan oleh pengendali diselesaikan. Untuk sebarang janji yang dikembalikan, terdapat had 10 saat untuk setiap janji, selepas itu platform menganggap janji telah tamat masa. Tamat masa ini digunakan mengikut janji. Sebagai contoh, jika kita mempunyai lima janji yang dikembalikan, jumlah masa menunggu ialah 50 saat.
Jika janji ditolak atau tamat masa, operasi simpan terus berkelakuan serupa dengan ralat skrip semasa. Gunakan kaedah preventDefault dalam objek argumen peristiwa dalam pengendali tertentu jika anda ingin menghalang peristiwa simpan berlaku jika terdapat ralat skrip/janji ditolak atau masa tamat pengendali.
Anda juga boleh membatalkan operasi simpan tanpa mengira ralat dalam pengendali atau tidak menggunakan kaedah preventDefault dalam objek argumen peristiwa. Jika kaedah ini dipanggil, acara Async OnSave menunggu semua janji diselesaikan, tetapi simpanan tidak akan berlaku. Memanggil kaedah ini bermakna logik di dalam .then() & .catch() akan dilaksanakan.
Acara itu OnSave menunggu satu janji dikembalikan bagi setiap pengendali. Jika berbilang janji diperlukan, adalah disyorkan untuk membungkus semua janji dalam Promise.all() kaedah dan mengembalikan janji tunggal yang terhasil. Untuk berbilang pengendali yang semuanya mengembalikan janji, kami mengesyorkan anda mencipta satu pengendali yang memanggil semua peristiwa dan mengembalikan satu janji yang membungkus semua janji yang diperlukan. Amalan ini adalah untuk meminimumkan masa menunggu yang disebabkan oleh tamat masa.
Contoh senario tentang masa untuk menggunakan pengendali OnSave tak segerak
Pertimbangkan untuk mencipta Tugas Perkhidmatan Pesanan Kerja, anda perlu mengesahkan bahawa Aset Pelanggan yang dipilih mempunyai akaun yang sama yang disenaraikan dalam Pesanan Kerja. Mengambil akaun pada Pesanan Kerja dan Aset Pelanggan kedua-duanya adalah proses tak segerak dan perlu diselesaikan sebelum pengesahan boleh berlaku.
Dalam senario ini, memandangkan terdapat berbilang proses tak selacak dan kedua-dua panggilan mengembalikan satu janji dengan membungkus kedua-duanya dalam Promise.all() kaedah.
Nota
Kaedah ini preventDefault hanya boleh digunakan secara serentak.
Contohnya:
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"));
});
}
Dayakan Async OnSave menggunakan tetapan apl
Untuk menggunakan pengendali tak segerak onSimpan, anda perlu mendayakannya melalui tetapan apl:
Pergi ke https://make.powerapps.com.
Pastikan pilih persekitaran yang betul.
Pilih Aplikasi dari anak tetingkap navigasi kiri.
Pilih apl dan kemudian pilih ... (elips). Pilih Edit.
Pilih Tetapan daripada bar perintah.
Apabila dialog dibuka, pilih Ciri.
Hidupkan Pengendali Simpan Tak Segerak.
Pilih Simpan.
Tamat masa OnSave Tak Selacak
Apabila anda menggunakan pengendali tak segerak OnSave , borang menunggu janji yang dikembalikan oleh pengendali dipenuhi. Untuk memastikan simpanan borang dilengkapkan tepat pada masanya, pengendali akan membuang pengecualian tamat masa selepas 10 saat untuk memberitahu anda untuk menala pengendali tak segerak OnSave untuk prestasi yang lebih baik.
Terdapat senario di mana menjeda OnSave pengendali selama lebih daripada 10 saat diperlukan. Contohnya ialah membuka dialog dan menunggu input pengguna sebelum meneruskan menyimpan. Untuk memastikan operasi tak selaak menunggu janji diselesaikan, gunakan kaedah disableAsyncTimeout .
Nota
Anda mesti menghubungi disableAsyncTimeout sebelum sebarang penyata tunggu atau panggilan tak segerak.
Contohnya:
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?" });
}
Apabila disableAsyncTimeout dipanggil, tamat masa untuk pengendali itu tidak digunakan. Ia terus menunggu janji pengendali itu ditunaikan.
Corak ini harus digunakan dengan berhati-hati kerana ia mungkin menjejaskan prestasi simpanan borang.
Artikel berkaitan
Acara Grid OnSave
Peristiwa (rujukan API Klien)
Acara dalam borang dan grid dalam aplikasi dipacu model