Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Olay OnSave şu durumlarda gerçekleşir:
- Kullanıcı, kaydedilecek değiştirilmiş veri olmasa bile komut çubuğunda Kaydet veya Yenile düğmesini seçer.
- Kod, kaydedilecek değiştirilmiş veri olmadığında 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 yerine BookCreatedeğişikliği kalıcı hale getirmek için iletiyi kullanırUpdate. Bu OnSave nedenle 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 .catch() mantığın .then() 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.
Zaman uyumsuz OnSave işleyicilerinin ne zaman kullanılacağına ilişkin örnek senaryo
İş Siparişi Servis Görevi oluşturmayı düşünün. Seçilen Müşteri Varlığı'nın İş Emri'nde listelenen hesapla aynı olduğunu doğrulamanız gerekir. İş Emri ve Müşteri Varlığındaki hesabın alınması hem zaman uyumsuz işlemlerdir hem de doğrulama gerçekleştirilmeden önce tamamlanması gerekir.
Bu senaryoda, birden çok zaman uyumsuz işlem olduğundan ve her iki çağrı da yönteminde Promise.all() her ikisini de sarmalayarak tek bir söz döndürür.
Uyarı
preventDefault yöntemi yalnızca zaman uyumlu olarak kullanılabilir.
Ö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ını kullanarak Async OnSave'i etkinleştirme
async onSave işleyicilerini kullanmak için bunu bir uygulama ayarı aracılığıyla etkinleştirmeniz gerekir:
https://make.powerapps.com'e gidin.
Doğru ortamı seçtiğinizden emin olun.
Sol gezinti bölmesinde, Uygulamalar'ı seçin.
Uygulamayı seçin ve ardından ... (üç nokta) öğesini seçin. Düzenle'yi seçin.
Komut çubuğundan Ayarlar'ı seçin.
İletişim kutusu açıldığında Özellikler'i seçin.
Async onSave işleyicisini açın.
Kaydetseçeneğini seçin.
Zaman Uyumsuz Kaydetme zaman aşımları
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 söz sorununun çö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ıldığında, bu işleyici için zaman aşımı uygulanmaz. İşleyicinin sözünün yerine getirilmesini beklemeye devam eder.
Form kaydetme performansını etkileyebileceği için bu desen dikkatli kullanılmalıdır.
İlgili makaleler
Grid OnSave Olayı
Olaylar (İstemci API başvurusu)
Model temelli uygulamalarda formlar ve kılavuzlardaki olaylar