Miklix

نظرة عامة سريعة على إطار عمل Dynamics AX 2012 SysOperation

نُشرت: ١٥ فبراير ٢٠٢٥ م في ١٠:٣٣:٠١ م 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، فأنصحك بشدة بقراءة الورقة البيضاء التي أصدرتها Microsoft حول هذا الموضوع أيضًا. قد تكون المعلومات الواردة هنا مفيدة إذا كنت بحاجة فقط إلى مراجعة سريعة للفئات المختلفة المشاركة في تطوير العمليات باستخدام هذا الإطار.

هناك اختلافات، ولكن عندما أستخدم الإطار، أقوم عادةً بتنفيذ ثلاث فئات:

  • عقد البيانات (يجب أن يمتد إلى 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
{
}

باستخدام طريقة تسمى التشغيل:

[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();
}

لقد انتهيت تقريبًا. من الواضح أن المثال أعلاه بسيط للغاية ويحتوي الإطار على مجموعة كبيرة من الخيارات والإمكانيات الأخرى، ولكن هذا بمثابة نظرة عامة سريعة إذا كنت بحاجة إلى مراجعة ما تعلمته عندما لم تستخدم الإطار لفترة من الوقت.

شارك على بلوسكايشارك على الفيسبوكشارك على لينكدإنشارك على تمبلرشارك على إكسشارك على لينكدإنثبت على بينتريست

ميكيل بانج كريستنسن

عن المؤلف

ميكيل بانج كريستنسن
ميكيل هو مؤسس ومالك موقع miklix.com. يتمتع بخبرة تزيد عن 20 عامًا كمبرمج كمبيوتر/مطور برامج محترف ويعمل حاليًا بدوام كامل في إحدى شركات تكنولوجيا المعلومات الأوروبية الكبرى. عندما لا يقوم بالتدوين، يقضي وقت فراغه في مجموعة واسعة من الاهتمامات والهوايات والأنشطة، والتي قد تنعكس إلى حد ما في تنوع الموضوعات التي يغطيها هذا الموقع.