Miklix

Dynamics AX-i 2012 SysOperation Frameworki kiirülevaade

Avaldatud: 15. veebruar 2025, kell 22:34:49 UTC
Viimati uuendatud: 12. jaanuar 2026, kell 08:38:48 UTC

See artikkel annab kiire ülevaate (või spikkerlehe) töötlemisklasside ja pakk-tööde rakendamisest Dynamics AX 2012 ja Dynamics 365 for Operationsi SysOperationi raamistikus.


See lehekülg on inglise keelest masintõlgitud, et muuta see võimalikult paljudele inimestele kättesaadavaks. Kahjuks ei ole masintõlge veel täiuslik tehnoloogia, mistõttu võivad esineda vead. Kui soovite, võite vaadata ingliskeelset originaalversiooni siin:

Dynamics AX 2012 SysOperation Framework Quick Overview

Selle postituse teave põhineb Dynamics AX 2012 R3-l. See ei pruugi kehtida teiste versioonide puhul. (Värskendus: võin kinnitada, et selle artikli teave kehtib ka Dynamics 365 for Operationsi kohta)


See postitus on mõeldud vaid kiire ülevaate ja spikrina. Kui olete SysOperationi raamistikuga alles algaja, soovitan tungivalt lugeda ka Microsofti ametlikku dokumenti sellel teemal. Siinne teave võib olla kasulik, kui vajate lihtsalt kiiret ülevaadet selle raamistikuga operatsioonide arendamisega seotud erinevatest klassidest.

Variatsioone on, aga raamistiku kasutamisel rakendan tavaliselt kolme klassi:

  • Andmeleping (peaks laiendama SysOperationDataContractBase'i)
  • Teenus (peaks laiendama SysOperationServiceBase'i)
  • Kontroller (peab laiendama SysOperationServiceControllerit)

Lisaks võin rakendada ka UIBuilderi klassi (see peab laiendama SysOperationUIBuilderit), aga see on vajalik ainult siis, kui dialoog peab mingil põhjusel olema keerukam kui see, mida raamistik automaatselt genereerib.


Andmeleping

Andmeleping sisaldab teie toiminguks vajalikke andmeliikmeid. Seda saab võrrelda tüüpilise CurrentList makroga, mis on defineeritud RunBase'i raamistikus, kuid rakendatud klassina. Andmeleping peaks laiendama SysOperationDataContractBase'i, kuid töötab ka siis, kui see seda ei tee. Superklassi laiendamise eeliseks on see, et see pakub seansiteavet, mis võib olla kasulik.

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

Selles näites on itemId andmeliige. Iga andmeliikme jaoks peate rakendama parm-meetodi ja sildistama selle DataMemberAttribute'iga, et raamistik teaks, mis see on. See võimaldab raamistikul dialoogi teie eest automaatselt luua.

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

    itemId = _itemId;
    return itemId;
}


Teenindus

Teenuseklass on klass, mis sisaldab tegelikku äriloogikat. See ei tegele dialoogide kuvamise, partiitöötluse ega millegi sellisega – see on kontrolleriklassi ülesanne. Selle eraldamisega on suurem tõenäosus, et saate oma koodi paremini kujundada ja luua rohkem korduvkasutatavat koodi.

Nagu andmelepingu klass, ei pea ka teenuseklass pärima millestki konkreetsest, kuid see peaks pärima SysOperationServiceBase klassist, vähemalt siis, kui eeldatakse, et teenust käivitatakse paketitöötlusena, kuna superklass annab teavet paketi konteksti kohta. Toimingut käivitav meetod (st äriloogikat käivitav meetod) peab sisendiks võtma teie andmelepingu klassi objekti ja see peaks olema kaunistatud atribuudiga [SysEntryPointAttribute]. Näiteks:

class MyService extends SysOperationServiceBase
{
}

Meetodiga nimega run:

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


Kontroller

Kontrolleriklass tegeleb teie toimingute täitmise ja partiitöötlusega. See tagab ka, et kood käivitatakse CIL-is maksimaalse jõudluse saavutamiseks. Kontrolleriklass pärineb tavaliselt SysOperationServiceController klassist, kuigi on ka teisi valikuid.

class MyController extends SysOperationServiceController
{
}

Superklassi konstruktor võtab parameetriteks klassi nime, meetodi nime ja (valikuliselt) täitmisrežiimi. Klassi ja meetodi nimed peaksid olema teie teenuseklassi nimi ja meetodi nimi, mida sellel käivitada. Seega võiksite oma kontrolleri konstruktimeetodi rakendada järgmiselt:

public static MyController construct()
{
    ;

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

Siis võib MyController klassi peamine meetod olla sama lihtne kui

public static void main(Args _args)
{
    ;

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

Ja oletegi põhimõtteliselt valmis. Ülaltoodu on ilmselgelt väga lihtne näide ja raamistik sisaldab hulgaliselt muid valikuid ja võimalusi, kuid see on kiire ülevaade, kui vajate värskendamist, kui te pole raamistikku mõnda aega kasutanud.

Lisalugemist

Kui see postitus teile meeldis, võivad teile meeldida ka need soovitused:


Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isJagage LinkedInisKinnitage Pinterestis

Mikkel Christensen

Autorist

Mikkel Christensen
Mikkel on miklix.com looja ja omanik. Tal on üle 20 aasta kogemust professionaalse programmeerija/tarkvaraarendajana ning praegu töötab ta täiskohaga suures Euroopa IT-ettevõttes. Kui ta ei kirjuta blogi, veedab ta oma vaba aega mitmesuguste huvide, hobide ja tegevustega, mis võib mingil määral kajastuda sellel veebisaidil käsitletavate teemade mitmekesisuses.