Miklix

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

Nəşr olundu: 15 fevral 2025 at 22:40:53 UTC
Son yeniləmə: 12 yanvar 2026 at 08:40:25 UTC

Bu məqalədə Dynamics AX 2012 və Dynamics 365 for Operations-da SysOperation çərçivəsində emal siniflərinin və toplu işlərin necə tətbiq ediləcəyi barədə qısa məlumat (və ya fırıldaqçı vərəq) təqdim olunur.


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 ola bilər və ya olmaya bilər. (Yeniləmə: Bu məqalədəki məlumatın Dynamics 365 for Operations üçün də keçərli olduğunu təsdiqləyə bilərəm)


Bu yazı sadəcə qısa bir baxış və fırıldaqçı vərəqi kimi nəzərdə tutulub. Əgər SysOperation çərçivəsi ilə yeni tanışsınızsa, bu mövzuda Microsoft-un ağ sənədini də oxumağınızı tövsiyə edirəm. Bu çərçivə ilə əməliyyatların hazırlanmasında iştirak edən müxtəlif siniflər haqqında qısa bir məlumat almaq istəyirsinizsə, buradakı məlumatlar faydalı ola bilər.

Variasiyalar var, amma çərçivədən istifadə edərkən adətən üç sinif tətbiq edirə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əliyəm), lakin bu, yalnız nədənsə dialoq pəncərəsi çərçivənin avtomatik olaraq yaratdığından daha inkişaf etmiş 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 saxlayır. Bu, RunBase çərçivəsində müəyyən edilmiş tipik CurrentList makrosu ilə müqayisə edilə bilər, lakin bunun əvəzinə bir sinif kimi tətbiq olunur. Məlumat müqaviləsi SysOperationDataContractBase-i genişləndirməlidir, lakin işləməsə belə işləyəcək. Super sinifin genişləndirilməsinin üstünlüyü ondan ibarətdir ki, o, faydalı ola biləcək bəzi sessiya məlumatları təqdim edir.

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

Bu nümunədə itemId məlumat üzvüdür. Hər bir məlumat üzvü üçün parm metodu tətbiq etməli və onu DataMemberAttribute ilə etiketləməlisiniz ki, çərçivə onun nə olduğunu bilsin. Bu, çərçivənin sizin üçün avtomatik olaraq dialoq qurmasına 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. Dialoqları, toplu emalı və ya bu kimi şeyləri göstərməklə məşğul deyil - bu, nəzarətçi sinfinin məsuliyyətidir. Bunu ayırmaqla kodunuzu daha yaxşı dizayn etmə və daha çox təkrar istifadə edilə bilən kod yaratma ehtimalınız daha yüksəkdir.

Məlumat müqaviləsi sinfi kimi, xidmət sinfinin də konkret bir şeydən miras qalmasına ehtiyac yoxdur, lakin ən azı xidmətin toplu iş kimi işlədiləcəyini gözləsəniz, SysOperationServiceBase sinfindən miras qalmalıdır, çünki super sinif toplu kontekst haqqında bəzi məlumatlar verir. Əməliyyatı başladan (yəni biznes məntiqini işlədən) metod, məlumat müqaviləsi sinfinizin bir 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 metodla:

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


Nəzarətçi

Kontroller sinfi əməliyyatınızın icrasını və toplu emalını idarə edir. Maksimum performans üçün kodun CIL-də icra olunmasını da təmin edir. Kontroller sinfi adətən SysOperationServiceController sinfindən miras qalır, baxmayaraq ki, başqa seçimlər də mövcuddur.

class MyController extends SysOperationServiceController
{
}

Super sinifin konstruktoru parametrlər olaraq sinif adını, metod adını və (isteğe bağlı) icra rejimini götürür. Sinif və metod adları xidmət sinifinizin və üzərində işlədilməli olan metodun adı olmalıdır. Beləliklə, kontrollerinizin konstrukt metodunu aşağıdakı kimi tətbiq edə 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ə demək olar ki, hazırsınız. Yuxarıda göstərilənlər, əlbəttə ki, çox sadə bir nümunədir və çərçivədə bir çox digər seçim və imkanlar var, lakin bu, çərçivəni bir müddətdir istifadə etmədiyiniz zaman təkmilləşdirməyə ehtiyacınız varsa, qısa bir baxış kimi xidmət edir.

Əlavə Oxu

Bu yazı xoşunuza gəldisə, bu təklifləri də bəyənə bilərsiniz:


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

Mikkel Christensen

Müəllif haqqında

Mikkel 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.