Miklix

Dynamics AX 2012 SysOperation Framework Brzi pregled

Objavio: 19. mart 2025. 21:30:59 UTC

Ovaj članak pruža brzi pregled (ili varalicu) o tome kako implementirati klase obrade i serijske poslove u okviru SisOperation u Dinamics AKS KSNUMKS i Dinamics KSNUMKS for Operations.


Ova stranica je mašinski prevedena sa engleskog jezika kako bi bila dostupna što većem broju ljudi. Nažalost, mašinsko prevođenje još uvek nije usavršena tehnologija, tako da može doći do grešaka. Ako želite, možete pogledati originalnu englesku verziju ovde:

Dynamics AX 2012 SysOperation Framework Quick Overview

Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Moguće je da nisu validne za druge verzije. (Ažuriranje: mogu potvrditi da su informacije u ovom članku takođe validne za Dynamics 365 for Operations)


Ovaj post je samo brz pregled i cheat sheet. Ako ste novi u SysOperation okviru, toplo vam savetujem da pročitate Microsoftov beli papir na ovu temu. Informacije ovde mogu biti korisne ako vam je samo potrebno brzo osvežavanje u vezi sa različitim klasama uključenim u razvoj operacija sa ovim okvirom.

Postoje varijacije, ali kada koristim okvir, obično implementiram tri klase:

  • Data contract (treba da proširi SysOperationDataContractBase)
  • Servis (treba da proširi SysOperationServiceBase)
  • Kontroler (mora da proširi SysOperationServiceController)

Osim toga, možda ću implementirati i UIBuilder klasu (mora da proširi SysOperationUIBuilder), ali to je samo potrebno ako dijalog iz nekog razloga mora biti složeniji od onoga što okvir automatski generiše.


Data contract

Data contract sadrži članove podataka koji su potrebni za vašu operaciju. Može se uporediti sa tipičnim CurrentList makroom koji je definisan u RunBase okviru, ali implementiranim kao klasa. Data contract treba da proširi SysOperationDataContractBase, ali će raditi i ako to ne uradi. Prednost proširivanja nadklase je što ona pruža neke informacije o sesiji koje mogu biti korisne.

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

U ovom primeru, itemId je član podataka. Morate implementirati parm metodu za svakog člana podataka i označiti je sa DataMemberAttribute kako bi okvir znao šta je to. Ovo omogućava okviru da automatski izgradi dijalog za vas.

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

    itemId = _itemId;
    return itemId;
}


Servis

Servis klasa je klasa koja sadrži stvarnu poslovnu logiku. Nije zadužena za prikazivanje dijaloga, batch procesiranje ili nešto slično – to je odgovornost kontrolerske klase. Razdvajanjem ovoga, verovatnije je da ćete dizajnirati svoj kod na pravi način i praviti ponovo upotrebljiv kod.

Kao i klasa data contract, servis klasa ne mora nasleđivati ništa posebno, ali treba da nasleđuje SysOperationServiceBase klasu, barem ako očekujete da će servis biti pokrenut kao batch posao, jer nadklasa pruža neke informacije o batch kontekstu. Metoda koja pokreće operaciju (tj. pokreće poslovnu logiku) mora uzeti objekat vaše data contract klase kao ulaz i treba biti dekorisana sa [SysEntryPointAttribute]. Na primer:

class MyService extends SysOperationServiceBase
{
}

sa metodom koja se zove run:

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


Kontroler

Kontrolerska klasa upravlja izvršenjem i batch procesiranjem vaše operacije. Takođe osigurava da se kod izvršava u CIL-u radi maksimalne performanse. Kontrolerska klasa obično nasleđuje SysOperationServiceController klasu, iako postoje i druge opcije.

class MyController extends SysOperationServiceController
{
}

Konstruktor nadklase prima ime klase, ime metode i (opciono) način izvršenja kao parametre. Ime klase i metode treba da budu ime vaše servis klase i metoda koja treba da se pokrene na njoj. Dakle, možete implementirati konstruktor vaše kontrolerske klase ovako:

public static MyController construct()
{
    ;

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

Zatim, glavna metoda MyController klase može biti jednostavna kao

public static void main(Args _args)
{
    ;

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

I praktično ste gotovi. Ovo je očigledno vrlo jednostavan primer, a okvir sadrži mnogo drugih opcija i mogućnosti, ali ovo služi kao brz pregled ako vam je potrebno osvežavanje kada niste koristili okvir neko vreme.

Podeli na BlueskiPodeli na FejsbukuPodeli na LinkedInPodeli na TumblrPodeli na XPodeli na LinkedInPin na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikel je tvorac i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer / programer i trenutno je zaposlen sa punim radnim vremenom za veliku evropsku IT korporaciju. Kada ne bloguje, on provodi svoje slobodno vreme na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj meri može odraziti na različite teme koje se obrađuju na ovoj veb stranici.