Miklix

סקירה מהירה של 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, אך יעבוד גם אם לא. היתרון של הרחבת מחלקת העל הוא שהיא מספקת מידע על הפעלה שעשוי להיות שימושי.

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

בדוגמה זו, itemId הוא איבר נתונים. עליך ליישם מתודת parm עבור כל איבר נתונים ולתייג אותו עם ה-DataMemberAttribute כדי שה-framework ידע מהו. זה מאפשר ל-framework לבנות אוטומטית את תיבת הדו-שיח עבורך.

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


שֵׁרוּת

מחלקת השירות היא המחלקה שמכילה את הלוגיקה העסקית בפועל. היא אינה עוסקת בהצגת דיאלוגים, עיבוד אצווה או כל דבר אחר - זוהי האחריות של מחלקת הבקר. על ידי הפרדה זו, סביר יותר שתעצבו את הקוד שלכם היטב ותיצרו קוד רב פעמי.

כמו מחלקת חוזה הנתונים, מחלקת השירות אינה צריכה לרשת משהו מסוים, אך היא צריכה לרשת את מחלקת SysOperationServiceBase, לפחות אם אתם מצפים שהשירות יבוצע כמשימת אצווה, מכיוון שמחלקת העל מספקת מידע מסוים על הקשר האצווה. המתודה שמתחילה את הפעולה (כלומר מפעילה את הלוגיקה העסקית) חייבת לקבל אובייקט ממחלקת חוזה הנתונים כקלט וצריכה להיות מעוטרת ב-[SysEntryPointAttribute]. לדוגמה:

class MyService extends SysOperationServiceBase
{
}

עם שיטה שנקראת run:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


בַּקָר

מחלקת הבקר מטפלת בביצוע ובעיבוד האצווה של הפעולה שלך. היא גם מוודאת שהקוד מבוצע ב-CIL לקבלת ביצועים מקסימליים. מחלקת הבקר בדרך כלל יורשת את מחלקת SysOperationServiceController, אם כי ישנן גם אפשרויות נוספות.

class MyController extends SysOperationServiceController
{
}

בנאי המחלקה העל מקבל שם מחלקה, שם מתודה ו(אופציונלי) מצב ביצוע כפרמטרים. שמות המחלקה והמתודה צריכים להיות שם מחלקת השירות שלך והמתודה שאמורה להיות מופעלת עליה. לכן, תוכל לממש את מתודת הבנייה של הבקר שלך כך:

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

אז המתודה הראשית של המחלקה MyController יכולה להיות פשוטה כמו

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

ואתם בעצם סיימתם. האמור לעיל הוא כמובן דוגמה פשוטה מאוד והמסגרת מכילה שפע של אפשרויות ואפשרויות נוספות, אך זוהי סקירה כללית מהירה אם אתם זקוקים לרענון לאחר שלא השתמשתם במסגרת זמן מה.

קריאה נוספת

אם נהניתם מהפוסט הזה, אולי תאהבו גם את ההצעות הבאות:


שתפו בבלוסקישתפו בפייסבוקשתפו בלינקדאיןשתפו ב-Tumblrשתפו ב-Xשתפו בלינקדאיןהצמד בפינטרסט

מיקל כריסטנסן

על המחבר

מיקל כריסטנסן
מיקל הוא היוצר והבעלים של miklix.com. יש לו למעלה מ-20 שנות ניסיון כמתכנת מחשבים/מפתח תוכנה מקצועי וכיום הוא מועסק במשרה מלאה בתאגיד IT אירופאי גדול. כשהוא לא כותב בלוג, הוא מבלה את זמנו הפנוי במגוון עצום של תחומי עניין, תחביבים ופעילויות, שעשויים לבוא לידי ביטוי במידה מסוימת במגוון הנושאים המכוסים באתר זה.