הערה
גישה לעמוד זה דורשת אישור. אתה יכול לנסות להיכנס או לשנות תיקיות.
גישה לעמוד זה דורשת אישור. אתה יכול לנסות לשנות מדריכים.
האירוע OnSave מתרחש כאשר:
- המשתמש בוחר בלחצן שמוראו רענן בסרגל הפקודות, גם כאשר אין נתונים שהשתנו לשמירה.
- קוד מבצע את פעולת השירות formContext.data.entity.save , גם כאשר אין נתונים שהשתנו לשמירה.
- המשתמש מנווט אל מחוץ לטופס וקיימים נתונים שלא נשמרו בטופס.
- האפשרות 'שמירה אוטומטית' זמינה, 30 שניות לאחר שינוי הנתונים וקיימים נתונים שלא נשמרו בטופס.
- הקוד מבצע את פעולת השירות formContext.data.save ויש בטופס נתונים שלא נשמרו.
- קוד מבצע את פעולת השירות formContext.data.refresh ומעביר ערך True כנפרמטר הראשון, ויש בטופס נתונים שלא נשמרו.
הערה
האירוע OnSave עבור רשומות פעילות, Book פעילות חוזרת או פעילות שירות יבטל את פעולת השמירה וישתמש בהודעה כדי להמשיך את השינוי במקום Create ב- Update. עקב כך, מטפלים OnSavePostSave באירועים עבור טבלאות אלה לא יפעלו.
כדי לקבוע איזה לחצן נלחץ כדי לבצע את השמירה, השתמש בפעולת השירות getSaveMode .
באפשרותך לבטל את פעולת השמירה באמצעות פעולת השירות preventDefault באובייקט הארגומנטים של האירוע. פעולת השירות preventDefault נגישה באמצעות פעולת השירות getEventArgs מהווה חלק מהקשר הביצוע. הקשר ביצוע מועבר באופן אוטומטי למטפל באירועי הטופס.
תמיכה במטפל באירועים אסינכרוני
האירוע OnSave יכול להמתין להבטחה שהוחזרו על-ידי מטפלים באירועים כדי ליישב לפני השמירה, OnSave דבר המאפשר לאירוע להיות אסינכרוני ("אסינכרוני").
האירוע OnSave הופך לאסינכרוני כאשר המטפל OnSave באירועים מחזיר הבטחה. שמירת הרשומה מתרחשת כאשר כל הבטחה שהוחזרה על-ידי מטפל נפתרת. עבור כל הבטחה שהוחזרו, יש מגבלה של 10 שניות עבור כל הבטחה, לאחר מכן הפלטפורמה מחשיבה הבטחה שתם הזמן קצוב. זמן קצוב זה מוחל על פי הבטחה. לדוגמה, אם הוחזרו חמש הבטחות, זמן ההמתנה הכולל הוא 50 שניות.
אם ההבטחה נדחתה או תם הזמן הקצוב, פעולת השמירה תמשיך לפעול בדומה לשגיאות ה- Script הנוכחיות. השתמש בפעולת השירות preventDefault באובייקט הארגומנטים של האירוע במטפל מסוים זה אם ברצונך למנוע מאירוע השמירה להתרחש אם מתרחשת שגיאת Script/הבטחה שנדחתה או אם תם הזמן המושעה למטפל.
באפשרותך גם לבטל את פעולת השמירה ללא קשר לשגיאה במטפל או לא להשתמש בפעולת השירות preventDefault באובייקט הארגומנטים של האירוע. אם מתבצעת קריאה לשיטה זו, האירוע OnSave אסינכרוני ממתין להסדרת כל ההבטחה, אך השמירה לא תתרחש. קריאה לפעולת שירות זו פירושה שהלוגיקה בתוך .then() & .catch() תתבצע.
האירוע OnSave ממתין להבטחה אחת המוחזרת לכל מטפל. אם נדרשות הבטחות מרובות, Promise.all() מומלץ לעטוף את כל ההבטחה בשיטה ולהחזיר את ההבטחה המתבצעת. עבור מטפלים מרובים שמחחזרים הבטחה, מומלץ ליצור מטפל אחד שמטפל בכל האירועים ולהחזיר הבטחה אחת שכוללת את כל ההבטחה הנדרשת. תרגול זה הוא למזער את זמני ההמתנה הנגרם על-ידי הזמן הקצוב.
תרחיש לדוגמה לגבי הזמן שבו יש להשתמש במטפלים אסינכרונים ב- 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"));
});
}
הפוך את 'שמירה אסינכרונית' לזמינה באמצעות הגדרת אפליקציה
כדי להשתמש במטפלים אסינכרונים בשמירה, עליך להפוך אותה לזמינה באמצעות הגדרת אפליקציה:
עבור אל https://make.powerapps.com.
הקפד לבחור את הסביבה הנכונה.
בחר יישומים מחלונית הניווט השמאלית.
בחר את האפליקציה ולאחר מכן בחר ... (שלוש הנקודות). בחר Edit.
בחר הגדרות מסרגל הפקודות.
כאשר תיבת הדו-שיח נפתחת, בחר תכונות.
הפעל את אסינכרון במטפל בשמירה.
בחר שמור.
זמן קצוב לשמירה אסינכרונית
בעת שימוש במטפל אסינכרוני OnSave , הטופס ממתין למימוש ההבטחה שהוחזרה על-ידי המטפל. כדי להבטיח שהשמירה בטופס תושלם בזמן, המטפל יזרוק חריגת זמן קצוב לאחר 10 OnSave שניות כדי לעדכן אותך לכוונן את המטפל האסינכרוני לקבלת ביצועים טובים יותר.
קיימים תרחישים שבהם נדרשת OnSave השהיית המטפל למשך יותר מ- 10 שניות. דוגמה לפתיחת תיבת דו-שיח והמתנה לקלט של המשתמש לפני שתמשיך בשמירה. כדי לוודא שהפעולה האסינכרונית תמתין עד שההבטחה תיפתר, השתמש בפעולת השירות 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 , הזמן הקצוב עבור מטפל זה אינו מוחל. היא ממשיכה להמתין שההבטחה של המטפל הזה תתממש.
יש להשתמש בתבנית זו בזהירות מכיוון שהיא עשויה להשפיע על ביצועי שמירת הטופס.
מאמרים קשורים
אירוע רשת בשמירה
אירועים (חומר עזר עבור API של לקוח)
אירועים בטפסים ורשתות ביישומים מונחי-דגמים