نظرة عامة سريعة على إطار عمل 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، ولكنه سيعمل حتى لو لم يكن كذلك. تتمثل ميزة تمديد الفئة العليا في أنها توفر بعض معلومات الجلسة التي قد تكون مفيدة.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
في هذا المثال، يعد itemId عضو بيانات. تحتاج إلى تنفيذ طريقة parm لكل عضو بيانات ووضع علامة عليه باستخدام DataMemberAttribute حتى يعرف الإطار ماهيته. يتيح هذا للإطار إنشاء الحوار تلقائيًا لك.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
خدمة
فئة الخدمة هي الفئة التي تحتوي على منطق العمل الفعلي. وهي لا تهتم بإظهار الحوارات أو المعالجة الدفعية أو أي شيء من هذا القبيل - فهذه مسؤولية فئة وحدة التحكم. ومن خلال فصل هذا، من المرجح أن تقوم بتصميم الكود الخاص بك بشكل جيد وإنشاء كود قابل لإعادة الاستخدام بشكل أكبر.
مثل فئة عقد البيانات، لا تحتاج فئة الخدمة إلى الوراثة من أي شيء بعينه، ولكن يجب أن ترث من فئة SysOperationServiceBase، على الأقل إذا كنت تتوقع أن يتم تشغيل الخدمة كوظيفة دفعة، حيث توفر الفئة العليا بعض المعلومات حول سياق الدفعة. يجب أن تأخذ الطريقة التي تبدأ العملية (أي تشغيل منطق العمل) كائنًا من فئة عقد البيانات الخاصة بك كمدخل ويجب تزيينها بـ [SysEntryPointAttribute]. على سبيل المثال:
{
}
باستخدام طريقة تسمى التشغيل:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
وحدة التحكم
تتولى فئة وحدة التحكم تنفيذ عملية التشغيل ومعالجتها بشكل دفعي. كما تتأكد من تنفيذ التعليمات البرمجية في CIL لتحقيق أقصى أداء. ترث فئة وحدة التحكم عادةً من فئة SysOperationServiceController، على الرغم من وجود خيارات أخرى أيضًا.
{
}
يأخذ منشئ الفئة العليا اسم الفئة واسم الطريقة ووضع التنفيذ (اختياريًا) كمعلمات. يجب أن يكون اسم الفئة والطريقة هو اسم فئة الخدمة والطريقة التي يجب تشغيلها عليها. لذا، يمكنك تنفيذ طريقة إنشاء وحدة التحكم الخاصة بك على النحو التالي:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
ومن ثم يمكن أن تكون الطريقة الرئيسية لفئة MyController بسيطة مثل
{
;
MyController::construct().startOperation();
}
لقد انتهيت تقريبًا. من الواضح أن المثال أعلاه بسيط للغاية ويحتوي الإطار على مجموعة كبيرة من الخيارات والإمكانيات الأخرى، ولكن هذا بمثابة نظرة عامة سريعة إذا كنت بحاجة إلى مراجعة ما تعلمته عندما لم تستخدم الإطار لفترة من الوقت.