Miklix

بررسی سریع Dynamics AX 2012 SysOperation Framework

منتشر شده: ۱۵ فوریهٔ ۲۰۲۵ ساعت ۲۲:۳۶:۳۴ (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 به ارث ببرد، حداقل اگر انتظار دارید که سرویس به عنوان یک job دسته ای اجرا شود، زیرا کلاس فوق العاده اطلاعاتی در مورد زمینه دسته ای ارائه می دهد. روشی که عملیات را شروع می کند (یعنی منطق کسب و کار را اجرا می کند) باید یک شی از کلاس قرارداد داده شما را به عنوان ورودی بگیرد و باید با [SysEntryPointAttribute] تزئین شود. مثلا:

class MyService extends SysOperationServiceBase
{
}

با روشی به نام run:

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


کنترل

کلاس کنترلر اجرا و پردازش دسته ای عملیات شما را انجام می دهد. همچنین اطمینان حاصل می کند که کد در CIL برای حداکثر عملکرد اجرا می شود. کلاس کنترلر معمولا از کلاس SysOperationServiceController به ارث می رسد، اگرچه گزینه های دیگری نیز وجود دارد.

class MyController extends SysOperationServiceController
{
}

سازنده سوپر کلاس نام کلاس، نام متد و (به صورت اختیاری) حالت اجرا را به عنوان پارامتر در نظر می گیرد. نام کلاس ها و متدها باید نام کلاس سرویس شما و روشی باشد که باید روی آن اجرا شود. بنابراین، ممکن است روش construct کنترلر خود را به این صورت پیاده سازی کنید:

public static MyController construct()
{
    ;

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

سپس روش اصلی کلاس MyController می تواند به سادگی باشد

public static void main(Args _args)
{
    ;

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

و شما اساسا تمام شده اید. بدیهی است که موارد بالا یک مثال بسیار ساده است و چارچوب شامل انبوهی از گزینه ها و امکانات دیگر است، اما اگر زمانی که مدتی از چارچوب استفاده نکرده اید، نیاز به قلم مو دارید، این به عنوان یک نمای کلی سریع عمل می کند.

در Bluesky به اشتراک بگذاریددر فیسبوک به اشتراک بگذاریددر لینکدین به اشتراک بگذاریددر Tumblr به اشتراک بگذاریددر X به اشتراک بگذاریددر لینکدین به اشتراک بگذاریدپین در پینترست

میکل بنگ کریستنسن

درباره نویسنده

میکل بنگ کریستنسن
مایکل خالق و صاحب miklix.com است. او بیش از 20 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.