סקירה מהירה של Dynamics AX 2012 SysOperation Framework
פורסם: 15 בפברואר 2025 בשעה 22:36:38 UTC
עודכן לאחרונה: 12 בינואר 2026 בשעה 8:39:52 UTC
מאמר זה מספק סקירה מהירה (או דף מידע) על אופן הטמעת מחלקות עיבוד ומשימות אצווה במסגרת SysOperation ב-Dynamics AX 2012 וב-Dynamics 365 for Operations.
Dynamics AX 2012 SysOperation Framework Quick Overview
המידע בפוסט זה מבוסס על Dynamics AX 2012 R3. ייתכן שהוא תקף או לא תקף עבור גרסאות אחרות. (עדכון: אני יכול לאשר שהמידע במאמר זה תקף גם עבור Dynamics 365 for Operations)
פוסט זה נועד לשמש כסקירה כללית מהירה ודף מידע. אם אתם חדשים במסגרת SysOperation, אני ממליץ בחום לקרוא גם את המסמך הלבן של מיקרוסופט בנושא. המידע כאן עשוי להיות שימושי אם אתם זקוקים לרענון מהיר על המחלקות השונות המעורבות בפיתוח פעולות עם מסגרת זו.
ישנן וריאציות, אבל כשאני משתמש במסגרת אני בדרך כלל מיישם שלוש מחלקות:
- חוזה נתונים (צריך להאריך את SysOperationDataContractBase)
- שירות (צריך להרחיב את SysOperationServiceBase)
- בקר (חייב להרחיב את SysOperationServiceController)
בנוסף, אני יכול גם לממש מחלקה של UIBuilder (חייב להרחיב את SysOperationUIBuilder), אבל זה הכרחי רק אם מסיבה כלשהי הדיאלוג צריך להיות מתקדם יותר ממה שהפרייוורק מייצר באופן אוטומטי.
חוזה נתונים
חוזה הנתונים מכיל את איברי הנתונים הדרושים לפעולה שלך. ניתן להשוות אותו למאקרו CurrentList הטיפוסי המוגדר במסגרת RunBase, אך מיושם כמחלקה במקום זאת. חוזה הנתונים אמור להרחיב את SysOperationDataContractBase, אך יעבוד גם אם לא. היתרון של הרחבת מחלקת העל הוא שהיא מספקת מידע על הפעלה שעשוי להיות שימושי.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
בדוגמה זו, itemId הוא איבר נתונים. עליך ליישם מתודת parm עבור כל איבר נתונים ולתייג אותו עם ה-DataMemberAttribute כדי שה-framework ידע מהו. זה מאפשר ל-framework לבנות אוטומטית את תיבת הדו-שיח עבורך.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
שֵׁרוּת
מחלקת השירות היא המחלקה שמכילה את הלוגיקה העסקית בפועל. היא אינה עוסקת בהצגת דיאלוגים, עיבוד אצווה או כל דבר אחר - זוהי האחריות של מחלקת הבקר. על ידי הפרדה זו, סביר יותר שתעצבו את הקוד שלכם היטב ותיצרו קוד רב פעמי.
כמו מחלקת חוזה הנתונים, מחלקת השירות אינה צריכה לרשת משהו מסוים, אך היא צריכה לרשת את מחלקת SysOperationServiceBase, לפחות אם אתם מצפים שהשירות יבוצע כמשימת אצווה, מכיוון שמחלקת העל מספקת מידע מסוים על הקשר האצווה. המתודה שמתחילה את הפעולה (כלומר מפעילה את הלוגיקה העסקית) חייבת לקבל אובייקט ממחלקת חוזה הנתונים כקלט וצריכה להיות מעוטרת ב-[SysEntryPointAttribute]. לדוגמה:
{
}
עם שיטה שנקראת run:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
בַּקָר
מחלקת הבקר מטפלת בביצוע ובעיבוד האצווה של הפעולה שלך. היא גם מוודאת שהקוד מבוצע ב-CIL לקבלת ביצועים מקסימליים. מחלקת הבקר בדרך כלל יורשת את מחלקת SysOperationServiceController, אם כי ישנן גם אפשרויות נוספות.
{
}
בנאי המחלקה העל מקבל שם מחלקה, שם מתודה ו(אופציונלי) מצב ביצוע כפרמטרים. שמות המחלקה והמתודה צריכים להיות שם מחלקת השירות שלך והמתודה שאמורה להיות מופעלת עליה. לכן, תוכל לממש את מתודת הבנייה של הבקר שלך כך:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
אז המתודה הראשית של המחלקה MyController יכולה להיות פשוטה כמו
{
;
MyController::construct().startOperation();
}
ואתם בעצם סיימתם. האמור לעיל הוא כמובן דוגמה פשוטה מאוד והמסגרת מכילה שפע של אפשרויות ואפשרויות נוספות, אך זוהי סקירה כללית מהירה אם אתם זקוקים לרענון לאחר שלא השתמשתם במסגרת זמן מה.
קריאה נוספת
אם נהניתם מהפוסט הזה, אולי תאהבו גם את ההצעות הבאות:
- עיצוב מחרוזות עם מאקרו ו-strFmt ב- Dynamics AX 2012
- זיהוי מחלקת מסמכים ושאילתה עבור שירות AIF ב- Dynamics AX 2012
- כיצד לחזור על האלמנטים של Enum מקוד X++ ב- Dynamics AX 2012
