Miklix

Dynamics AX 2012 SysOperation Framework Vështrim i shpejtë

Publikuar: 15 shkurt 2025 në 10:37:30 e pasdites, UTC

Ky artikull ofron një përmbledhje të shpejtë (ose fletë mashtrimi) se si të zbatohen klasat e përpunimit dhe punët e grupeve në kornizën SysOperation në Dynamics AX 2012 dhe Dynamics 365 for Operations.


Kjo faqe u përkthye me makinë nga anglishtja për ta bërë të aksesueshme për sa më shumë njerëz. Fatkeqësisht, përkthimi me makinë nuk është ende një teknologji e përsosur, kështu që mund të ndodhin gabime. Nëse preferoni, mund ta shikoni versionin origjinal në anglisht këtu:

Dynamics AX 2012 SysOperation Framework Quick Overview

Informacioni në këtë postim bazohet në Dynamics AX 2012 R3. Mund të jetë ose jo e vlefshme për versionet e tjera. (Përditësim: Mund të konfirmoj që informacioni në këtë artikull është gjithashtu i vlefshëm për Dynamics 365 for Operations)


Ky postim është menduar vetëm si një përmbledhje e shpejtë dhe fletë mashtrimi. Nëse jeni i ri në kornizën SysOperation, ju sugjeroj fuqimisht që të lexoni edhe letrën e bardhë të Microsoft-it mbi këtë temë. Informacioni këtu mund të jetë i dobishëm nëse ju nevojitet thjesht një analizë e shpejtë e klasave të ndryshme të përfshira në zhvillimin e operacioneve me këtë kornizë.

Ka variacione, por kur përdor kornizën, zakonisht zbatoj tre klasa:

  • Kontrata e të dhënave (duhet të zgjasë SysOperationDataContractBase)
  • Shërbimi (duhet të zgjasë SysOperationServiceBase)
  • Kontrolluesi ( duhet të zgjasë SysOperationServiceController)

Për më tepër, unë mund të implementoj gjithashtu një klasë UIBuilder ( duhet të zgjasë SysOperationUIBuilder), por kjo është e nevojshme vetëm nëse dialogu për ndonjë arsye duhet të jetë më i avancuar sesa ajo që korniza gjeneron automatikisht.


Kontrata e të dhënave

Kontrata e të dhënave përmban anëtarët e të dhënave të nevojshme për funksionimin tuaj. Mund të krahasohet me makro tipike CurrentList të përcaktuar në kuadrin RunBase, por zbatohet si klasë në vend të kësaj. Kontrata e të dhënave duhet të zgjasë SysOperationDataContractBase, por do të funksionojë edhe nëse nuk e bën. Avantazhi i zgjerimit të klasës super është se ofron disa informacione të sesionit që mund të jenë të dobishëm.

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

Në këtë shembull, itemId është një anëtar i të dhënave. Ju duhet të zbatoni një metodë parm për çdo anëtar të të dhënave dhe ta etiketoni atë me DataMemberAttribute në mënyrë që korniza të dijë se çfarë është. Kjo mundëson që kuadri të ndërtojë automatikisht dialogun për ju.

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

    itemId = _itemId;
    return itemId;
}


Shërbimi

Klasa e shërbimit është klasa që përmban logjikën aktuale të biznesit. Nuk ka të bëjë me shfaqjen e dialogëve, përpunimin e grupeve ose ndonjë gjë të tillë - kjo është përgjegjësi e klasës së kontrolluesit. Duke e ndarë këtë, ka më shumë gjasa të dizajnoni mirë kodin tuaj dhe të bëni më shumë kod të ripërdorshëm.

Ashtu si klasa e kontratës së të dhënave, klasa e shërbimit nuk ka nevojë të trashëgojë nga ndonjë gjë në veçanti, por duhet të trashëgojë nga klasa SysOperationServiceBase, të paktën nëse prisni që shërbimi të ekzekutohet si një punë grupore, pasi klasa super ofron disa informacione rreth kontekstit të grupit. Metoda që fillon operacionin (dmth. drejton logjikën e biznesit) duhet të marrë si hyrje një objekt të klasës suaj të kontratës së të dhënave dhe duhet të zbukurohet me [SysEntryPointAttribute]. Për shembull:

class MyService extends SysOperationServiceBase
{
}

me një metodë të quajtur run:

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


Kontrolluesi

Klasa e kontrolluesit merret me ekzekutimin dhe përpunimin e grupit të operacionit tuaj. Siguron gjithashtu që kodi të ekzekutohet në CIL për performancë maksimale. Klasa e kontrolluesit zakonisht trashëgon nga klasa SysOperationServiceController, megjithëse ka edhe opsione të tjera.

class MyController extends SysOperationServiceController
{
}

Konstruktori i klasës super merr si parametra emrin e klasës, emrin e metodës dhe (opsionale) mënyrën e ekzekutimit. Emrat e klasave dhe metodave duhet të jenë emri i klasës suaj të shërbimit dhe metoda që duhet të ekzekutohet në të. Pra, mund të zbatoni metodën e konstruksionit të kontrolluesit tuaj si kjo:

public static MyController construct()
{
    ;

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

Atëherë metoda kryesore e klasës MyController mund të jetë aq e thjeshtë sa

public static void main(Args _args)
{
    ;

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

Dhe në thelb keni mbaruar. Sa më sipër është padyshim një shembull shumë i thjeshtë dhe korniza përmban një mori opsionesh dhe mundësish të tjera, por kjo shërben si një pasqyrë e shpejtë nëse keni nevojë për një furçë kur nuk e keni përdorur kornizën për një kohë.

Shpërndaje në BlueskyShpërndaje në FacebookNdani në LinkedInShpërndaje në TumblrShpërndaje në XNdani në LinkedInPin në Pinterest

Mikkel Bang Christensen

Rreth Autorit

Mikkel Bang Christensen
Mikkel është krijuesi dhe pronari i miklix.com. Ai ka mbi 20 vjet përvojë si programues profesional kompjuteri/zhvillues softuerësh dhe aktualisht është i punësuar me kohë të plotë për një korporatë të madhe evropiane IT. Kur nuk bën blog, ai e kalon kohën e lirë në një gamë të gjerë interesash, hobish dhe aktivitetesh, të cilat mund të reflektohen në një farë mase në shumëllojshmërinë e temave të mbuluara në këtë faqe interneti.