Miklix

Dynamics AX 2012 SysOperation Framework Vështrim i shpejtë

Publikuar: 15 shkurt 2025 në 10:37:30 e pasdites, UTC
Përditësimi i fundit: 12 janar 2026 në 8:40:07 e paradites, UTC

Ky artikull ofron një përmbledhje të shpejtë (ose një fletë këshillash) se si të implementohen klasat e përpunimit dhe punët në grup në kuadrin 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 i vlefshëm për versione të tjera. (Përditësim: Mund të konfirmoj që informacioni në këtë artikull është i vlefshëm edhe për Dynamics 365 for Operations)


Ky postim është menduar vetëm si një përmbledhje e shpejtë dhe një udhëzues. Nëse jeni të rinj në kuadrin SysOperation, ju sugjeroj fuqimisht që të lexoni edhe dokumentin e Microsoft-it mbi këtë temë. Informacioni këtu mund të jetë i dobishëm nëse keni nevojë vetëm për një përditësim të shpejtë të klasave të ndryshme të përfshira në zhvillimin e operacioneve me këtë kuadr.

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ë zgjerojë SysOperationServiceBase)
  • Kontrolluesi (duhet të zgjerohet SysOperationServiceController)

Përveç kësaj, mund të implementoj edhe një klasë UIBuilder (duhet të zgjerojë SysOperationUIBuilder), por kjo është e nevojshme vetëm nëse dialogu për ndonjë arsye duhet të jetë më i avancuar se ai që gjeneron automatikisht framework-u.


Kontrata e të dhënave

Kontrata e të dhënave përmban anëtarët e të dhënave të nevojshëm për operacionin tuaj. Mund të krahasohet me makron tipike CurrentList të përcaktuar në kornizën RunBase, por mund të zbatohet si një klasë. Kontrata e të dhënave duhet të zgjerojë SysOperationDataContractBase, por do të funksionojë edhe nëse nuk e bën. Avantazhi i zgjerimit të superklasës është se ofron disa informacione për sesionin që mund të jenë të dobishme.

[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 secilin anëtar të të dhënave dhe ta etiketoni atë me DataMemberAttribute në mënyrë që framework-u ta dijë se çfarë është. Kjo i mundëson framework-ut të ndërtojë automatikisht dialogun për ju.

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

    itemId = _itemId;
    return itemId;
}


Shërbim

Klasa e shërbimit është klasa që përmban logjikën aktuale të biznesit. Nuk merret me shfaqjen e dialogëve, përpunimin në grup ose diçka të tillë - kjo është përgjegjësi e klasës së kontrolluesit. Duke e ndarë këtë, ka më shumë të ngjarë që ta dizajnoni mirë kodin tuaj dhe të krijoni kod më 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 asgjë 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ë batch, pasi superklasa ofron disa informacione rreth kontekstit të batch. Metoda që fillon operacionin (domethënë ekzekuton logjikën e biznesit) duhet të marrë një objekt të klasës suaj të kontratës së të dhënave si input dhe duhet të dekorohet 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 kontrolluese merret me ekzekutimin dhe përpunimin në grup të operacionit tuaj. Gjithashtu sigurohet që kodi të ekzekutohet në CIL për performancë maksimale. Klasa kontrolluese zakonisht trashëgon nga klasa SysOperationServiceController, megjithëse ka edhe opsione të tjera.

class MyController extends SysOperationServiceController
{
}

Konstruktori i superklasës merr si parametra emrin e klasës, emrin e metodës dhe (opsionalisht) mënyrën e ekzekutimit. Emrat e klasës dhe të metodës duhet të jenë emri i klasës suaj të shërbimit dhe metoda që duhet të ekzekutohet në të. Pra, mund ta implementoni metodën e ndërtimit 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 praktikisht mbaruat. 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ë përmbledhje e shpejtë nëse keni nevojë për një rifreskim kur nuk e keni përdorur kornizën për njëfarë kohe.

Lexime të mëtejshme

Nëse ju pëlqeu ky postim, mund t'ju pëlqejnë edhe këto sugjerime:


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

Mikkel Christensen

Rreth Autorit

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