Miklix

Dynamics AX 2012 SysOperation Framework īss pārskats

Publicēts: 2025. gada 15. februāris 22:35:27 UTC

Šajā rakstā ir sniegts ātrs pārskats (vai apkrāptu lapa) par to, kā ieviest apstrādes klases un pakešu darbus ietvarā SysOperation programmās Dynamics AX 2012 un Dynamics 365 for Operations.


Šī lapa tika mašīntulkota no angļu valodas, lai padarītu to pieejamu pēc iespējas vairāk cilvēkiem. Diemžēl mašīntulkošana vēl nav pilnīga tehnoloģija, tāpēc tajā var rasties kļūdas. Ja vēlaties, oriģinālo versiju angļu valodā varat apskatīt šeit:

Dynamics AX 2012 SysOperation Framework Quick Overview

Šajā ziņā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tas var būt un var nebūt derīgs citām versijām. (Atjauninājums: varu apstiprināt, ka šajā rakstā sniegtā informācija ir derīga arī Dynamics 365 for Operations)


Šī ziņa ir domāta tikai kā ātrs pārskats un krāpšanās lapa. Ja esat iesācējs SysOperation ietvarā, noteikti iesaku izlasīt arī Microsoft balto grāmatu par šo tēmu. Šeit sniegtā informācija var būt noderīga, ja jums vienkārši nepieciešams īss ieskats dažādās klasēs, kas iesaistītas darbību izstrādē ar šo sistēmu.

Ir varianti, taču, izmantojot ietvaru, es parasti ieviešu trīs klases:

  • Datu līgums (vajadzētu pagarināt SysOperationDataContractBase)
  • Pakalpojums (vajadzētu paplašināt SysOperationServiceBase)
  • Kontrolieris ( jāpaplašina SysOperationServiceController)

Turklāt es varu ieviest arī UIBuilder klasi ( jāpaplašina SysOperationUIBuilder), bet tas ir nepieciešams tikai tad, ja dialogam kāda iemesla dēļ ir jābūt progresīvākam par to, ko sistēma ģenerē automātiski.


Datu līgums

Datu līgumā ir jūsu darbībai nepieciešamie datu dalībnieki. To var salīdzināt ar parasto CurrentList makro, kas definēts RunBase ietvarā, bet tā vietā ieviests kā klase. Datu līgumam ir jāpagarina SysOperationDataContractBase, taču tas darbosies pat tad, ja tas nedarbosies. Superklases paplašināšanas priekšrocība ir tā, ka tā sniedz zināmu informāciju par sesiju, kas var būt noderīga.

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

Šajā piemērā itemId ir datu dalībnieks. Katram datu dalībniekam ir jāievieš parm metode un jāatzīmē tas ar DataMemberAttribute, lai sistēma zinātu, kas tas ir. Tas ļauj sistēmai automātiski izveidot dialogu jūsu vietā.

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

    itemId = _itemId;
    return itemId;
}


Serviss

Pakalpojumu klase ir klase, kas satur faktisko biznesa loģiku. Tas nav saistīts ar dialoglodziņu rādīšanu, pakešu apstrādi vai jebko tamlīdzīgu — par to ir atbildīga kontroliera klase. Atdalot to, jūs, visticamāk, labi izstrādāsit savu kodu un padarīsit vairāk atkārtoti lietojamu kodu.

Tāpat kā datu līguma klasei, arī pakalpojumu klasei nav jāmanto no kaut kā īpaša, taču tai vajadzētu mantot no SysOperationServiceBase klases, vismaz tad, ja sagaidāt, ka pakalpojums tiks palaists kā pakešdarbs, jo superklase sniedz zināmu informāciju par paketes kontekstu. Metodei, kas sāk darbību (ti, palaiž biznesa loģiku), kā ievadi ir jāizmanto jūsu datu līguma klases objekts, un tai jābūt dekorētai ar [SysEntryPointAttribute]. Piemēram:

class MyService extends SysOperationServiceBase
{
}

ar metodi, ko sauc par palaišanu:

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


Kontrolieris

Kontrolieru klase apstrādā jūsu darbības izpildi un pakešu apstrādi. Tas arī nodrošina, ka kods tiek izpildīts CIL, lai nodrošinātu maksimālu veiktspēju. Kontrollera klase parasti tiek mantota no SysOperationServiceController klases, lai gan ir arī citas iespējas.

class MyController extends SysOperationServiceController
{
}

Superklases konstruktors kā parametrus ņem klases nosaukumu, metodes nosaukumu un (pēc izvēles) izpildes režīmu. Klases un metodes nosaukumiem ir jābūt jūsu pakalpojumu klases nosaukumam un metodei, kas tajā jāpalaiž. Tātad, jūs varētu ieviest kontroliera konstruēšanas metodi šādi:

public static MyController construct()
{
    ;

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

Tad MyController klases galvenā metode var būt tikpat vienkārša kā

public static void main(Args _args)
{
    ;

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

Un būtībā esat pabeidzis. Iepriekš minētais acīmredzami ir ļoti vienkāršs piemērs, un ietvarā ir daudz citu iespēju un iespēju, taču tas kalpo kā ātrs pārskats, ja jums ir nepieciešama atjaunināšana, kad ietvars kādu laiku nav izmantots.

Kopīgojiet pakalpojumā BlueskyKopīgot FacebookKopīgojiet vietnē LinkedInKopīgojiet vietnē TumblrKopīgot vietnē XKopīgojiet vietnē LinkedInPiespraust vietnē Pinterest

Mikkel Bang Christensen

Par autoru

Mikkel Bang Christensen
Mikels ir miklix.com radītājs un īpašnieks. Viņam ir vairāk nekā 20 gadu pieredze kā profesionālam programmētājam/programmatūras izstrādātājam, un pašlaik viņš strādā pilna laika darbu lielā Eiropas IT korporācijā. Kad viņš neraksta blogus, viņš pavada brīvo laiku, pievēršoties dažādām interesēm, hobijiem un aktivitātēm, kas zināmā mērā var atspoguļoties šajā tīmekļa vietnē aplūkoto tēmu daudzveidībā.