Jinsi ya Kupima Juu ya Vipengele vya Enum kutoka kwa X++ Code katika Dynamics AX 2012
Iliyochapishwa: 15 Februari 2025, 23:11:12 UTC
Makala hii inaelezea jinsi ya kuhesabu na kitanzi juu ya vipengele vya enum ya msingi katika Dynamics AX 2012, ikiwa ni pamoja na mfano wa nambari ya X++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Habari katika chapisho hili inategemea Dynamics AX 2012 R3. Inaweza au haiwezi kuwa halali kwa matoleo mengine.
Hivi karibuni nilikuwa nikiunda fomu ambayo ilihitaji kuonyesha thamani kwa kila kipengele katika enum. Badala ya kuunda mashamba kwa mikono (na kisha kuhitaji kudumisha fomu ikiwa enum imebadilishwa), niliamua kuitekeleza kwa nguvu ili iweze kuongeza moja kwa moja mashamba kwenye muundo wakati wa kukimbia.
Hata hivyo, hivi karibuni niligundua kuwa kwa kweli inatia juu ya maadili katika enum, wakati rahisi kutosha mara tu unapojua jinsi, inachanganya kidogo.
Kwa kweli unahitaji kuanza na darasa la DictEnum. Kama utakavyoona, darasa hili lina njia kadhaa za kupata habari kama vile jina na lebo kutoka kwa faharisi na thamani.
Tofauti kati ya index na thamani ni kwamba index ni namba ya kipengele katika enum, ikiwa vipengele vya enum vilihesabiwa kwa mtiririko kuanzia sifuri, wakati thamani ni mali halisi ya "thamani" ya kipengele. Kwa kuwa enums nyingi zina maadili yaliyohesabiwa kwa mtiririko kutoka 0, index na thamani ya kipengele mara nyingi itakuwa sawa, lakini hakika sio kila wakati.
Lakini unajuaje ni maadili gani ambayo enum ina? Hii ndio ambapo inakuwa ya kutatanisha. Darasa la DictEnum lina njia inayoitwa maadili(). Unaweza kutarajia njia hii kurudisha orodha ya maadili ya enum, lakini hiyo itakuwa rahisi sana, kwa hivyo badala yake inarudisha idadi ya maadili ambayo enum ina. Hata hivyo, idadi ya maadili haina uhusiano wowote na maadili halisi, kwa hivyo unahitaji kutumia nambari hii kama msingi wa kupiga simu kwa njia za msingi za index, sio zile zinazotegemea thamani.
Kama tu walikuwa wametaja njia hii indexes() badala yake, ingekuwa chini ya utata ;-)
Pia kumbuka kwamba maadili ya enum (na inaonekana "indexes") huanza saa 0, tofauti na safu na faharasa za kontena katika X++, ambazo huanza saa 1, kwa hivyo kwa kitanzi juu ya vitu kwenye enum unaweza kufanya kitu kama hiki:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Hii itatoa ishara na lebo ya kila kipengele kwenye enum kwa infolog.