Miklix

כיצד לחזור על האלמנטים של Enum מקוד X++ ב- Dynamics AX 2012

פורסם: 15 בפברואר 2025 בשעה 23:11:13 UTC
עודכן לאחרונה: 12 בינואר 2026 בשעה 8:42:13 UTC

מאמר זה מסביר כיצד לבצע ספירה וללולאה של רכיבי enum בסיסי ב-Dynamics AX 2012, כולל דוגמת קוד X++.


עמוד זה תורגם במכונה מאנגלית על מנת להנגיש אותו לכמה שיותר אנשים. למרבה הצער, תרגום מכונה עדיין אינו טכנולוגיה משוכללת, ולכן עלולות להתרחש שגיאות. אם אתה מעדיף, תוכל לצפות בגרסה האנגלית המקורית כאן:

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

המידע בפוסט זה מבוסס על Dynamics AX 2012 R3. ייתכן שהוא תקף עבור גרסאות אחרות, וייתכן שלא.

לאחרונה יצרתי טופס שצריך להציג ערך עבור כל אלמנט ב-enum. במקום ליצור את השדות באופן ידני (ואז להצטרך לתחזק את הטופס אם ה-enum ישתנה אי פעם), החלטתי ליישם אותו באופן דינמי כך שה-enum יוסיף אוטומטית את השדות לעיצוב בזמן ריצה.

עם זאת, עד מהרה גיליתי שביצוע איטרציות על הערכים באנום, אמנם קל למדי ברגע שיודעים איך, הוא קצת מבלבל.

ברור שעליך להתחיל עם המחלקה DictEnum. כפי שתראה, למחלקה זו יש מספר שיטות להשגת מידע כגון שם ותווית הן מהאינדקס והן מהערך.

ההבדל בין אינדקס לערך הוא ש-index הוא המספר של אלמנט ב-enum, אם אלמנטי ה-enum ממוספרים ברצף החל מאפס, בעוד ש-value הוא המאפיין "ערך" בפועל של האלמנט. מכיוון שרוב ה-enums כוללים ערכים הממוספרים ברצף החל מאפס, האינדקס והערך של אלמנט יהיו לעתים קרובות זהים, אך בהחלט לא תמיד.

אבל איך יודעים אילו ערכים יש ל-enum? כאן זה מתחיל להיות מבלבל. למחלקה DictEnum יש מתודה בשם values(). אולי הייתם מצפים שמתודה זו תחזיר רשימה של ערכי ה-enum, אבל זה יהיה קל מדי, אז במקום זאת היא מחזירה את מספר הערכים שה-enum מכיל. עם זאת, למספר הערכים אין שום קשר לערכים בפועל, לכן עליכם להשתמש במספר זה כבסיס לקריאה לשיטות מבוססות אינדקס, ולא לשיטות מבוססות ערכים.

אם רק היו קוראים לשיטה הזו indexes(), זה היה פחות מבלבל ;-)

כמו כן, קחו בחשבון שערכי enum (וכנראה גם "אינדקסים" אלה) מתחילים ב-0, בניגוד לאינדקסים של מערכים ומכולות ב-X++, שמתחילים ב-1, לכן כדי לעבור בלולאה על האלמנטים ב-enum ניתן לעשות משהו כזה:

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

פעולה זו תפליט את הסמל והתווית של כל אלמנט ב-enum אל יומן המידע.

קריאה נוספת

אם נהניתם מהפוסט הזה, אולי תאהבו גם את ההצעות הבאות:


שתפו בבלוסקישתפו בפייסבוקשתפו בלינקדאיןשתפו ב-Tumblrשתפו ב-Xשתפו בלינקדאיןהצמד בפינטרסט

מיקל כריסטנסן

על המחבר

מיקל כריסטנסן
מיקל הוא היוצר והבעלים של miklix.com. יש לו למעלה מ-20 שנות ניסיון כמתכנת מחשבים/מפתח תוכנה מקצועי וכיום הוא מועסק במשרה מלאה בתאגיד IT אירופאי גדול. כשהוא לא כותב בלוג, הוא מבלה את זמנו הפנוי במגוון עצום של תחומי עניין, תחביבים ופעילויות, שעשויים לבוא לידי ביטוי במידה מסוימת במגוון הנושאים המכוסים באתר זה.