Miklix

Brzi pregled Dynamics AX 2012 SysOperation Framework

Objavljeno: 15. veljače 2025. u 22:37:35 UTC

Ovaj članak pruža brzi pregled (ili varalicu) o tome kako implementirati klase obrade i skupne poslove u okviru SysOperation u sustavu Dynamics AX 2012 i Dynamics 365 for Operations.


Ova je stranica strojno prevedena s engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, strojno prevođenje još nije usavršena tehnologija pa se mogu pojaviti pogreške. Ako želite, izvornu englesku verziju možete pogledati ovdje:

Dynamics AX 2012 SysOperation Framework Quick Overview

Informacije u ovom postu temelje se na Dynamics AX 2012 R3. Može, ali i ne mora vrijediti za druge verzije. (Ažuriranje: mogu potvrditi da informacije u ovom članku vrijede i za Dynamics 365 for Operations)


Ovaj post je samo zamišljen kao brzi pregled i varalica. Ako ste novi u SysOperation okviru, toplo predlažem da pročitate i Microsoftovu bijelu knjigu o toj temi. Informacije ovdje mogu biti korisne ako samo trebate brzo osvježiti različite klase uključene u razvoj operacija s ovim okvirom.

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

  • Ugovor o podacima (treba proširiti SysOperationDataContractBase)
  • Usluga (treba proširiti SysOperationServiceBase)
  • Kontroler ( mora proširiti SysOperationServiceController)

Osim toga, mogu također implementirati klasu UIBuilder ( mora proširiti SysOperationUIBuilder), ali to je potrebno samo ako dijaloški okvir iz nekog razloga mora biti napredniji od onoga što okvir automatski generira.


Ugovor o podacima

Ugovor o podacima sadrži članove podataka koji su potrebni za vaš rad. Može se usporediti s tipičnom CurrentList makronaredbom definiranom u okviru RunBase, ali umjesto toga implementiranom kao klasa. Ugovor o podacima trebao bi proširiti SysOperationDataContractBase, ali će funkcionirati čak i ako to ne učini. Prednost proširenja super klase je u tome što pruža neke informacije o sesiji koje mogu biti korisne.

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

U ovom primjeru, itemId je podatkovni član. Morate implementirati parm metodu za svaki podatkovni član i označiti ga DataMemberAttributeom tako da okvir zna što je to. Ovo omogućuje okviru da automatski izgradi dijaloški okvir za vas.

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

    itemId = _itemId;
    return itemId;
}


Servis

Klasa usluge je klasa koja sadrži stvarnu poslovnu logiku. Ne bavi se prikazivanjem dijaloga, skupnom obradom ili nečim sličnim – to je odgovornost klase kontrolera. Odvajanjem ovoga veća je vjerojatnost da ćete dobro dizajnirati svoj kod i napraviti više koda koji se može višekratno koristiti.

Poput klase ugovora o podacima, klasa usluge ne mora naslijediti ni od čega posebno, ali bi trebala naslijediti od klase SysOperationServiceBase, barem ako očekujete da će se usluga izvoditi kao skupni posao, budući da super klasa pruža neke informacije o kontekstu serije. Metoda koja pokreće operaciju (tj. pokreće poslovnu logiku) mora uzeti objekt vaše klase podatkovnog ugovora kao ulaz i trebala bi biti ukrašena [SysEntryPointAttribute]. Na primjer:

class MyService extends SysOperationServiceBase
{
}

s metodom koja se zove run:

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


Kontrolor

Klasa kontrolera upravlja izvršavanjem i skupnom obradom vaše operacije. Također osigurava da se kôd izvodi u CIL-u za maksimalnu izvedbu. Klasa kontrolera obično nasljeđuje od klase SysOperationServiceController, iako postoje i druge opcije.

class MyController extends SysOperationServiceController
{
}

Konstruktor super klase uzima naziv klase, naziv metode i (po izboru) način izvršenja kao parametre. Nazivi klasa i metoda trebali bi biti nazivi vaše servisne klase i metode koja bi se na njoj trebala izvoditi. Dakle, možete implementirati metodu konstrukcije vašeg kontrolera ovako:

public static MyController construct()
{
    ;

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

Tada glavna metoda klase MyController može biti jednostavna kao

public static void main(Args _args)
{
    ;

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

I u biti ste gotovi. Gore navedeno je očito vrlo jednostavan primjer i okvir sadrži mnoštvo drugih opcija i mogućnosti, ali ovo služi kao brzi pregled ako trebate osvježiti okvir kada neko vrijeme niste koristili okvir.

Podijeli na BlueskyPodijelite na FacebookuPodijelite na LinkedInuPodijelite na TumblrPodijeli na XPodijelite na LinkedInuPrikvači na Pinterest

Mikkel Bang Christensen

O autoru

Mikkel Bang Christensen
Mikkel je kreator i vlasnik miklix.com. Ima više od 20 godina iskustva kao profesionalni računalni programer/razvijač softvera i trenutno je zaposlen na puno radno vrijeme za veliku europsku IT korporaciju. Kada ne piše blog, svoje slobodno vrijeme provodi na široku lepezu interesa, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme obrađene na ovoj web stranici.