Miklix

Dynamics AX 2012-də X++ Kodundan enumun elementləri üzərində iterasiya necə etmək olar?

Nəşr olundu: 15 fevral 2025 at 23:18:07 UTC

Bu məqalədə X++ kod nümunəsi daxil olmaqla Dynamics AX 2012-də baza enumunun elementləri üzərində necə sıralamaq və loop etmək olar?


Bu səhifə mümkün qədər çox insan üçün əlçatan olması üçün ingilis dilindən maşın tərcümə edilib. Təəssüf ki, maşın tərcüməsi hələ mükəmməl texnologiya deyil, ona görə də səhvlər baş verə bilər. İstəyirsinizsə, orijinal ingilis versiyasına buradan baxa bilərsiniz:

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

Bu postdakı məlumatlar Dynamics AX 2012 R3 əsasında hazırlanıb. Digər versiyalar üçün də keçərli ola bilər və ya olmaya bilər.

Bu yaxınlarda hər element üçün dəyəri bir enumda göstərmək üçün lazım olan bir forma yaradırdım. Sahələri əllə yaratmaqdansa (və sonra əgər enum nə vaxtsa dəyişdirilsə formanı qoruyub saxlamaq lazımdır), mən onu dinamik şəkildə həyata keçirmək qərarına gəldim ki, qaçış vaxtı avtomatik olaraq sahələri dizayna əlavə etsin.

Lakin tezliklə aşkar etdim ki, əslində bir enumdakı dəyərlərin üzərində təkrarlanmaq, necə olduğunu biləndən sonra isə kifayət qədər asan olsa da, bir az çaşqınlıq yaradır.

Aydındır ki, "DictEnum" sinfindən başlamaq lazımdır. Görəcəyiniz kimi, bu sinif ad və etiket kimi məlumatları həm indeksdən, həm də dəyərdən əldə etmək üçün bir neçə üsula malikdir.

İndeks və qiymət arasındakı fərq ondadır ki, indeks saydakı elementin nömrəsidir, əgər sayumun elementləri sıfırdan başlayaraq ardıcıl olaraq nömrələnmişsə, qiymət isə elementin faktiki "value" xassəsidir. Əksər enumların 0-dan ardıcıl olaraq sayılmış dəyərləri olduğu kimi, elementin indeksi və qiyməti çox vaxt eyni olacaq, amma əlbəttə ki, həmişə belə deyil.

Bəs bir enumun hansı dəyərlərə malik olduğunu haradan bilirsiniz? Burada çaşqınlıq yaradır. DictEnum sinfinin dəyərlər() adlı metodu var. Bu üsulun enumun qiymətlərinin siyahısını qaytaracağını gözləyə bilərsiniz, lakin bu, açıq-aydın çox asan olardı, buna görə də o, siyahının özündə olan dəyərlərin sayını qaytarır. Lakin , qiymətlərin sayının faktiki dəyərlərlə heç bir əlaqəsi yoxdur. Ona görə də bu rəqəmdən dəyərə əsaslananları deyil, indeks əsaslı metodları çağırmaq üçün əsas kimi istifadə etmək lazımdır.

Kaş ki, bu metod indekslərinin adını qoysaydılar() əvəzində daha az çaşdırıcı olardı ;-)

Həmçinin yadda saxlayın ki, enum dəyərləri (və görünür bu "indekslər") 0-dan başlayır. X++-da 1-dən başlayan array və konteyner indekslərindən fərqli olaraq, bu cür bir şey edə bilərsiniz:

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

Bu, hər elementin simvolu və etiketinin enumdakı infoloqa çıxacaq.

Bluesky-də paylaşınFacebookda paylaşLinkedIn-də paylaşınTumblr-da paylaşınX-də paylaşınLinkedIn-də paylaşınPinterest-də Pin

Mikkel Bang Christensen

Müəllif haqqında

Mikkel Bang Christensen
Mikkel miklix.com saytının yaradıcısı və sahibidir. O, peşəkar kompüter proqramçısı/proqram təminatı tərtibatçısı kimi 20 ildən artıq təcrübəyə malikdir və hazırda böyük Avropa İT korporasiyasında tam iş günü işləyir. Bloq yazmayanda o, boş vaxtını geniş çeşidli maraqlara, hobbilərə və fəaliyyətlərə sərf edir ki, bu da müəyyən dərəcədə bu veb-saytda əhatə olunan müxtəlif mövzularda əks oluna bilər.