Miklix

Enumin elementtien toistaminen X++-koodista Dynamics AX 2012:ssa

Julkaistu: 15. helmikuuta 2025 klo 23.10.34 UTC

Tässä artikkelissa kerrotaan, miten perusenum-elementit luetellaan ja silmukataan Dynamics AX 2012:ssa, mukaan lukien X++-koodiesimerkki.


Tämä sivu on käännetty koneellisesti englannista, jotta se olisi mahdollisimman monen ihmisen saatavilla. Valitettavasti konekääntäminen ei ole vielä täydellistä tekniikkaa, joten virheitä voi esiintyä. Voit halutessasi tarkastella alkuperäistä englanninkielistä versiota täällä:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

Tämän viestin tiedot perustuvat Dynamics AX 2012 R3:een. Se voi tai ei välttämättä ole voimassa muille versioille.

Olin äskettäin luomassa lomaketta, jonka piti näyttää arvo jokaiselle luettelon elementille. Sen sijaan, että olisin luonut kentät manuaalisesti (ja täytyisi sitten ylläpitää lomaketta, jos enumia koskaan muutetaan), päätin toteuttaa sen dynaamisesti, jotta se lisää kentät suunnitteluun automaattisesti ajon aikana.

Huomasin kuitenkin pian, että itse asiassa arvojen iterointi enumissa, vaikka se onkin tarpeeksi helppoa, kun sen osaa, on hieman hämmentävää.

Sinun täytyy ilmeisesti aloittaa DictEnum-luokasta. Kuten näette, tällä luokalla on useita menetelmiä tietojen, kuten nimen ja otsikon, saamiseksi sekä indeksistä että arvosta.

Ero indeksin ja arvon välillä on se, että indeksi on elementin numero enumissa, jos enumin elementit numeroidaan peräkkäin nollasta alkaen, kun taas arvo on elementin todellinen "arvo"-ominaisuus. Koska useimpien enumeiden arvot on numeroitu peräkkäin nollasta alkaen, elementin indeksi ja arvo ovat usein samat, mutta eivät aina .

Mutta mistä tiedät, mitkä arvot enumilla on? Tässä menee sekaisin. DictEnum-luokassa on menetelmä nimeltä Values(). Saatat odottaa tämän menetelmän palauttavan luettelon enumin arvoista, mutta se olisi ilmeisesti liian helppoa, joten sen sijaan se palauttaa enumin sisältämien arvojen määrän . Arvojen määrällä ei kuitenkaan ole mitään tekemistä todellisten arvojen kanssa, joten sinun on käytettävä tätä numeroa perustana kutsuttaessa indeksipohjaisia ​​menetelmiä, ei arvopohjaisia.

Jos he vain olisivat nimenneet tämän menetelmän nimeksi indexes(), se olisi ollut vähemmän hämmentävää ;-)

Muista myös, että enum-arvot (ja ilmeisesti nämä "indeksit") alkavat 0:sta, toisin kuin X++:n matriisi- ja säilöindeksit, jotka alkavat numerosta 1, joten enum-elementtien silmukaksi voit tehdä jotain näin:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

Tämä tulostaa tietolokiin luettelon jokaisen elementin symbolin ja tunnisteen.

Jaa BlueskyssäJaa FacebookissaJaa LinkedInissäJaa TumblrissaJaa X:ssäJaa LinkedInissäPin Pinterestissä

Mikkel Bang Christensen

Kirjoittajasta

Mikkel Bang Christensen
Mikkel on miklix.com-sivuston luoja ja omistaja. Hänellä on yli 20 vuoden kokemus ammattimaisena tietokoneohjelmoijana/ohjelmistokehittäjänä, ja tällä hetkellä hän työskentelee kokopäiväisesti suuressa eurooppalaisessa IT-yrityksessä. Kun hän ei ole bloggaamassa, hän käyttää vapaa-aikaansa monenlaisiin kiinnostuksen kohteisiin, harrastuksiin ja aktiviteetteihin, mikä saattaa jossain määrin heijastua tällä verkkosivustolla käsiteltävien aiheiden moninaisuuteen.