Miklix

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

פורסם: 15 בפברואר 2025 בשעה 23:11:13 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. זה עשוי להיות תקף עבור גרסאות אחרות או לא.

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

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

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

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

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

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

זכור גם שערכי ה-enum (וכנראה ה"אינדקסים" הללו) מתחילים ב-0, שלא כמו אינדקסים של מערך ו-container ב-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 ל-infolog.

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

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

על המחבר

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