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.
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.
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.
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:
{
}
met 'n metode genaamd run:
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.
{
}
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:
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
Dan kan die hoofmetode van die MyController-klas so eenvoudig wees soos
{
;
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.