Miklix

Як виконувати ітерацію елементів переліку з коду X++ у Dynamics AX 2012

Опубліковано: 15 лютого 2025 р. о 23:11:01 UTC

У цій статті пояснюється, як перераховувати та перебирати елементи базового переліку в Dynamics AX 2012, включаючи приклад коду X++.


Ця сторінка була перекладена з англійської мови машинним перекладом, щоб зробити її доступною для якомога більшої кількості людей. На жаль, машинний переклад ще не є досконалою технологією, тому можуть траплятися помилки. Якщо ви бажаєте, ви можете переглянути оригінальну англійську версію тут:

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

Інформація в цій публікації базується на Dynamics AX 2012 R3. Він може бути дійсним, а може і не дійсним для інших версій.

Нещодавно я створював форму, яка мала відображати значення для кожного елемента в переліку. Замість того, щоб створювати поля вручну (а потім підтримувати форму, якщо перелік коли-небудь буде змінено), я вирішив впровадити його динамічно, щоб він автоматично додавав поля до дизайну під час виконання.

Однак, незабаром я виявив, що насправді перебор значень в переліку, хоча і досить простий, коли ви знаєте як, трохи збиває з пантелику.

Очевидно, що вам потрібно почати з класу DictEnum. Як ви побачите, цей клас має кілька методів отримання інформації, такої як ім'я та мітка як з індексу, так і зі значення.

Різниця між індексом і значенням полягає в тому, що індекс є номером елемента в переліку, якщо елементи переліку були пронумеровані послідовно, починаючи з нуля, тоді як value є фактичною властивістю елемента "value". Оскільки більшість переліків мають значення, пронумеровані послідовно від 0, індекс і значення елемента часто будуть однаковими, але, звичайно, не завжди.

Але як дізнатися, які значення має перелік? Ось тут і виникає плутанина. Клас DictEnum має метод під назвою values(). Ви можете очікувати, що цей метод поверне список значень переліку, але це, очевидно, буде занадто просто, тому замість цього він повертає кількість значень , які містить перелік. Однак кількість значень не має нічого спільного з фактичними значеннями, тому вам потрібно використовувати це число як основу для виклику методів, заснованих на індексі, а не на основі значень.

Якби вони замість цього назвали цей метод indexs(), це було б менш заплутано ;-)

Також майте на увазі, що значення переліків (і, очевидно, ці "індекси") починаються з 0, на відміну від індексів масивів і контейнерів у X++, які починаються з 1, тому, щоб перебрати елементи в переліку, ви можете зробити щось на кшталт цього:

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

Це виведе символ і мітку кожного елемента в перелік до інформаційного журналу.

Поділитися на BlueskyПоділіться на FacebookПоділіться на LinkedInПоділіться на TumblrПоділитися на XПоділіться на LinkedInЗакріпити на Pinterest

Міккель Банг Крістенсен

Про автора

Міккель Банг Крістенсен
Міккель - творець і власник сайту miklix.com. Він має понад 20 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.