Bagikan melalui


Peristiwa Form OnSave (referensi API Klien) di aplikasi berbasis model

Peristiwa terjadi OnSave ketika:

  • Pengguna memilih tombol Simpan atau Refresh di bilah perintah, bahkan ketika tidak ada data yang diubah untuk disimpan.
  • Kode menjalankan metode formContext.data.entity.save , bahkan ketika tidak ada data yang diubah untuk disimpan.
  • Pengguna menavigasi jauh dari formulir dan ada data yang tidak disimpan dalam formulir.
  • Opsi Simpan Otomatis diaktifkan, 30 detik setelah data berubah dan ada data yang tidak disimpan dalam formulir.
  • Kode menjalankan metode formContext.data.save dan ada data yang tidak disimpan dalam formulir.
  • Kode menjalankan metode formContext.data.refresh yang meneruskan nilai true sebagai parameter pertama dan ada data yang tidak disimpan dalam formulir.

Nota

Acara OnSave untuk janji temu, janji temu berulang, atau rekaman aktivitas layanan akan membatalkan operasi penyimpanan dan menggunakan Book pesan untuk mempertahankan perubahan daripada Create atau Update. Karena itu, OnSave dan PostSave penanganan aktivitas untuk tabel ini tidak akan berfungsi.

Untuk menentukan tombol mana yang diklik untuk melakukan penyimpanan, gunakan metode getSaveMode .

Anda dapat membatalkan tindakan simpan dengan menggunakan metode preventDefault dalam objek argumen peristiwa. Metode preventDefault dapat diakses dengan menggunakan metode getEventArgs yang merupakan bagian dari konteks eksekusi. Konteks eksekusi secara otomatis diteruskan ke penanganan aktivitas formulir.

Dukungan penanganan aktivitas asinkron

Peristiwa OnSave memiliki kemampuan untuk menunggu janji yang dikembalikan oleh penanganan aktivitas untuk diselesaikan sebelum disimpan, memungkinkan OnSave peristiwa menjadi asinkron ("asinkron").

Peristiwa OnSave menjadi asinkron ketika penanganan OnSave aktivitas mengembalikan janji. Penyimpanan rekaman terjadi ketika setiap janji yang dikembalikan oleh handler diselesaikan. Untuk setiap janji yang dikembalikan, ada batas 10 detik untuk setiap janji, setelah itu platform mempertimbangkan janji untuk kehabisan waktu. Batas waktu ini diterapkan per janji. Misalnya, jika kita memiliki lima janji yang dikembalikan, total waktu tunggu adalah 50 detik.

Jika janji ditolak atau kehabisan waktu, operasi penyimpanan terus berperilaku mirip dengan kesalahan skrip saat ini. Gunakan metode preventDefault dalam objek argumen peristiwa di handler tertentu jika Anda ingin mencegah peristiwa penyimpanan terjadi jika ada kesalahan skrip/janji yang ditolak atau waktu handler habis.

Anda juga dapat membatalkan operasi penyimpanan terlepas dari kesalahan di handler atau tidak menggunakan metode preventDefault dalam objek argumen peristiwa. Jika metode ini dipanggil, peristiwa Async OnSave menunggu semua janji diselesaikan, tetapi penyimpanan tidak akan terjadi. Memanggil metode ini berarti logika dalam .then() & .catch() akan dijalankan.

Peristiwa OnSave menunggu satu janji yang dikembalikan per handler. Jika beberapa janji diperlukan, disarankan untuk membungkus semua janji dalam Promise.all() metode dan mengembalikan satu janji yang dihasilkan. Untuk beberapa handler yang semuanya mengembalikan janji, kami sarankan Anda untuk membuat satu handler yang memanggil semua peristiwa dan mengembalikan satu janji yang membungkus semua janji yang diperlukan. Praktik ini untuk meminimalkan waktu tunggu yang disebabkan oleh waktu habis.

Contoh skenario tentang kapan menggunakan handler OnSave asinkron

Pertimbangkan untuk membuat Tugas Layanan Perintah Kerja, Anda perlu memvalidasi bahwa Aset Pelanggan yang dipilih memiliki akun yang sama yang tercantum dalam Perintah Kerja. Mengambil akun pada Perintah Kerja dan Aset Pelanggan adalah proses asinkron dan perlu diselesaikan sebelum validasi dapat terjadi.

Dalam skenario ini, karena ada beberapa proses asinkron dan kedua panggilan mengembalikan satu janji dengan membungkus keduanya dalam Promise.all() metode .

Nota

Metode preventDefault ini hanya dapat digunakan secara sinkron.

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

Mengaktifkan Async OnSave menggunakan pengaturan aplikasi

Untuk menggunakan handler onSave asinkron, Anda perlu mengaktifkannya melalui pengaturan aplikasi:

  1. Pergi ke https://make.powerapps.com.

  2. Pastikan pilih lingkungan yang benar.

  3. Dari panel navigasi kiri, pilih Aplikasi.

  4. Pilih aplikasi lalu pilih ... (elipsis). Pilih Edit.

  5. Pilih Pengaturan dari bilah perintah.

  6. Saat dialog terbuka, pilih Fitur.

  7. Aktifkan Async onSave handler.

  8. Pilih Simpan.

    Pengaturan aplikasi Async OnSave Pengaturan aplikasi

Batas waktu Asinkron OnSave

Saat Anda menggunakan handler asinkron OnSave , formulir menunggu janji yang dikembalikan oleh handler terpenuhi. Untuk memastikan bahwa penyimpanan formulir selesai tepat waktu, handler akan memberikan pengecualian batas waktu setelah 10 detik untuk memberi tahu Anda untuk menyetel handler asinkron OnSave untuk performa yang lebih baik.

Ada skenario saat menjeda OnSave handler selama lebih dari 10 detik diperlukan. Contohnya adalah membuka dialog dan menunggu input pengguna sebelum terus menyimpan. Untuk memastikan operasi asinkron menunggu janji diselesaikan, gunakan metode disableAsyncTimeout .

Nota

Anda harus memanggil disableAsyncTimeout sebelum pernyataan menunggu atau panggilan asinkron.

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

Saat disableAsyncTimeout dipanggil, batas waktu untuk handler tersebut tidak diterapkan. Ini terus menunggu janji handler itu terpenuhi.

Pola ini harus digunakan dengan hati-hati karena dapat memengaruhi performa penyimpanan formulir.

Peristiwa Grid OnSave
Peristiwa (referensi API Klien)
Peristiwa dalam formulir dan kisi di aplikasi berdasarkan model