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?
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:
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.