Miklix

Dynamics AX 2012 SysOperation Framework Sürətli Baxış

Nəşr olundu: 15 fevral 2025 at 22:40:53 UTC

Bu məqalə Dynamics AX 2012 və Dynamics 365 for Operations-da SysOperation çərçivəsində emal siniflərinin və toplu işlərin necə həyata keçirilməsinə dair qısa icmal (və ya fırıldaqçı vərəq) təqdim edir.


Bu səhifə mümkün qədər çox insan üçün əlçatan olması üçün ingilis dilindən maşın tərcümə edilib. Təəssüf ki, maşın tərcüməsi hələ mükəmməl texnologiya deyil, ona görə də səhvlər baş verə bilər. İstəyirsinizsə, orijinal ingilis versiyasına buradan baxa bilərsiniz:

Dynamics AX 2012 SysOperation Framework Quick Overview

Bu yazıdakı məlumat Dynamics AX 2012 R3-ə əsaslanır. Digər versiyalar üçün keçərli və ya olmaya bilər. (Yeniləmə: Bu məqalədəki məlumatın Dynamics 365 for Operations üçün də etibarlı olduğunu təsdiq edə bilərəm)


Bu yazı sadəcə qısa icmal və fırıldaq vərəqi kimi nəzərdə tutulub. Əgər siz SysOperation çərçivəsi ilə tanışsınızsa, mən sizə Microsoft-un mövzu ilə bağlı ağ kağızını da oxumağı məsləhət görürəm. Buradakı məlumat bu çərçivə ilə əməliyyatların hazırlanmasında iştirak edən müxtəlif siniflər haqqında tez bir zamanda təzələməyə ehtiyacınız olduqda faydalı ola bilər.

Varyasyonlar var, lakin mən çərçivədən istifadə edərkən adətən üç sinif həyata keçirirəm:

  • Məlumat müqaviləsi (SysOperationDataContractBase-i genişləndirməlidir)
  • Xidmət (SysOperationServiceBase-i genişləndirməlidir)
  • Nəzarətçi (SysOperationServiceController-i genişləndirməlidir )

Bundan əlavə, mən UIBuilder sinfini də tətbiq edə bilərəm (SysOperationUIBuilder-i genişləndirməlidir ), lakin bu, yalnız dialoq nədənsə çərçivənin avtomatik yaratdığından daha təkmil olmalıdırsa lazımdır.


Məlumat müqaviləsi

Məlumat müqaviləsi əməliyyatınız üçün lazım olan məlumat üzvlərini özündə saxlayır. O, RunBase çərçivəsində müəyyən edilmiş tipik CurrentList makrosu ilə müqayisə oluna bilər, lakin əvəzinə sinif kimi həyata keçirilir. Məlumat müqaviləsi SysOperationDataContractBase-i genişləndirməlidir, lakin olmasa belə işləyəcək. Super sinfi genişləndirməyin üstünlüyü ondan ibarətdir ki, o, lazımlı ola biləcək bəzi sessiya məlumatlarını təqdim edir.

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

Bu nümunədə itemId məlumat üzvüdür. Siz hər bir məlumat üzvü üçün parm metodu tətbiq etməli və onu DataMemberAttribute ilə işarələməlisiniz ki, çərçivə bunun nə olduğunu bilsin. Bu, çərçivəyə avtomatik olaraq sizin üçün dialoq qurmağa imkan verir.

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


Xidmət

Xidmət sinfi faktiki biznes məntiqini ehtiva edən sinifdir. Bu, dialoqların göstərilməsi, toplu emal və ya hər hansı bir şeylə əlaqəli deyil - bu, nəzarətçi sinfinin məsuliyyətidir. Bunu ayırmaqla, kodunuzu yaxşı dizayn etmək və daha çox təkrar istifadə edilə bilən kod yaratmaq ehtimalı daha yüksəkdir.

Məlumat müqaviləsi sinfi kimi, xidmət sinfinin də xüsusi olaraq heç nədən miras almasına ehtiyac yoxdur, lakin o, SysOperationServiceBase sinfindən miras almalıdır, heç olmasa xidmətin toplu iş kimi işlədiləcəyini gözləyirsinizsə, çünki super sinif toplu kontekst haqqında bəzi məlumat verir. Əməliyyatı başlatan metod (yəni biznes məntiqini işlədir) məlumat müqaviləsi sinifinizin obyektini giriş kimi qəbul etməli və [SysEntryPointAttribute] ilə bəzədilməlidir. Məsələn:

class MyService extends SysOperationServiceBase
{
}

run adlı bir üsulla:

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


Nəzarətçi

Nəzarətçi sinfi əməliyyatınızın icrasını və toplu işlənməsini idarə edir. O, həmçinin kodun maksimum performans üçün CIL-də icra olunmasını təmin edir. Nəzarətçi sinfi adətən SysOperationServiceController sinfindən miras qalır, baxmayaraq ki, başqa variantlar da var.

class MyController extends SysOperationServiceController
{
}

Super sinfin konstruktoru parametr kimi sinif adını, metod adını və (istəyə görə) icra rejimini götürür. Sinif və metod adları xidmət sinifinizin adı və onun üzərində işlənməli olan metod olmalıdır. Beləliklə, siz nəzarətçinizin konstruksiya metodunu belə həyata keçirə bilərsiniz:

public static MyController construct()
{
    ;

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

Onda MyController sinfinin əsas metodu qədər sadə ola bilər

public static void main(Args _args)
{
    ;

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

Və siz əsasən bitirdiniz. Yuxarıdakılar çox sadə bir nümunədir və çərçivədə çoxlu başqa seçimlər və imkanlar var, lakin bu, çərçivədən bir müddət istifadə etmədiyiniz zaman bir yeniləməyə ehtiyacınız varsa, qısa icmal kimi xidmət edir.

Bluesky-də paylaşınFacebookda paylaşLinkedIn-də paylaşınTumblr-da paylaşınX-də paylaşınLinkedIn-də paylaşınPinterest-də Pin

Mikkel Bang Christensen

Müəllif haqqında

Mikkel Bang Christensen
Mikkel miklix.com saytının yaradıcısı və sahibidir. O, peşəkar kompüter proqramçısı/proqram təminatı tərtibatçısı kimi 20 ildən artıq təcrübəyə malikdir və hazırda böyük Avropa İT korporasiyasında tam iş günü işləyir. Bloq yazmayanda o, boş vaxtını geniş çeşidli maraqlara, hobbilərə və fəaliyyətlərə sərf edir ki, bu da müəyyən dərəcədə bu veb-saytda əhatə olunan müxtəlif mövzularda əks oluna bilər.