नोट
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप साइन इन करने या निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
OnSave घटना तब होती है जब:
- उपयोगकर्ता कमांड बार में सहेजें या ताज़ा करें बटन का चयन करता है, तब भी जब सहेजा जाने के लिए कोई बदला हुआ डेटा न हो।
- कोड formContext.data.entity.save विधि निष्पादित करता है, तब भी जब सहेजा जाने के लिए कोई परिवर्तित डेटा नहीं है।
- उपयोगकर्ता प्रपत्र से दूर नेविगेट करता है और प्रपत्र में सहेजा नहीं गया डेटा है।
- स्वत: सहेजें विकल्प सक्षम है, डेटा बदलने के 30 सेकंड बाद और प्रपत्र में सहेजा नहीं गया डेटा है।
- कोड formContext.data.save विधि को निष्पादित करता है और प्रपत्र में सहेजा नहीं गया डेटा है।
- कोड formContext.data.refresh विधि को पहले पैरामीटर के रूप में एक सही मान पास करता है और फॉर्म में सहेजा नहीं गया डेटा होता है।
नोट
OnSave अपॉइंटमेंट, पुनरावर्ती अपॉइंटमेंट या सेवा गतिविधि रिकॉर्ड के लिए ईवेंट सहेजें कार्रवाई को रद्द कर देगा और या के Bookबजाय Create परिवर्तन को जारी रखने के लिए संदेश का Update उपयोग करेगा. इस वजह से, OnSave और PostSave इन तालिकाओं के लिए ईवेंट हैंडलर काम नहीं करेंगे।
यह निर्धारित करने के लिए कि सहेजें करने के लिए किस बटन पर क्लिक किया गया था, getSaveMode विधि का उपयोग करें।
आप ईवेंट तर्क ऑब्जेक्ट में preventDefault विधि का उपयोग करके सहेजें क्रिया रद्द कर सकते हैं। preventDefault विधि निष्पादन प्रसंग का भाग है जो getEventArgs विधि का उपयोग करके पहुँच योग्य है। निष्पादन संदर्भ स्वचालित रूप से प्रपत्र ईवेंट हैंडलर को पास किया जाता है।
अतुल्यकालिक ईवेंट हैंडलर समर्थन
OnSave ईवेंट में इवेंट हैंडलर द्वारा सहेजने से पहले निपटाए जाने वाले वादों की प्रतीक्षा करने की क्षमता है, जिससे ईवेंट एसिंक्रोनस OnSave ("async") हो सकता है।
ईवेंट एसिंक OnSave हो जाता है जब ईवेंट हैंडलर एक वादा लौटाता है OnSave । रिकॉर्ड की बचत तब होती है जब हैंडलर द्वारा लौटाए गए प्रत्येक वादे का समाधान हो जाता है। लौटाए गए किसी भी वादे के लिए, प्रत्येक वादे के लिए 10 सेकंड की सीमा होती है, उसके बाद प्लेटफ़ॉर्म वादे को समय समाप्त करने पर विचार करता है। यह टाइमआउट वादे के अनुसार लागू किया जाता है। उदाहरण के लिए, यदि हमारे पास पांच वादे वापस किए गए हैं, तो कुल प्रतीक्षा समय 50 सेकंड है।
यदि वादा अस्वीकार कर दिया जाता है या समय समाप्त हो जाता है, तो सेव ऑपरेशन वर्तमान स्क्रिप्ट त्रुटियों के समान व्यवहार करना जारी रखता है। उस विशेष हैंडलर में ईवेंट तर्क ऑब्जेक्ट के भीतर preventDefault विधि का उपयोग करें यदि आप एक स्क्रिप्ट त्रुटि/अस्वीकृत वादा या हैंडलर टाइम आउट होने पर सेव ईवेंट को रोकना चाहते हैं।
आप हैंडलर में त्रुटि के बावजूद या ईवेंट तर्क ऑब्जेक्ट के भीतर preventDefault विधि का उपयोग नहीं किए बिना सहेजें कार्रवाई को रद्द कर सकते हैं। यदि इस विधि को कॉल किया जाता है, तो Async OnSave ईवेंट सभी वादों को व्यवस्थित करने के लिए प्रतीक्षा करता है, लेकिन सेव नहीं होगा। इस पद्धति को कॉल करने का अर्थ है कि भीतर का .then() तर्क और निष्पादित .catch() होगा।
OnSave घटना प्रति हैंडलर लौटाए गए एक वादे की प्रतीक्षा करती है। यदि कई वादों की आवश्यकता होती है, तो सभी वादों को विधि में Promise.all() लपेटने और एकल परिणामी वादे को वापस करने की अनुशंसा की जाती है। कई हैंडलर के लिए जो सभी एक वादा लौटाते हैं, हम आपको एक हैंडलर बनाने की सलाह देते हैं जो सभी घटनाओं को कॉल करता है और एक ही वादा लौटाता है जो सभी आवश्यक वादों को लपेटता है। यह अभ्यास टाइमआउट के कारण होने वाले प्रतीक्षा समय को कम करने के लिए है।
उदाहरण परिदृश्य पर async OnSave हैंडलर का उपयोग करने के लिए जब
एक कार्य ऑर्डर सेवा कार्य बनाने पर विचार करें, आपको यह सत्यापित करने की आवश्यकता है कि चयनित ग्राहक संपत्ति का कार्य ऑर्डर में सूचीबद्ध एक ही खाता है. कार्य ऑर्डर और ग्राहक संपत्ति पर खाता प्राप्त करना दोनों एसिंक्रोनस प्रक्रियाएं हैं और सत्यापन होने से पहले इसे पूरा करने की आवश्यकता होती है।
इस परिदृश्य में, चूंकि कई एसिंक प्रक्रियाएं हैं और दोनों कॉल विधि में दोनों Promise.all() को लपेटकर एक ही वादा लौटाते हैं।
नोट
विधि का preventDefault उपयोग केवल तुल्यकालिक रूप से किया जा सकता है।
उदाहरण के लिए:
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"));
});
}
ऐप सेटिंग का उपयोग करके Async OnSave सक्षम करें
async onSave हैंडलर का उपयोग करने के लिए, आपको इसे ऐप सेटिंग के माध्यम से सक्षम करना होगा:
https://make.powerapps.com पर जाएँ.
सुनिश्चित करें कि सही वातावरण का चयन करें।
बाएँ नेविगेशन फलक से, ऐप्स चयन करें.
ऐप का चयन करें और फिर ... ( दीर्घवृत्त) चुनें। संपादित करें चुनें।
आदेश पट्टी से सेटिंग्स का चयन करें.
जब संवाद खुलता है, तो सुविधाएँ चुनें.
सहेजें हैंडलर पर Async चालू करें।
सहेजें चुनें.
Async OnSave टाइमआउट
जब आप एक async OnSave हैंडलर का उपयोग करते हैं, प्रपत्र हैंडलर द्वारा दिए गए वादे को पूरा करने के लिए प्रतीक्षा करता है। यह सुनिश्चित करने के लिए कि प्रपत्र सहेजें समय पर पूर्ण होता है, हैंडलर 10 सेकंड के बाद एक टाइमआउट अपवाद फेंक देगा ताकि आपको बेहतर प्रदर्शन के लिए async OnSave हैंडलर को ट्यून करने के लिए पता चल सके।
ऐसे परिदृश्य हैं जहां हैंडलर को OnSave 10 सेकंड से अधिक समय तक रोकने की आवश्यकता होती है। एक उदाहरण एक संवाद खोलना और सहेजना जारी रखने से पहले उपयोगकर्ता के इनपुट की प्रतीक्षा करना है। सुनिश्चित करें कि async कार्रवाई हल करने के लिए वादे के लिए प्रतीक्षा कर रहा है, disableAsyncTimeout विधि का उपयोग करें।
नोट
आपको किसी भी प्रतीक्षा कथन या एसिंक कॉल से पहले कॉल करना disableAsyncTimeout होगा।
उदाहरण के लिए:
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 कहा जाता है, तो उस हैंडलर के लिए टाइमआउट लागू नहीं होता है। यह उस हैंडलर के वादे के पूरा होने का इंतजार करता रहता है।
इस पैटर्न का उपयोग सावधानी के साथ किया जाना चाहिए क्योंकि यह फॉर्म सेव के प्रदर्शन को प्रभावित कर सकता है।
संबंधित आलेख
ग्रिड ऑनसेव इवेंट
ईवेंट (क्लाइंट एपीआई संदर्भ)
मॉडल-चालित ऐप्स में प्रपत्रों और ग्रिड में ईवेंट