Model temelli uygulamalarda Form OnSave olayı (İstemci API başvurusu)

Model temelli uygulamalarda form OnSave olayı, kayıt kaydedilmeden önce mantık çalıştırmanıza, verileri doğrulamanıza veya kaydetme işlemini iptal etmenizi sağlar. Olay OnSave şu durumlarda gerçekleşir:

  • Kullanıcı, kaydedilecek veri değişmese bile komut çubuğunda Kaydet veya Yenile düğmesini seçer.
  • Kod, kaydedilecek veri değişmese bile formContext.data.entity.save yöntemini yürütür.
  • Kullanıcı formdan uzaklaşır ve formda kaydedilmemiş veriler vardır.
  • Otomatik Kaydet seçeneği, veriler değiştikten 30 saniye sonra etkinleştirilir ve formda kaydedilmemiş veriler vardır.
  • Kod , formContext.data.save yöntemini yürütür ve formda kaydedilmemiş veriler vardır.
  • Kod , formContext.data.refresh yöntemini yürüterek ilk parametre olarak gerçek bir değer geçirir ve formda kaydedilmemiş veriler vardır.

Uyarı

RandevuOnSave, yinelenen randevu veya hizmet etkinliği kayıtları olayı kaydetme işlemini iptal eder ve veya Updateyerine Create değişikliği kaydetmek için iletiyi kullanır.Book Bu davranış OnSave nedeniyle ve PostSave bu tablolar için olay işleyicileri çalışmaz.

Kaydetme işlemini gerçekleştirmek için hangi düğmeye tıklandığını belirlemek için getSaveMode yöntemini kullanın.

Olay bağımsız değişkenleri nesnesi içinde preventDefault yöntemini kullanarak kaydetme eylemini iptal edebilirsiniz. preventDefault yöntemine, yürütme bağlamının parçası olan getEventArgs yöntemi kullanılarak erişilebilir. Yürütme bağlamı form olay işleyicisine otomatik olarak geçirilir.

Zaman uyumsuz olay işleyicisi desteği

OnSave olayının, kaydetmeden önce olay işleyicileri tarafından döndürülen vaatlerin tamamlanmasını bekleme özelliği vardır ve bu da olayın zaman uyumsuz ("zaman uyumsuz") olmasını sağlar OnSave .

Olay OnSave işleyicisi bir söz döndürdüğünde OnSave olay zaman uyumsuz hale gelir. Kaydın kaydedilmesi, bir işleyici tarafından döndürülen her söz çözümlendiğinde gerçekleşir. Döndürülen tüm sözler için, her bir söz için 10 saniyelik bir sınır vardır, bundan sonra platform sözlerin zaman aşımına uğradı olduğunu düşünür. Bu zaman aşımı her vaat için uygulanır. Örneğin, beş söz döndürüldüyse toplam bekleme süresi 50 saniyedir.

Söz reddedilirse veya zaman aşımına uğradıysa, kaydetme işlemi geçerli betik hatalarına benzer şekilde davranmaya devam eder. Bir betik hatası/reddedilen söz veya işleyici zaman aşımına uğradıysa, kaydetme olayının gerçekleşmesini önlemek istiyorsanız bu işleyicideki olay bağımsız değişkenleri nesnesi içinde preventDefault yöntemini kullanın.

Ayrıca, işleyicideki hatadan bağımsız olarak kaydetme işlemini iptal edebilir veya olay bağımsız değişkenleri nesnesi içinde preventDefault yöntemini kullanmayabilirsiniz. Bu yöntem çağrılırsa, Async OnSave olayı tüm vaatlerin tamamlanmasını bekler, ancak kaydetme gerçekleşmez. Bu yöntemi çağırmak, içindeki .then() mantığın .catch() yürütüleceği anlamına gelir.

Olay, OnSave işleyici başına döndürülen bir söz bekler. Birden çok söz gerekiyorsa, yöntemdeki Promise.all() tüm promise'lerin sarmalanması ve sonuçta elde edilen tek sözün döndürülmesi önerilir. Tümü bir promise döndüren birden çok işleyici için, tüm olayları çağıran ve tüm gerekli vaatleri sarmalayan tek bir söz döndüren bir işleyici oluşturmanızı öneririz. Bu uygulama, zaman aşımının neden olduğu bekleme sürelerini en aza indirmektir.

Örnek: Zaman uyumsuz OnSave işleyicileri ne zaman kullanılır?

Seçilen Müşteri Varlığının İş Emri'nde listelenen hesapla aynı olduğunu doğrulamanız gereken bir İş Emri Hizmet Görevi oluşturmayı göz önünde bulundurun. İş Emrinde ve Müşteri Varlığında hesabı getirmek hem zaman uyumsuz işlemlerdir hem de doğrulamadan önce her ikisini de tamamlamanız gerekir.

Bu senaryoda, birden çok zaman uyumsuz işlem olduğundan ve her iki çağrı da tek bir söz döndüreceğinden, her ikisini de yönteminde Promise.all() sarmalar.

Uyarı

Yöntemini yalnızca zaman uyumlu olarak kullanabilirsiniz preventDefault .

Örneğin:

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

Uygulama ayarı kullanarak zaman uyumsuz OnSave işleyicilerini etkinleştirme

async onSave işleyicilerini kullanmak için bir uygulama ayarı aracılığıyla özelliği açın:

  1. https://make.powerapps.com'e gidin.

  2. Doğru ortamı seçtiğinizden emin olun.

  3. Sol gezinti bölmesinde, Uygulamalar'ı seçin.

  4. Uygulamayı seçin, ... (üç nokta) öğesini ve ardından Düzenle'yi seçin.

  5. Komut çubuğundan Ayarlar'ı seçin.

  6. İletişim kutusu açıldığında Özellikler'i seçin.

  7. Async onSave işleyicisini açın.

  8. Kaydetseçeneğini seçin.

    Uygulama Ayarları iletişim kutusunda Async onSave işleyicisi özellik ayarının açık olduğu ekran görüntüsü.

Zaman uyumsuz OnSave işleyicisi zaman aşımlarını devre dışı bırakma

Zaman uyumsuz OnSave bir işleyici kullandığınızda, form işleyici tarafından döndürülen sözün yerine getirilmesini bekler. Form kaydetme işleminin zamanında tamamlandığından emin olmak için işleyici, daha iyi performans için zaman uyumsuz OnSave işleyiciyi ayarlamanızı bildirmek üzere 10 saniye sonra bir zaman aşımı özel durumu oluşturur.

İşleyicinin 10 saniyeden OnSave uzun süre duraklatılması gereken senaryolar vardır. Bir iletişim kutusu açma ve kaydetmeye devam etmeden önce kullanıcının girişini bekleme örneğidir. Zaman uyumsuz işlemin promise'in çözülmesini beklediğinden emin olmak için disableAsyncTimeout yöntemini kullanın.

Uyarı

Await deyimlerinden veya zaman uyumsuz çağrılardan önce aramanız disableAsyncTimeout gerekir.

Örneğin:

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

disableAsyncTimeout çağrısı yaptığınızda, bu işleyici için zaman aşımı uygulanmaz. İşleyicinin sözünün yerine getirilmesini beklemeye devam eder.

Bu desen, form kaydetme performansını etkileyebilir.

Grid OnSave Olayı
Olaylar (İstemci API başvurusu)
Model temelli uygulamalarda formlar ve kılavuzlardaki olaylar