סקירה מהירה של Dynamics AX 2012 SysOperation Framework
פורסם: 15 בפברואר 2025 בשעה 22:36:38 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 כדי שהמסגרת תדע מה זה. זה מאפשר למסגרת לבנות אוטומטית את הדו-שיח עבורך.
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();
}
ובעצם סיימת. האמור לעיל הוא ללא ספק דוגמה פשוטה מאוד והמסגרת מכילה שפע של אפשרויות ואפשרויות אחרות, אבל זה משמש סקירה מהירה אם אתה צריך צחצוח כאשר לא השתמשת בפריים זמן מה.