Miklix

Hitri pregled Dynamics AX 2012 SysOperation Framework

Objavljeno: 15. februar 2025 ob 10:35:42 pop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:39:07 dop. UTC

Ta članek ponuja hiter pregled (ali preglednico) o tem, kako implementirati razrede obdelave in paketna opravila v ogrodju SysOperation v programih Dynamics AX 2012 in Dynamics 365 for Operations.


Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

Dynamics AX 2012 SysOperation Framework Quick Overview

Informacije v tej objavi temeljijo na programu Dynamics AX 2012 R3. Morda veljajo za druge različice, morda pa tudi ne. (Posodobitev: Lahko potrdim, da so informacije v tem članku veljavne tudi za Dynamics 365 for Operations.)


Ta objava je mišljena le kot hiter pregled in pregled. Če ste novi v svetu ogrodja SysOperation, vam toplo priporočam, da preberete tudi Microsoftovo belo knjigo na to temo. Informacije v tem dokumentu vam bodo morda v pomoč, če se boste le na hitro seznanili z različnimi razredi, ki sodelujejo pri razvoju operacij s tem ogrodjem.

Obstajajo različice, vendar ko uporabljam ogrodje, običajno implementiram tri razrede:

  • Podatkovna pogodba (naj bi razširila SysOperationDataContractBase)
  • Storitev (naj razširi SysOperationServiceBase)
  • Krmilnik (mora razširiti SysOperationServiceController)

Poleg tega lahko implementiram tudi razred UIBuilder (mora razširiti SysOperationUIBuilder), vendar je to potrebno le, če mora biti pogovorno okno iz nekega razloga naprednejše od tistega, kar ogrodje ustvari samodejno.


Pogodba o podatkih

Podatkovna pogodba vsebuje podatkovne člane, potrebne za vaše delovanje. Primerjamo jo lahko s tipičnim makrom CurrentList, definiranim v ogrodju RunBase, vendar je implementirana kot razred. Podatkovna pogodba bi morala razširjati SysOperationDataContractBase, vendar bo delovala tudi, če ne bo. Prednost razširitve nadrazreda je, da zagotavlja nekatere informacije o seji, ki so lahko koristne.

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

V tem primeru je itemId podatkovni član. Za vsak podatkovni član morate implementirati metodo parm in ga označiti z DataMemberAttribute, da ogrodje ve, kaj je to. To ogrodju omogoča, da samodejno zgradi pogovorno okno namesto vas.

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

    itemId = _itemId;
    return itemId;
}


Storitev

Razred storitev je razred, ki vsebuje dejansko poslovno logiko. Ne ukvarja se s prikazovanjem pogovornih oken, paketno obdelavo ali čimer koli podobnim – to je odgovornost razreda krmilnika. Z ločitvijo tega je večja verjetnost, da boste dobro oblikovali svojo kodo in ustvarili več kode za ponovno uporabo.

Tako kot razred podatkovnih pogodb tudi razred storitev ne deduje od ničesar posebnega, vendar bi moral dedovati od razreda SysOperationServiceBase, vsaj če pričakujete, da se bo storitev izvajala kot paketno opravilo, saj nadrejeni razred zagotavlja nekaj informacij o paketnem kontekstu. Metoda, ki zažene operacijo (tj. izvede poslovno logiko), mora kot vhod sprejeti objekt vašega razreda podatkovnih pogodb in mora biti okrašena z [SysEntryPointAttribute]. Na primer:

class MyService extends SysOperationServiceBase
{
}

Z metodo, imenovano run:

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


Krmilnik

Razred krmilnika upravlja izvajanje in paketno obdelavo vaše operacije. Prav tako zagotavlja, da se koda izvaja v CIL za maksimalno zmogljivost. Razred krmilnika običajno podeduje razred SysOperationServiceController, čeprav obstajajo tudi druge možnosti.

class MyController extends SysOperationServiceController
{
}

Konstruktor nadrazreda kot parametre sprejme ime razreda, ime metode in (neobvezno) način izvajanja. Imena razredov in metod naj bodo ime vašega storitvenega razreda in metode, ki naj se na njem izvaja. Metodo konstruiranja krmilnika lahko torej implementirate takole:

public static MyController construct()
{
    ;

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

Potem je glavna metoda razreda MyController lahko tako preprosta kot

public static void main(Args _args)
{
    ;

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

In v bistvu ste končali. Zgornji primer je očitno zelo preprost in ogrodje vsebuje obilico drugih možnosti, vendar to služi kot hiter pregled, če potrebujete osvežitev znanja, ko ogrodja že nekaj časa niste uporabljali.

Nadaljnje branje

Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:


Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Christensen

O avtorju

Mikkel Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.