Miklix

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

Kushicilelwe: 16 Pébruari 2025 jam 00.30.13 UTC

Lesi sihloko sichaza indlela yokusebenzisa uhlaka lwe-SysExtension oluncane olwaziwayo ku-Dynamics AX 2012 kanye ne-Dynamics 365 ye-Operations ukuze i-instantiate amakilasi amancane ngokusekelwe emihlobisweni yesici, okuvumela umklamo osheshayo kalula we-processing class hierarchy.


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 sithuba lusekelwe ku-Dynamics AX 2012 R3. Kungenzeka noma kungabi semthethweni kwezinye izinguqulo. (Ukubuyekeza: Ngingaqinisekisa ukuthi ulwazi olukulesi sihloko nalo lusebenza ku-Dynamics 365 ye-Operations)

Lapho usebenzisa amakilasi okucubungula ku-Dynamics AX, uvame ukubhekana nokudala i-class hierarchy lapho i-subclass ngayinye ihambelana nenani le-enum noma inenye i-data coupling. Umklamo we-classic kufanele-ke ube nendlela yokwakha ekilasini elikhulu, eline-switch enquma ukuthi yiliphi ikilasi okufanele li-instantiate ngokusekelwe ekufakeni.

Lokhu kusebenza kahle isimiso, kodwa uma une okokufaka eziningi ezahlukene kungenzeka (izakhi eziningi in an enum noma mhlawumbe okokufaka inhlanganisela amanani eziningana ezahlukene), kungaba isidina futhi iphutha-ukuthambekela ukugcina futhi umklamo njalo has ukungalungi ukuthi uzodinga ukuguqula wathi ukwakha indlela uma wake ukwengeza subclass entsha noma wenze izinguquko lapho subclass kufanele isetshenziswe esekelwe lapho okokufaka.

Ngenhlanhla, kukhona okuhle kakhulu, kodwa ngeshwa futhi kancane kakhulu eyaziwa, indlela yokwenza lokhu, okungukuthi ngokusetshenziswa kohlaka lwe-SysExtension.

Lolu hlaka lusebenzisa izimfanelo ongazisebenzisa ukuhlobisa amakilasi akho amancane ukwenza uhlelo lukwazi ukuthola ukuthi yiliphi ikilasi elincane okufanele lisetshenziselwe ukuphatha lokho. Usazodinga indlela yokwakha, kodwa uma kwenziwe kahle, awusoze kwadingeka uyiguqule lapho ungeza amakilasi amasha amancane.

Ake sibheke isibonelo sokucabanga bese sithi uzosebenzisa i-hierarchy eyenza uhlobo oluthile lokucubungula ngokusekelwe etafuleni le-InventTrans. Yikuphi ukucubungula okufanele ukwenze kuncike ku-StatusReceipt ne-StatusIssue yamarekhodi, kanye nokuthi amarekhodi ahlobene ne-SalesLine, i-PurchLine noma cha. Vele manje, ubheka inhlanganisela eminingi ehlukene.

Ake sithi-ke uyazi ukuthi okwamanje udinga kuphela ukuphatha idlanzana lezinhlanganisela, kodwa futhi uyazi ukuthi uzocelwa ukuba ukwazi ukuphatha inhlanganisela eminingi ngokuhamba kwesikhathi.

Ake sigcine silula futhi sithi okwamanje udinga kuphela ukuphatha amarekhodi ahlobene ne-SalesLine nge-StatusIssue ye-ReservPhysical noma i-ReservOrdered, zonke ezinye izinhlanganisela zingashaywa indiva okwamanje, kodwa njengoba wazi ukuthi kuzodingeka uziphathe kamuva, uzofuna ukuklama ikhodi yakho ngendlela eyenza kube lula ukuzenzisa.

Abaphathi bakho bangabukeka into efana nalena okwamanje:

  • MyProcessor
    • MyProcessor_Sales
      • MyProcessor_Sales_ReservOrdered
      • MyProcessor_Sales_ReservPhysical

Manje, ungakwazi kalula ukusebenzisa indlela ekilasini super ukuthi instantiates a subclass esekelwe ModuleInventPurchSales kanye StatusIssue enum. Kodwa-ke uzodinga ukuguqula i-super class njalo lapho ungeza ikilasi elincane, futhi lokho akuwona ngempela umqondo wefa ezinhlelweni eziqondiswe entweni. Ngemuva kwakho konke, awudingi ukuguqula i-RunBaseBatch noma i-SysOperationServiceBase njalo uma ungeza umsebenzi omusha we-batch.

Esikhundleni salokho, ungasebenzisa uhlaka lwe-SysExtension. Lokho kuzodinga ukuthi ungeze elinye ikilasi, elidinga ukunweba i-SysAttribute. Leli klasi lizosetshenziswa njengesici ongahlobisa ngazo amakilasi akho okucubungula.

Leli klasi lifana kakhulu nendlela ozokwenza ngayo ikilasi lenkontileka yedatha yokuqaliswa kwe-SysOperation, ngokuthi izoba namanye amalungu wedatha nezindlela ze-parm zokuthola nokubeka lawo magugu.

Esimweni sethu, i-ClassDeclaration ingabukeka into efana nale:

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

Udinga ukwenza indlela entsha () yokushesha wonke amalungu wedatha. Uma ufisa unganikeza ezinye noma zonke zazo amagugu okuzenzakalelayo, kodwa angizange ngikwenze 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 bashiye labo lapha njengoba nginesiqiniseko sokuthi uyazi ukuthi ungakwenza kanjani lokho - ngaphandle kwalokho, ake sikubheke njengokuzivocavoca ;-)

Manje ungasebenzisa ikilasi lakho lesici ukuhlobisa ngamunye wamakilasi akho okucubungula. 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
{
}

Ungakwazi yebo ukubiza amakilasi akho nganoma iyiphi indlela oyifunayo, ingxenye ebalulekile lapha ukuthi uhlobisa amakilasi akho ngezimfanelo ezihambelana nokuthi hlobo luni lokucubungula abakwenzayo. (Kodwa khumbula ukuthi kukhona izingqungquthela zokuqamba amagama abaphathi beklasi ku-Dynamics AX futhi kuhlale kungumqondo omuhle ukulandela lezo, uma kungenzeka).

Manje njengoba usuhlobise amakilasi akho ukuhlonza ukuthi ngamunye wabo wenza uhlobo luni lokucubungula, ungasebenzisa uhlaka lwe-SysExtension ukuze u-instantiate izinto zamakilasi amancane njengoba kudingeka.

Ekilasini lakho elikhulu (MyProcessor), ungangeza indlela yokwakha kanje:

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 ngempela into (ukuxolela i-pun) yalokhu okuthunyelwe konke - yindlela ye-getClassFromSysAttribute () ekilasini le-SysExtensionAppClassFactory. Okwenziwa yile ndlela ukuthi yamukela igama le-super class ye-hierarchy (futhi leli klasi elikhulu alidingi ukuba phezulu kwabaphathi; kusho nje ukuthi amakilasi kuphela anweba leli klasi azofaneleka) kanye nento yesici.

Bese ibuyisela into yeklasi eyandisa i-super class ecacisiwe futhi ihlotshiswe ngesici esihambisanayo.

Ngokusobala ungangeza ukuqinisekiswa okwengeziwe noma ingqondo kwindlela yokwakha njengoba ufisa, kodwa ukuthatha okubalulekile lapha ukuthi uma ususetshenzisiwe, akufanele neze uguqule le ndlela futhi. Ungangeza amakilasi amancane ku-hierarchy futhi inqobo nje uma uqinisekisa ukuthi uwahlobisa ngendlela efanele, indlela yokwakha izowathola yize ayengekho lapho ibhaliwe.

Kuthiwani ngokusebenza? Ngobuqotho angizange ngizame ukuyilinganisa, kodwa umuzwa wami wamathumbu ukuthi lokhu cishe kwenza okubi kakhulu kunomklamo wesitatimende sokushintsha se-classic. Kodwa-ke, uma ucabangela ukuthi kude kakhulu izindaba zokusebenza ku-Dynamics AX zibangelwa ukufinyelela kwe-database, ngeke ngikhathazeke kakhulu ngakho.

Yiqiniso, uma usebenzisa okuthile okuzodinga ukuthi izinkulungwane zezinto zidalwe ngokushesha, ungase ufune ukuphenya ngokwengeziwe, kodwa ezimweni zakudala lapho uvele u-instantiate into eyodwa ukwenza ukucubungula isikhathi eside, ngiyathandabuza ukuthi kuzobaluleka. Futhi, uma ucabangela ithiphu yami yokuxazulula izinkinga (isigaba esilandelayo), kubonakala sengathi uhlaka lwe-SysExtension luncike ku-caching, ngakho-ke ohlelweni lokugijima ngiyathandabuza ukuthi lune-hit ebalulekile yokusebenza. Ukuxazulula izinkinga: Uma indlela yokwakha ingawatholi amakilasi akho amancane yize uqinisekile ukuthi ahlotshiswe kahle, kungase kube yinkinga ye-caching. Zama ukususa ama-caches kokubili iklayenti neseva. Akufanele kudingeke ukuthi empeleni uqale kabusha i-AOS, kodwa kungase kube yinto yokugcina.

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

Mikkel Bang Christensen

Mayelana Nombhali

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