Miklix

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

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

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

[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 אירופאי גדול. כשהוא לא כותב בלוג, הוא מבלה את זמנו הפנוי במגוון עצום של תחומי עניין, תחביבים ופעילויות, שעשויים לבוא לידי ביטוי במידה מסוימת במגוון הנושאים המכוסים באתר זה.