Miklix

Dynamics AX 2012 SysOperation Framework -pikakatsaus

Julkaistu: 15. helmikuuta 2025 klo 22.34.49 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.38.49 UTC

Tämä artikkeli tarjoaa lyhyen yleiskatsauksen (tai muistilapun) siitä, miten käsittelyluokat ja erätyöt otetaan käyttöön 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. Ne eivät välttämättä päde muihin versioihin. (Päivitys: Voin vahvistaa, että tämän artikkelin tiedot pätevät myös Dynamics 365 for Operationsille.)


Tämä viesti on tarkoitettu vain nopeaksi yleiskatsaukseksi ja muistilapuksi. Jos olet uusi SysOperation-kehyksen käyttäjä, suosittelen vahvasti, että luet myös Microsoftin aiheesta kertovan raportin. Tässä olevat tiedot voivat olla hyödyllisiä, jos tarvitset vain nopeaa kertauskokemusta eri luokista, joita käytetään operaatioiden kehittämiseen tällä kehyksellä.

Muunnelmia on, mutta kun käytän kehystä, toteutan tyypillisesti kolme luokkaa:

  • Datasopimus (pitäisi laajentaa SysOperationDataContractBase-sopimusta)
  • Palvelu (pitäisi laajentaa SysOperationServiceBase-palvelua)
  • Ohjain (täytyy laajentaa SysOperationServiceController-ominaisuutta)

Lisäksi voin toteuttaa UIBuilder-luokan (sen on laajennettava SysOperationUIBuilder-luokkaa), mutta se on tarpeen vain, jos valintaikkunan on jostain syystä oltava kehittyneempi kuin mitä kehys luo automaattisesti.


Datasopimus

Tietosopimus sisältää toimintosi tarvitsemat datajäsenet. Sitä voidaan verrata tyypilliseen RunBase-kehyksessä määriteltyyn CurrentList-makroon, mutta se on toteutettu luokkana. Tietosopimuksen tulisi laajentaa SysOperationDataContractBase-luokkaa, mutta se toimii, vaikka se ei laajentaisikaan sitä. Yläluokan laajentamisen etuna on, että se tarjoaa joitakin istuntotietoja, jotka voivat olla käteviä.

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

Tässä esimerkissä itemId on datajäsen. Sinun on toteutettava parm-metodi jokaiselle datajäsenelle ja merkittävä se DataMemberAttribute-attribuutilla, jotta kehys tietää, mikä se on. Tämä mahdollistaa kehyksen rakentaa valintaikkunan automaattisesti puolestasi.

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

    itemId = _itemId;
    return itemId;
}


Palvelu

Palveluluokka on luokka, joka sisältää varsinaisen liiketoimintalogiikan. Se ei ole kiinnostunut valintaikkunoiden näyttämisestä, eräkäsittelystä tai mistään vastaavasta – se on kontrolleriluokan vastuulla. Erottamalla tämän, on todennäköisempää, että suunnittelet koodisi hyvin ja luot enemmän uudelleenkäytettävää koodia.

Kuten datasopimusluokan, palveluluokan ei tarvitse periä mistään tietystä, mutta sen tulisi periä SysOperationServiceBase-luokasta, ainakin jos odotat palvelun suoritettavan eräajona, koska superluokka tarjoaa tietoa eräkontekstista. Toiminnon käynnistävän metodin (eli liiketoimintalogiikan suorittavan metodin) on otettava syötteeksi datasopimusluokkasi objekti ja se tulisi varustaa [SysEntryPointAttribute]-attribuutilla. Esimerkiksi:

class MyService extends SysOperationServiceBase
{
}

Run-nimisellä metodilla:

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


Ohjain

Controller-luokka käsittelee operaatiosi suorituksen ja eräkäsittelyn. Se varmistaa myös, että koodi suoritetaan CIL-kielellä maksimaalisen suorituskyvyn saavuttamiseksi. Controller-luokka perii tyypillisesti SysOperationServiceController-luokan, vaikka on olemassa myös muita vaihtoehtoja.

class MyController extends SysOperationServiceController
{
}

Yliluokan konstruktori saa parametreina luokan nimen, metodin nimen ja (valinnainen) suoritustilan. Luokan ja metodin nimien tulisi olla palveluluokkasi nimi ja metodi, jota sillä ajetaan. Voit siis toteuttaa ohjaimesi konstruktiometodin seuraavasti:

public static MyController construct()
{
    ;

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

Tällöin MyController-luokan päämetodi voi olla niinkin yksinkertainen kuin

public static void main(Args _args)
{
    ;

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

Ja olet periaatteessa valmis. Yllä oleva on tietenkin hyvin yksinkertainen esimerkki ja viitekehys sisältää lukuisia muita vaihtoehtoja ja mahdollisuuksia, mutta tämä toimii nopeana yleiskatsauksena, jos tarvitset kertauskokemusta, kun et ole käyttänyt viitekehystä vähään aikaan.

Lisälukemista

Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:


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

Mikkel Christensen

Kirjoittajasta

Mikkel 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.