Miklix

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

Julkaistu: 15. helmikuuta 2025 klo 23.10.34 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.41.56 UTC

Tässä artikkelissa selitetään, miten perusluettelon elementit luetteloidaan ja käydään läpi 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 -versioon. Ne eivät välttämättä päde muihin versioihin.

Olin hiljattain luomassa lomaketta, jonka piti näyttää arvo jokaiselle enum-luettelon elementille. Sen sijaan, että olisin luonut kentät manuaalisesti (ja sitten joutunut ylläpitämään lomaketta, jos enumia joskus muutetaan), päätin toteuttaa sen dynaamisesti, jotta se lisäisi kentät automaattisesti suunnitteluun suorituksen aikana.

Huomasin kuitenkin pian, että enumin arvojen läpikäyminen on hieman hämmentävää, vaikka se onkin helppoa, kunhan sen osaa.

Sinun on luonnollisesti aloitettava DictEnum-luokalla. Kuten näet, tällä luokalla on useita metodeja tiedon, kuten nimen ja tunnisteen, hakemiseen sekä indeksistä että arvosta.

Indeksin ja arvon ero on siinä, että indeksi on elementin numero enumissa, jos enumin elementit on numeroitu juoksevasti nollasta alkaen, kun taas arvo on elementin varsinainen "arvo"-ominaisuus. Koska useimpien enumien arvot on numeroitu juoksevasti nollasta alkaen, elementin indeksi ja arvo ovat usein samat, mutta eivät aina.

Mutta mistä tiedät, mitä arvoja enumilla on? Tässä kohtaa asia menee hämmentäväksi. DictEnum-luokalla on metodi nimeltä values(). Saatat odottaa tämän metodin palauttavan listan enumin arvoista, mutta se olisi ilmeisesti liian helppoa, joten se palauttaa sen sijaan enumin sisältämien arvojen lukumäärän. Arvojen lukumäärällä ei kuitenkaan ole mitään tekemistä varsinaisten arvojen kanssa, joten sinun on käytettävä tätä lukua perustana indeksipohjaisten metodien kutsumiselle, ei arvopohjaisten.

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

Muista myös, että enum-arvot (ja ilmeisesti nämä "indeksit") alkavat nollasta, toisin kuin X++:n taulukko- ja säilöindeksit, jotka alkavat luvusta 1. Voit siis käydä enum-elementtien läpi esimerkiksi 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 enumin jokaisen elementin symbolin ja tunnisteen infologiin.

Lisälukemista

Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:


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

Mikkel Christensen

Kirjoittajasta

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