Miklix

Amfani da Tsarin SysExtension don Gano Wane Subclass zuwa Instantiate a Dynamics AX 2012

Buga: 16 Faburairu, 2025 da 00:26:20 UTC

Wannan talifin ya bayyana yadda za a yi amfani da tsarin SysExtension da ba a sani sosai ba a Dynamics AX 2012 da Dynamics 365 don Aiki don a yi aikin nan da nan bisa ƙauna ta halaye, kuma hakan zai sa a iya ƙera tsarin aikin da ake yi da sauƙi.


An fassara wannan shafin na'ura daga Turanci don a sami damar isa ga mutane da yawa gwargwadon iko. Abin takaici, fassarar inji ba ta zama cikakkiyar fasaha ba, don haka kurakurai na iya faruwa. Idan kuna so, kuna iya duba ainihin sigar Turanci anan:

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

Bayanin da ke cikin wannan post ya dogara ne akan Dynamics AX 2012 R3. Zai iya zama daidai ko kuma ba zai yiwu ba ga wasu juyin. (Update: Zan iya tabbatar da cewa bayanin da ke cikin wannan labarin ma yana da amfani ga Dynamics 365 for Operations)

Sa'ad da kake yin amfani da aji na yin aiki a Dynamics AX, sau da yawa kana fuskantar halittar tsarin rukuni da kowace subclass take daidaita da tamani na enum ko kuma tana da wasu ƙarin bayani. Wani tsarin na zamani shi ne a yi amfani da hanyar gina a cikin babban ajin, wanda yake da canji da ke tsai da shawarar aji da za a yi amfani da shi nan da nan bisa abin da aka shigar.

Wannan yana aiki da kyau a ƙa'ida, amma idan kana da abubuwa dabam dabam da za su iya faruwa (abubuwa da yawa cikin enum ko kuma wataƙila shigar da haɗin ƙa'idodi dabam dabam), zai iya zama mai gajiya da kuskure don kula da kuma ƙera koyaushe yana da lahani da za ka bukaci ka canja hanyar gina idan ka taɓa ƙara sabon subclass ko kuma ka yi canje-canje da ya kamata a yi amfani da subclass bisa wane shigar.

Abin farin ciki, akwai hanya mai kyau, amma abin baƙin ciki, hanyar yin wannan, wato ta wajen yin amfani da tsarin SysExtension.

Wannan tsarin yana amfani da halaye da za ka iya amfani da su don ka ƙawanta aji na ƙarƙashin aikinka don ka sa na'urar ta iya ganin waɗanne abubuwa ne ya kamata a yi amfani da su wajen kula da abin da. Har ila za ka bukaci hanyar gina, amma idan aka yi daidai, ba za ka taɓa bukatar ka canja ta ba sa'ad da ka ƙara sababbin ayoyi.

Bari mu duba misali na ƙaryace-ƙaryace kuma mu ce za ka yi amfani da tsarin da ke yin wani irin aiki bisa teburin InventTrans. Wane aiki ne za a yi ya dangana ga StatusReceipt da StatusIssue na rubutun, da kuma ko rubutun suna da alaƙa da SalesLine, PurchLine ko kuma babu. Yanzu, kana duba abubuwa dabam dabam.

Bari mu ce ka san cewa yanzu kana bukatar ka yi amfani da kaɗan kawai na haɗin, amma ka kuma san cewa za a gaya maka ka iya yin ƙarin haɗin kai da shigewar lokaci.

Bari mu riƙe shi da sauƙi kuma mu ce yanzu kana bukatar ka yi amfani da rubutun da suka shafi SalesLine da StatusIssue na ReservPhysical ko ReservOrdered, dukan sauran haɗin za a iya ƙyale su yanzu, amma tun da ka san cewa za ka yi amfani da su daga baya, za ka so ka ƙera kodinka cikin hanyar da za ta sa a iya ƙara.

Tsarinka zai iya kasance kamar wannan yanzu:

  • My Ma'ana
    • MyProcessor_Sales
      • MyProcessor_Sales_ReservOrdered
      • MyProcessor_Sales_ReservPhysical

Yanzu, za ka iya yin amfani da hanya a cikin babban aji da ke daidaita subclass da ke bisa ModuleInventPurchSales da statusIssue enum. Amma za ka bukaci ka canja aji mai girma a kowane lokaci da ka ƙara aji na sub, kuma wannan ba ra'ayin gādo ba ne a tsarin abubuwa. Bayan haka, ba ka bukatar ka gyara RunBaseBatch ko SysOperationOperBase a kowane lokaci da ka ƙara sabon aiki na ɗan lokaci.

Maimakon haka, za ka iya yin amfani da tsarin SysExtension. Wannan zai bukaci ka ƙara wani aji, wanda yake bukatar ya faɗaɗa SysAttribute. Za a yi amfani da wannan aji a matsayin halin da za ka iya ƙawanta aji na yin aiki da shi.

Wannan aji yana kama da yadda za ka yi aji na ƙarin bayani don a yi amfani da SysOperation, domin zai kasance da wasu ' yan bayani da hanyoyin parm don samun da kuma kafa waɗannan ƙa'idodin.

A cikin yanayinmu, classdeclaration na iya kama da wannan:

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

Kana bukatar ka yi sabon hanya don ka yi amfani da dukan waɗanda suke cikin bayani nan da nan. Idan kana son ka iya ba wasu ko dukansu ƙa'idodin da ba su dace ba, amma ban yi hakan ba.

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

    super();

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

Kuma ya kamata ka kuma yi amfani da hanyar parm ga kowane ɗan bayani, amma na ƙi waɗanda ke nan domin na tabbata ka san yadda za ka yi hakan - idan ba haka ba, bari mu ɗauke shi aikin ;-)

Yanzu za ka iya yin amfani da aji na halinka don ka ƙawanta kowace aji na yin aiki. Alal misali, za a iya yin irin wannan bayanin:

[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
{
}

Hakika za ka iya ambata ajinka yadda kake so, sashe mai muhimmanci a nan shi ne ka ƙawanta ajinka da halaye da suka yi daidai da irin aikin da suke yi. (Amma ka tuna cewa akwai taron sunaye don tsarin rukuni a Dynamics AX kuma koyaushe shawara ce mai kyau ka bi waɗannan, Idan zai yiwu).

Yanzu da ka ƙawanta ajinka don ka san irin aikin da kowannensu yake yi, za ka iya yin amfani da tsarin SysExtension don ka yi amfani da abubuwa na ƙarƙashin aji nan da nan yadda ake bukata.

A cikin babban aji (My Amirka), za ka iya ƙara hanyar gina kamar wannan:

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;
}

Sashe mai ban sha'awa - da gaske abu (ka gafarta wa ƙarya) na dukan wannan saƙon - shi ne hanyar getClass FromsysAttribute () a aji na SysExtensionAppClassFactory. Abin da wannan hanyar take yi shi ne cewa tana karɓan sunan babbar rukuni na tsarin (wannan babban ajin ba ya bukatar ya kasance a sama na tsarin; yana nufin cewa aji kawai da ke faɗaɗa wannan ajin ne kawai za su cancanci) da kuma wani abu na halaye.

Bayan haka, sai ya mai da wani abu na ajin da ya faɗaɗa ajin da aka ƙayyade kuma aka ƙawanta shi da halin da ya dace.

Za ka iya ƙara ƙarin tabbaci ko kuma ƙarin bayani ga hanyar gina yadda kake so, amma abin da ya fi muhimmanci a nan shi ne da zarar an yi amfani da shi, bai kamata ka sake canja wannan hanyar ba. Za ka iya ƙara aji na ƙarƙashin

Yadda ake yin aiki kuma fa? Hakika, ban yi ƙoƙari na gwada shi ba, amma ra'ayina shi ne cewa wataƙila wannan yana yin aiki mafi muni fiye da tsarin canji na zamani. Duk da haka, idan na yi la'akari da cewa yawancin matsaloli na aiki a Dynamics AX sun kasance da sakamakon shigar da database, ba zan damu sosai game da shi ba.

Hakika, idan kana yin wani abu da zai bukaci a halicci dubban abubuwa da sauri, za ka iya so ka ƙara bincika, amma a yanayi na musamman inda ka yi wani abu ɗaya nan da nan don ka yi wani aiki mai tsawo, ina shakka zai kasance da muhimmanci. Ƙari ga haka, idan na yi la'akari da shawarata ta magance matsaloli (sakin layi na gaba), kamar tsari na SysExtension yana dangana ga yin ƙwaƙwalwa, saboda haka, a tsarin gudu na shakka cewa yana da amfani mai girma. Mai da matsala: Idan hanyar gina ba ta sami ƙaramin ajinka ko da ka tabbata cewa an ƙawanta su daidai ba, wataƙila matsala ce mai wuya. Ka yi ƙoƙari ka share kayan aiki a kan mai amfani da shi da kuma server. Bai kamata ya kasance da muhimmanci a sake soma AOS ba, amma zai iya zama hanyar ƙarshe.

Raba kan BlueskyRaba akan FacebookRaba kan LinkedInRaba akan TumblrRaba akan XRaba kan LinkedInFitar akan Pinterest

Mikkel Bang Christensen

Game da Marubuci

Mikkel Bang Christensen
Mikel shine mahalicci kuma mai miklix.com. Yana da fiye da shekaru 20 gwaninta a matsayin ƙwararren mai tsara shirye-shiryen kwamfuta / mai haɓaka software kuma a halin yanzu yana aiki cikakken lokaci don babban kamfani na IT na Turai. Lokacin da ba ya yin rubutun ra'ayin kanka a yanar gizo ba, yana ciyar da lokacinsa a kan ɗimbin abubuwan bukatu, sha'awa, da ayyuka, waɗanda har zuwa wani lokaci za a iya nunawa a cikin batutuwa iri-iri da aka rufe akan wannan rukunin yanar gizon.