Miklix

Mabilis na Pangkalahatang-ideya ng Dynamics AX 2012 SysOperation Framework

Nai-publish: Marso 19, 2025 nang 9:31:01 PM UTC

Nagbibigay ang artikulong ito ng mabilis na pangkalahatang-ideya (o cheat sheet) sa kung paano ipatupad ang mga klase sa pagpoproseso at mga batch na trabaho sa SysOperation framework sa Dynamics AX 2012 at Dynamics 365 para sa Operations.


Ang pahinang ito ay isinalin sa makina mula sa Ingles upang gawin itong naa-access sa pinakamaraming tao hangga't maaari. Sa kasamaang palad, ang pagsasalin ng makina ay hindi pa isang perpektong teknolohiya, kaya maaaring mangyari ang mga error. Kung gusto mo, maaari mong tingnan ang orihinal na bersyong Ingles dito:

Dynamics AX 2012 SysOperation Framework Quick Overview

Ang impormasyon sa post na ito ay batay sa Dynamics AX 2012 R3. Maaaring ito ay wasto o hindi wasto para sa ibang mga bersyon. (Update: Maaari kong tiyakin na ang impormasyon sa artikulong ito ay wasto din para sa Dynamics 365 for Operations)


Ang post na ito ay nilalayong magbigay ng mabilis na overview at cheat sheet. Kung ikaw ay bago sa SysOperation framework, mariin kong inirerekomenda na basahin mo rin ang white paper ng Microsoft tungkol sa paksang ito. Ang impormasyon dito ay maaaring maging kapaki-pakinabang kung kailangan mo lamang ng mabilis na pagsusuri sa iba't ibang klase na kasangkot sa pagbuo ng mga operasyon gamit ang framework na ito.

May mga pagbabago, ngunit kapag ginagamit ko ang framework, karaniwan kong ipinatutupad ang tatlong klase:

  • Data contract (dapat mag-extend sa SysOperationDataContractBase)
  • Serbisyo (dapat mag-extend sa SysOperationServiceBase)
  • Controller (kailangang mag-extend sa SysOperationServiceController)

Dagdag pa rito, maaaring ipatupad ko rin ang isang klase ng UIBuilder (kailangang mag-extend sa SysOperationUIBuilder), ngunit ito ay kinakailangan lamang kung ang dialogo ay kailangang mas advanced kaysa sa awtomatikong nabubuo ng framework.


Data contract

Ang data contract ay naglalaman ng mga data member na kinakailangan para sa iyong operasyon. Maaari itong ikumpara sa karaniwang CurrentList macro na tinutukoy sa RunBase framework, ngunit ipinatupad bilang isang klase. Dapat mag-extend ang data contract sa SysOperationDataContractBase, ngunit gagana pa rin kahit hindi ito gawin. Ang kalamangan ng pagpapalawak sa super class ay nagbibigay ito ng ilang impormasyon tungkol sa session na maaaring maging kapaki-pakinabang.

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

Sa halimbawa na ito, ang itemId ay isang data member. Kailangan mong ipatupad ang isang parm na pamamaraan para sa bawat data member at markahan ito gamit ang DataMemberAttribute upang malaman ng framework kung ano ito. Ito ay nagpapahintulot sa framework na awtomatikong buuin ang dialogo para sa iyo.

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

    itemId = _itemId;
    return itemId;
}


Serbisyo

Ang serbisyo na klase ay ang klase na naglalaman ng aktwal na business logic. Hindi nito inaalala ang pagpapakita ng mga dialogo, batch processing o anumang katulad nito – iyon ang responsibilidad ng controller na klase. Sa paghihiwalay na ito, mas malamang na magdisenyo ka ng maayos na code at makagawa ng mas reusable na code.

Katulad ng data contract na klase, hindi kailangang magmana ang serbisyo na klase mula sa anumang partikular na bagay, ngunit dapat itong magmana mula sa SysOperationServiceBase na klase, lalo na kung inaasahan mong ang serbisyo ay tatakbo bilang isang batch job, dahil ang super class ay nagbibigay ng ilang impormasyon tungkol sa batch context. Ang pamamaraan na magsisimula ng operasyon (iyon ay, nagpapatakbo ng business logic) ay kailangang tumanggap ng isang object ng iyong data contract na klase bilang input at dapat palamutihan ng [SysEntryPointAttribute]. Halimbawa:

class MyService extends SysOperationServiceBase
{
}

na may pamamaraan na tinatawag na run:

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


Controller

Ang controller na klase ay humahawak ng pagpapatupad at batch processing ng iyong operasyon. Tinitiyak din nito na ang code ay isinasagawa sa CIL para sa pinakamataas na performance. Karaniwan, ang controller na klase ay nagmamana mula sa SysOperationServiceController na klase, bagaman may iba pang mga opsyon din.

class MyController extends SysOperationServiceController
{
}

Ang constructor ng super class ay tumatanggap ng isang pangalan ng klase, pangalan ng pamamaraan at (opsyonal) na mode ng pagpapatupad bilang mga parameter. Ang mga pangalan ng klase at pamamaraan ay dapat ang pangalan ng iyong serbisyo na klase at ang pamamaraan na dapat patakbuhin dito. Kaya, maaaring ipatupad mo ang construct na pamamaraan ng iyong controller ng ganito:

public static MyController construct()
{
    ;

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

Pagkatapos, ang pangunahing pamamaraan ng MyController na klase ay maaaring kasing simple ng

public static void main(Args _args)
{
    ;

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

At tapos ka na. Ang nasa itaas ay malinaw na isang napakasimpleng halimbawa at ang framework ay naglalaman ng maraming iba pang mga opsyon at posibilidad, ngunit ito ay nagsisilbing isang mabilis na overview kung kailangan mo ng mabilis na pagsusuri kapag hindi mo pa nagamit ang framework sa isang panahon.

Ibahagi sa BlueskyIbahagi sa FacebookIbahagi sa LinkedInIbahagi sa TumblrIbahagi sa XIbahagi sa LinkedInI-pin sa Pinterest

Mikkel Christensen

Tungkol sa May-akda

Mikkel Christensen
Si Mikkel ang lumikha at may-ari ng miklix.com. Siya ay may higit sa 20 taong karanasan bilang isang propesyonal na computer programmer/software developer at kasalukuyang nagtatrabaho ng full-time para sa isang malaking European IT corporation. Kapag hindi nagba-blog, ginugugol niya ang kanyang bakanteng oras sa isang malawak na hanay ng mga interes, libangan, at aktibidad, na maaaring sa ilang lawak ay makikita sa iba't ibang mga paksang sakop sa website na ito.