Miklix

Dynamics AX 2012 SysOperation Framework -pikakatsaus

Julkaistu: 15. helmikuuta 2025 klo 22.34.49 UTC

Tämä artikkeli tarjoaa nopean yleiskatsauksen (tai huijausarkin) käsittelyluokkien ja erätöiden toteuttamisesta SysOperation-kehyksessä Dynamics AX 2012:ssa ja Dynamics 365 for Operationsissa.


Tämä sivu on käännetty koneellisesti englannista, jotta se olisi mahdollisimman monen ihmisen saatavilla. Valitettavasti konekääntäminen ei ole vielä täydellistä tekniikkaa, joten virheitä voi esiintyä. Voit halutessasi tarkastella alkuperäistä englanninkielistä versiota täällä:

Dynamics AX 2012 SysOperation Framework Quick Overview

Tämän viestin tiedot perustuvat Dynamics AX 2012 R3:een. Se voi tai ei välttämättä ole voimassa muille versioille. (Päivitys: Voin vahvistaa, että tämän artikkelin tiedot koskevat myös Dynamics 365 for Operationsia)


Tämä viesti on tarkoitettu vain nopeaksi yleiskatsaukseksi ja huijausarkkiksi. Jos olet uusi SysOperation-kehyksessä, suosittelen, että luet myös Microsoftin valkoisen kirjan aiheesta. Tässä olevista tiedoista voi olla hyötyä, jos tarvitset vain nopean selvityksen eri luokista, jotka osallistuvat toimintojen kehittämiseen tällä viitekehyksellä.

Variaatioita on, mutta kun käytän kehystä, toteutan yleensä kolme luokkaa:

  • Tietosopimus (pitäisi jatkaa SysOperationDataContractBasea)
  • Palvelu (pitäisi laajentaa SysOperationServiceBasea)
  • Ohjain ( täytyy laajentaa SysOperationServiceController)

Lisäksi voin toteuttaa myös UIBuilder-luokan ( täytyy laajentaa SysOperationUIBuilderiä), mutta se on tarpeen vain, jos dialogin on jostain syystä oltava edistyneempi kuin kehyksen automaattisesti luoma.


Datasopimus

Tietosopimus sisältää toimintasi edellyttämät tiedot. Sitä voidaan verrata tyypilliseen CurrentList-makroon, joka on määritelty RunBase-kehyksessä, mutta toteutettu sen sijaan luokkana. Tietosopimuksen pitäisi laajentaa SysOperationDataContractBasea, mutta se toimii, vaikka se ei toimisi. Superluokan laajentamisen etuna on, että se tarjoaa joitain istuntotietoja, jotka voivat olla käteviä.

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

Tässä esimerkissä itemId on datajäsen. Sinun täytyy ottaa käyttöön parm-menetelmä jokaiselle datajäsenelle ja merkitä se DataMemberAttribute-määritteellä, jotta kehys tietää, mikä se on. Tämä mahdollistaa kehyksen automaattisesti rakentavan dialogin puolestasi.

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

    itemId = _itemId;
    return itemId;
}


Palvelu

Palveluluokka on luokka, joka sisältää varsinaisen liiketoimintalogiikan. Se ei koske valintaikkunoiden näyttämistä, eräkäsittelyä tai mitään sellaista – se on ohjainluokan vastuulla. Erottamalla tämän voit todennäköisemmin suunnitella koodisi hyvin ja tehdä uudelleenkäytettävästä koodista.

Datasopimusluokan tapaan palveluluokan ei tarvitse periytyä mistään erityisestä, mutta sen pitäisi periytyä SysOperationServiceBase-luokasta, ainakin jos olettaa, että palvelua ajetaan erätyönä, sillä superluokka antaa jotain tietoa eräkontekstista. Menetelmän, joka käynnistää toiminnon (eli ajaa liiketoimintalogiikkaa), on otettava syötteeksi datasopimusluokkasi objekti ja se tulee koristella [SysEntryPointAttribute]-määritteellä. Esimerkiksi:

class MyService extends SysOperationServiceBase
{
}

menetelmällä run:

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


Ohjain

Ohjainluokka hoitaa toimintosi suorittamisen ja eräkäsittelyn. Se myös varmistaa, että koodi suoritetaan CIL:ssä parhaan mahdollisen suorituskyvyn saavuttamiseksi. Ohjainluokka periytyy yleensä SysOperationServiceController-luokasta, vaikka muitakin vaihtoehtoja on olemassa.

class MyController extends SysOperationServiceController
{
}

Superluokan rakentaja ottaa parametreiksi luokan nimen, menetelmän nimen ja (valinnaisesti) suoritustavan. Luokan ja menetelmän nimien tulee olla palveluluokkasi nimi ja siinä ajettava menetelmä. Joten voit toteuttaa ohjaimesi rakennusmenetelmän seuraavasti:

public static MyController construct()
{
    ;

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

Silloin MyController-luokan päämenetelmä voi olla yhtä yksinkertainen kuin

public static void main(Args _args)
{
    ;

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

Ja olet periaatteessa valmis. Yllä oleva on ilmeisesti hyvin yksinkertainen esimerkki ja kehys sisältää joukon muita vaihtoehtoja ja mahdollisuuksia, mutta tämä toimii nopeana yleiskatsauksena, jos tarvitset sivellintä, kun et ole käyttänyt kehystä vähään aikaan.

Jaa BlueskyssäJaa FacebookissaJaa LinkedInissäJaa TumblrissaJaa X:ssäJaa LinkedInissäPin Pinterestissä

Mikkel Bang Christensen

Kirjoittajasta

Mikkel Bang Christensen
Mikkel on miklix.com-sivuston luoja ja omistaja. Hänellä on yli 20 vuoden kokemus ammattimaisena tietokoneohjelmoijana/ohjelmistokehittäjänä, ja tällä hetkellä hän työskentelee kokopäiväisesti suuressa eurooppalaisessa IT-yrityksessä. Kun hän ei ole bloggaamassa, hän käyttää vapaa-aikaansa monenlaisiin kiinnostuksen kohteisiin, harrastuksiin ja aktiviteetteihin, mikä saattaa jossain määrin heijastua tällä verkkosivustolla käsiteltävien aiheiden moninaisuuteen.