Miklix

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

نُشرت: ١٥ فبراير ٢٠٢٥ م في ١٠:٣٣:٠١ م UTC
آخر تحديث: ١٢ يناير ٢٠٢٦ م في ٨:٣٨:٤٣ ص 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();
}

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

قراءات إضافية

إذا أعجبك هذا المنشور، فقد تعجبك أيضًا هذه الاقتراحات:


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

ميكيل كريستنسن

عن المؤلف

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