Miklix

Dynamics AX 2012 SysOperation Framework īss pārskats

Publicēts: 2025. gada 15. februāris 22:35:27 UTC
Pēdējo reizi atjaunināts: 2026. gada 12. janvāris 08:38:54 UTC

Šajā rakstā sniegts īss pārskats (vai špikerlapa) par to, kā ieviest apstrādes klases un pakešuzdevumus SysOperation ietvarā 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ā ierakstā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tā var būt vai nebūt derīga citām versijām. (Atjauninājums: varu apstiprināt, ka šajā rakstā sniegtā informācija ir derīga arī Dynamics 365 for Operations).


Šis ieraksts ir paredzēts tikai kā īss pārskats un apkrāptu lapa. Ja esat jauns SysOperation ietvarā, es ļoti iesaku izlasīt arī Microsoft informatīvo dokumentu par šo tēmu. Šeit sniegtā informācija var būt noderīga, ja jums vienkārši nepieciešams ātri atsvaidzināt zināšanas par dažādām klasēm, kas iesaistītas operāciju izstrādē, izmantojot šo ietvaru.

Pastāv variācijas, bet, izmantojot šo sistēmu, es parasti ieviešu trīs klases:

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

Turklāt es varu ieviest arī UIBuilder klasi (tai ir jāpaplašina SysOperationUIBuilder), bet tas ir nepieciešams tikai tad, ja dialoglodziņam kāda iemesla dēļ ir jābūt sarežģītākam nekā tas, ko ietvars ģ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 tipisko CurrentList makro, kas definēts RunBase ietvarā, bet tā vietā ieviests kā klase. Datu līgumam vajadzētu paplašināt SysOperationDataContractBase, bet tas darbosies pat tad, ja tas to nedarīs. Superklases paplašināšanas priekšrocība ir tā, ka tas sniedz zināmu sesijas informāciju, kas var būt noderīga.

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

Šajā piemērā itemId ir datu elements. Katram datu elementam ir jāievieš parm metode un jāatzīmē tas ar DataMemberAttribute, lai ietvars zinātu, kas tas ir. Tas ļauj ietvaram automātiski izveidot dialoglodziņu jūsu vietā.

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

    itemId = _itemId;
    return itemId;
}


Pakalpojums

Pakalpojumu klase ir klase, kas satur faktisko biznesa loģiku. Tā nav saistīta ar dialoglodziņu rādīšanu, partiju apstrādi vai kaut ko tamlīdzīgu — tas ir kontroliera klases pienākums. Atdalot to, jūs, visticamāk, varēsiet labi izstrādāt savu kodu un izveidot vairāk atkārtoti izmantojamu kodu.

Tāpat kā datu līguma klasei, pakalpojuma klasei nav jāpārmanto no kaut kā konkrēta, bet tai vajadzētu pārmantot no SysOperationServiceBase klases, vismaz tad, ja paredzat, ka pakalpojums tiks palaists kā pakešuzdevums, jo superklase sniedz informāciju par pakešu kontekstu. Metodei, kas sāk darbību (t. i., palaiž biznesa loģiku), kā ievadi ir jāņem jūsu datu līguma klases objekts, un tai jābūt apzīmētai ar [SysEntryPointAttribute]. Piemēram:

class MyService extends SysOperationServiceBase
{
}

Ar metodi, ko sauc par run:

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


Kontrolieris

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

class MyController extends SysOperationServiceController
{
}

Superklases konstruktors kā parametrus saņem klases nosaukumu, metodes nosaukumu un (pēc izvēles) izpildes režīmu. Klases un metodes nosaukumiem jābūt jūsu pakalpojuma klases nosaukumam un metodei, kas tajā jāizpilda. Tātad, jūs varētu ieviest sava kontrollera konstrukcijas 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ā viss ir paveikts. Iepriekš minētais, protams, ir ļoti vienkāršs piemērs, un ietvars satur daudz citu opciju un iespēju, taču šis kalpo kā īss pārskats, ja nepieciešams atsvaidzināt zināšanas pēc tam, kad kādu laiku neesat lietojis ietvaru.

Papildu lasāmviela

Ja jums patika šī ziņa, jums varētu patikt arī šie ieteikumi:


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

Mikkel Christensen

Par autoru

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