Miklix

Ukusebenzisa Uhlaka lwe-SysExtension ukuthola ukuthi iyiphi i-Subclass eya ku-Instantiate ku-Dynamics AX 2012

Kushicilelwe: Februwari 16, 2025 00:30:13 UTC
Igcine ukubuyekezwa: Januwari 12, 2026 08:43:51 UTC

Lesi sihloko sichaza indlela yokusebenzisa uhlaka lwe-SysExtension olungaziwa kakhulu ku-Dynamics AX 2012 kanye ne-Dynamics 365 lwe-Operations ukuze kuqaliswe amakilasi angaphansi ngokusekelwe ekuhlobiseni izimfanelo, okuvumela ukwakheka okulula kokuhlelwa kwesigaba sokucubungula.


Leli khasi lihunyushwe ngomshini lisuka esiNgisini ukuze lenze lifinyeleleke kubantu abaningi ngangokunokwenzeka. Ngeshwa, ukuhumusha ngomshini akukabi ubuchwepheshe obuphelele, ngakho-ke amaphutha angenzeka. Uma uthanda, ungabuka inguqulo yokuqala yesiNgisi lapha:

Using the SysExtension Framework to Find Out Which Subclass to Instantiate in Dynamics AX 2012

Ulwazi olukulesi sihloko lusekelwe ku-Dynamics AX 2012 R3. Lungase lusebenze noma lungasebenzeli ezinye izinguqulo. (Isibuyekezo: Ngingaqinisekisa ukuthi ulwazi olukulesi sihloko luphinde lusebenzele i-Dynamics 365 ye-Operations)

Uma usebenzisa amakilasi okucubungula ku-Dynamics AX, uvame ukubhekana nokudala uhlu lwezigaba lapho isigaba ngasinye sihambisana khona nenani le-enum noma sinokunye ukuhlanganiswa kwedatha. Umklamo wakudala ube nendlela yokwakha ekilasini elikhulu, elineswishi esinquma ukuthi yiliphi ikilasi okufanele liqaliswe ngokusekelwe kokufakwayo.

Lokhu kusebenza kahle ngokomthetho, kodwa uma unezinhlobo eziningi ezahlukene zokufaka (izinto eziningi ku-enum noma mhlawumbe okokufaka kuyinhlanganisela yamanani amaningana ahlukene), kungaba yinto ekhathazayo futhi evame ukuba namaphutha ukuyigcina futhi umklamo uhlala unobunzima bokuthi uzodinga ukuguqula indlela yokwakha uma ungeza i-subclass entsha noma wenze izinguquko ku-subclass okufanele isetshenziswe ngokusekelwe ku-input.

Ngenhlanhla, kukhona indlela enhle kakhulu, kodwa ngeshwa futhi engaziwa kakhulu, yokwenza lokhu, okungukuthi ngokusebenzisa uhlaka lwe-SysExtension.

Lolu hlaka lusebenzisa izimfanelo ongazisebenzisa ukuhlobisa amakilasi akho amancane ukuze uhlelo lukwazi ukuthola ukuthi yiliphi ikilasi elincane okufanele lisetshenziswe ekusingatheni ini. Usazodinga indlela yokwakha, kodwa uma yenziwe kahle, ngeke kudingeke uyishintshe lapho ungeza amakilasi amasha amancane.

Ake sibheke isibonelo esingokomfanekiso bese sithi uzosebenzisa uhlu lwemisebenzi olusebenzisa uhlobo oluthile lokucubungula ngokusekelwe kuthebula le-InventTrans. Ukuthi yikuphi ukucubungula okufanele kwenziwe kuncike ku-StatusReceipt kanye ne-StatusIssue yamarekhodi, kanye nokuthi amarekhodi ahlobene ne-SalesLine, i-PurchLine noma cha. Manje usubheke izinhlanganisela eziningi ezahlukene.

Ake sithi uyazi ukuthi okwamanje udinga ukusingatha izinhlanganisela ezimbalwa kuphela, kodwa futhi uyazi ukuthi uzocelwa ukuthi ukwazi ukusingatha izinhlanganisela eziningi ngokuhamba kwesikhathi.

Masikwenze kube lula futhi sithi okwamanje udinga kuphela ukuphatha amarekhodi ahlobene ne-SalesLine nge-StatusIssue ye-ReservPhysical noma i-ReservOrdered, zonke ezinye izinhlanganisela zinganakwa okwamanje, kodwa njengoba wazi ukuthi kuzodingeka uziphathe kamuva, uzofuna ukuklama ikhodi yakho ngendlela eyenza ikwazi ukunwebeka kalula.

Uhlu lwakho lwabaphathi lungabukeka kanje okwamanje:

  • I-MyProcessor_Sales_MyProcessor_Sales_ReservI-Ordered_MyProcessor_Sales_ReservI-Physical

Manje, ungasebenzisa kalula indlela ekilasini elikhulu esungula iklasi elincane ngokusekelwe ku-ModuleInventPurchSales kanye ne-StatusIssue enum. Kodwa kuzodingeka ushintshe iklasi elikhulu njalo uma ungeza iklasi elincane, futhi lokho akuyona ngempela umqondo wefa ohlelweni oluqondiswe ezintweni. Phela, awudingi ukushintsha i-RunBaseBatch noma i-SysOperationServiceBase njalo uma ungeza umsebenzi omusha we-batch.

Kunalokho, ungasebenzisa uhlaka lwe-SysExtension. Lokho kuzodinga ukuthi wengeze elinye ikilasi, elidinga ukwandisa i-SysAttribute. Leli kilasi lizosetshenziswa njengesici ongahlobisa ngaso amakilasi akho okucubungula.

Leli klasi lifana kakhulu nendlela ongenza ngayo ikilasi lenkontileka yedatha lokuqaliswa kwe-SysOperation, ngoba lizoba namalungu edatha athile kanye nezindlela ze-parm zokuthola nokusetha lawo manani.

Esimweni sethu, i-ClassDeclaration ingase ibukeke kanje:

class MyProcessorSystemAttribute extends SysAttribute
{
    ModuleInventPurchSales  module;
    StatusIssue             statusIssue;
    StatusReceipt           statusReceipt
}

Udinga ukwenza indlela entsha () yokufaka wonke amalungu edatha ku-instatiating. Uma ufisa unganikeza amanye noma wonke amanani azenzakalelayo, kodwa angikakwenzi lokho.

public void new(ModuleInventPurchSales  _module,
                StatusIssue             _statusIssue,
                StatusReceipt           _statusReceipt)
{
    ;

    super();

    module          = _module;
    statusIssue     = _statusIssue;
    statusReceipt   = _statusReceipt;
}

Futhi kufanele futhi usebenzise indlela ye-parm yelungu ngalinye ledatha, kodwa ngizishiyile lapha njengoba ngiqinisekile ukuthi uyazi ukuthi ungakwenza kanjani lokho - ngaphandle kwalokho, ake sikubheke njengokuzivocavoca ;-)

Manje ungasebenzisa ikilasi lakho lezimfanelo ukuhlobisa iklasi ngalinye lokucubungula kwakho. Isibonelo, izimemezelo zekilasi zingabukeka kanje:

[MyProcessorSystemAttribute(ModuleInventPurchSales::Sales,
                            StatusIssue::None,
                            StatusReceipt::None)]
class MyProcessor_Sales extends MyProcessor
{
}

[MyProcessorSystemAttribute(ModuleInventPurchSales::Sales,
                            StatusIssue::ReservOrdered,
                            StatusReceipt::None)]
class MyProcessor_Sales_ReservOrdered extends MyProcessor_Sales
{
}

[MyProcessorSystemAttribute(ModuleInventPurchSales::Sales,
                            StatusIssue::ReservPhysical,
                            StatusReceipt::None)]
class MyProcessor_Sales_ReservPhysical extends MyProcessor_Sales
{
}

Ungaqamba amakilasi akho ngendlela oyifunayo, ingxenye ebalulekile lapha ukuthi uhlobise amakilasi akho ngezimfanelo ezihambisana nohlobo lokucubungula akwenzayo. (Kodwa khumbula ukuthi kunezindlela zokuqamba amagama zezigaba zamakilasi ku-Dynamics AX futhi kuhlale kungumqondo omuhle ukulandela lezo, uma kungenzeka).

Manje njengoba usuhlobisile amakilasi akho ukuze ubone ukuthi hlobo luni lokucubungula olusetshenziswa yilowo nalowo, ungasebenzisa uhlaka lwe-SysExtension ukuze uqinise izinto zamakilasi amancane njengoba kudingeka.

Ekilasini lakho elikhulu (i-MyProcessor), ungangeza indlela yokwakha efana nale:

public static MyProcessor construct(ModuleInventPurchSales _module,
StatusIssue _statusIssue,
StatusReceipt _statusReceipt)
{
    MyProcessor                 ret;
    MyProcessorSystemAttribute  attribute;
    ;

    attribute = new MyProcessorSystemAttribute( _module,
                                                _statusIssue,
                                                _statusReceipt);

    ret = SysExtensionAppClassFactory::getClassFromSysAttribute(classStr(MyProcessor), attribute);

    if (!ret)
    {
        //  no class found
        //  here you could throw an error, instantiate a default
        //  processor instead, or just do nothing, up to you
    }

    return ret;
}

Ingxenye ethakazelisayo ngempela - futhi empeleni into (ngiyaxolisa nge-pun) yalo lonke leli posi - yindlela ye-getClassFromSysAttribute() ekilasini le-SysExtensionAppClassFactory. Okwenziwa yile ndlela ukuthi yamukela igama lesigaba esiphezulu sesigaba (futhi lesi sigaba esiphezulu akudingeki sibe phezulu kwesigaba; kusho ukuthi amakilasi anweba lesi sigaba kuphela azofaneleka) kanye nento yesici.

Ibe isibuyisela into yekilasi eyandisa i-super class ecacisiwe futhi ihlotshiswe ngesici esihambisanayo.

Ngokusobala ungangeza ukuqinisekiswa okwengeziwe noma i-logic endleleni yokwakha ngendlela ofisa ngayo, kodwa okubalulekile lapha ukuthi uma sekuqaliswe, akufanele uphinde ushintshe le ndlela. Ungangeza amakilasi angaphansi ku-hierarchy futhi uma nje uqinisekisa ukuthi uwahlobisa ngendlela efanele, indlela yokwakha izowathola yize ayengekho ngesikhathi ebhalwa.

Kuthiwani ngokusebenza? Empeleni angikaze ngizame ukukulinganisa, kodwa umuzwa wami wangaphakathi ukuthi lokhu kungenzeka ukuthi kusebenza kabi kunomklamo wesitatimende sokushintsha esijwayelekile. Kodwa-ke, uma sibheka ukuthi izinkinga eziningi zokusebenza ku-Dynamics AX zibangelwa ukufinyelela kudathabheyisi, angikhathazeki kakhulu ngakho.

Vele, uma usebenzisa into ezodinga izinkulungwane zezinto ukuthi zidalwe ngokushesha, ungase ufune ukuphenya kabanzi, kodwa ezimweni zakudala lapho umane ufaka into eyodwa ukuze yenze ukucubungula okude, ngiyangabaza ukuthi kuzobaluleka. Futhi, uma ngicabanga ngecebiso lami lokuxazulula izinkinga (isigaba esilandelayo), kubonakala sengathi uhlaka lwe-SysExtension luthembele ekugcinweni kwesikhashana, ngakho ohlelweni olusebenzayo ngiyangabaza ukuthi lunethonya elikhulu lokusebenza.

Ukuxazulula Izinkinga: Uma indlela yokwakha ingawatholi ama-sub class akho noma ngabe uqinisekile ukuthi ahlotshiswe kahle, kungaba yinkinga yokugcina isikhashana. Zama ukususa ama-cache kuklayenti nakuseva. Akufanele kudingeke ukuthi uqale kabusha i-AOS, kodwa kungaba yindlela yokugcina.

Ukufunda Okuqhubekayo

Uma ukujabulele lokhu okuthunyelwe, ungaphinda uthande lezi ziphakamiso:


Yabelana ku-BlueskyYabelana ku-FacebookYabelana ku-LinkedInYabelana ku-TumblrYabelana ku-XYabelana ku-LinkedInPhina ku-Pinterest

Mikkel Christensen

Mayelana Nombhali

Mikkel Christensen
U-Mikkel ungumdali nomnikazi we-miklix.com. Unesipiliyoni seminyaka engaphezu kwengu-20 njengochwepheshe bezinhlelo zekhompyutha/unjiniyela wesoftware futhi njengamanje uqashwe ngokugcwele enkampanini enkulu ye-IT yaseYurophu. Lapho engabhali, uchitha isikhathi sakhe sokuphumula ezintweni eziningi azithandayo, azilibazisa, nemisebenzi, okungenzeka ngokwezinga elithile ibonakale ezihlokweni ezihlukahlukene ezitholakala kule webhusayithi.