Miklix

Dynamics AX 2012 SysOperation Framework Vinnige oorsig

Gepubliseer: 15 Februarie 2025 om 22:37:32 UTC

Hierdie artikel verskaf 'n vinnige oorsig (of cheat sheet) oor hoe om verwerkingsklasse en bondeltake in die SysOperation-raamwerk in Dynamics AX 2012 en Dynamics 365 for Operations te implementeer.


Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

Dynamics AX 2012 SysOperation Framework Quick Overview

Die inligting in hierdie pos is gebaseer op Dynamics AX 2012 R3. Dit mag of mag nie geldig wees vir ander weergawes nie. (Opdatering: Ek kan bevestig dat die inligting in hierdie artikel ook geldig is vir Dynamics 365 for Operations)


Hierdie pos is net bedoel as 'n vinnige oorsig en cheat sheet. As jy nuut is met die SysOperation-raamwerk, stel ek sterk voor dat jy Microsoft se witskrif oor die onderwerp ook lees. Die inligting hier kan nuttig wees as jy net 'n vinnige opknapping nodig het oor die verskillende klasse wat betrokke is by die ontwikkeling van bedrywighede met hierdie raamwerk.

Daar is variasies, maar wanneer ek die raamwerk gebruik, implementeer ek tipies drie klasse:

  • Datakontrak (moet SysOperationDataContractBase verleng)
  • Diens (moet SysOperationServiceBase uitbrei)
  • Beheerder ( moet SysOperationServiceController uitbrei)

Daarbenewens kan ek ook 'n UIBuilder-klas implementeer ( moet SysOperationUIBuilder uitbrei), maar dit is slegs nodig as die dialoog om een ​​of ander rede meer gevorderd moet wees as wat die raamwerk outomaties genereer.


Data kontrak

Die datakontrak bevat die datalede wat nodig is vir jou operasie. Dit kan vergelyk word met die tipiese CurrentList-makro wat in die RunBase-raamwerk gedefinieer word, maar eerder as 'n klas geïmplementeer word. Die datakontrak behoort SysOperationDataContractBase uit te brei, maar sal werk selfs al doen dit nie. Die voordeel van die uitbreiding van die superklas is dat dit sessie-inligting verskaf wat handig kan wees.

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

In hierdie voorbeeld is die itemId 'n datalid. Jy moet 'n parm-metode vir elke datalid implementeer en dit met die DataMemberAttribute merk sodat die raamwerk weet wat dit is. Dit stel die raamwerk in staat om die dialoog outomaties vir jou te bou.

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

    itemId = _itemId;
    return itemId;
}


Diens

Die diensklas is die klas wat die werklike besigheidslogika bevat. Dit is nie gemoeid met die wys van dialoë, bondelverwerking of enigiets van die aard nie – dit is die verantwoordelikheid van die beheerderklas. Deur dit te skei, is dit meer geneig om jou kode goed te ontwerp en meer herbruikbare kode te maak.

Soos die datakontrakklas, hoef die diensklas nie van enigiets spesifieks te erf nie, maar dit moet van die SysOperationServiceBase-klas erf, ten minste as jy verwag dat die diens as 'n bondelwerk uitgevoer sal word, aangesien die superklas inligting oor die bondelkonteks verskaf. Die metode wat die operasie begin (dws bestuur die besigheidslogika) moet 'n voorwerp van jou datakontrakklas as invoer neem en moet versier word met die [SysEntryPointAttribute]. Byvoorbeeld:

class MyService extends SysOperationServiceBase
{
}

met 'n metode genaamd run:

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


Beheerder

Die kontroleerderklas hanteer die uitvoering en bondelverwerking van jou operasie. Dit maak ook seker dat die kode in CIL uitgevoer word vir maksimum prestasie. Die beheerderklas erf tipies van die SysOperationServiceController-klas, hoewel daar ook ander opsies is.

class MyController extends SysOperationServiceController
{
}

Die konstruktor van die superklas neem 'n klasnaam, metodenaam en (opsioneel) uitvoeringsmodus as parameters. Die klas- en metodename moet die naam van jou diensklas wees en die metode wat daarop uitgevoer moet word. U kan dus u kontroleerder se konstruksiemetode soos volg implementeer:

public static MyController construct()
{
    ;

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

Dan kan die hoofmetode van die MyController-klas so eenvoudig wees soos

public static void main(Args _args)
{
    ;

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

En jy is basies klaar. Bogenoemde is natuurlik 'n baie eenvoudige voorbeeld en die raamwerk bevat 'n oorvloed ander opsies en moontlikhede, maar dit dien as 'n vinnige oorsig as jy 'n borsel nodig het wanneer jy die raamwerk vir 'n rukkie nie gebruik het nie.

Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Bang Christensen

Oor die skrywer

Mikkel Bang Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.