Miklix

Dynamics AX 2012 SysOperation Framework Vinnige oorsig

Gepubliseer: 15 Februarie 2025 om 22:37:32 UTC
Laas opgedateer: 12 Januarie 2026 om 08:40:09 UTC

Hierdie artikel bied 'n vinnige oorsig (of spiekbrief) 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 plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie. (Opdatering: Ek kan bevestig dat die inligting in hierdie artikel ook geldig is vir Dynamics 365 for Operations)


Hierdie plasing is slegs bedoel as 'n vinnige oorsig en spiekbrief. As jy nuut is met die SysOperation-raamwerk, stel ek sterk voor dat jy ook Microsoft se witboek oor die onderwerp lees. Die inligting hier kan nuttig wees as jy net 'n vinnige opfris nodig het oor die verskillende klasse wat betrokke is by die ontwikkeling van bewerkings met hierdie raamwerk.

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

  • Datakontrak (moet SysOperationDataContractBase uitbrei)
  • Diens (moet SysOperationServiceBase uitbrei)
  • Kontroleerder (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.


Datakontrak

Die datakontrak bevat die datalede wat vir jou operasie benodig word. Dit kan vergelyk word met die tipiese CurrentList-makro wat in die RunBase-raamwerk gedefinieer is, 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 vertoon van dialoë, bondelverwerking of enigiets van die aard nie – dit is die verantwoordelikheid van die beheerderklas. Deur dit te skei, is jy 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 bondeltaak uitgevoer sal word, aangesien die superklas inligting oor die bondelkonteks verskaf. Die metode wat die bewerking begin (d.w.s. die besigheidslogika uitvoer) moet 'n objek 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
}


Kontroleerder

Die beheerderklas hanteer die uitvoering en bondelverwerking van jou bewerking. Dit maak ook seker dat die kode in CIL uitgevoer word vir maksimum werkverrigting. 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 en die metode wees wat daarop uitgevoer moet word. Jy kan dus jou beheerder se konstrukmetode 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 opknapping nodig het wanneer jy die raamwerk 'n rukkie nie gebruik het nie.

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


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

Mikkel Christensen

Oor die skrywer

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