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.
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
- MyProcessor_Sales
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:
{
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.
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:
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:
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.