Miklix

עיצוב מחרוזות עם מאקרו ו-strFmt ב- Dynamics AX 2012

פורסם: 16 בפברואר 2025 בשעה 0:49:13 UTC

מאמר זה מתאר התנהגות מוזרה ב- Dynamics AX 2012 בעת שימוש במאקרו כמחרוזת פורמט ב-strFmt, כמו גם דוגמאות כיצד לעקוף זאת.


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

String Formatting with Macro and strFmt in Dynamics AX 2012

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

לאחרונה נתקלתי בבעיה בפונקציית strFmt שבלבלה אותי קצת. החלק המבלבל ביותר היה שבצירוף מקרים מוזר לא נתקלתי בזה מעולם בשנותיי הרבות כמפתחת Axapta/Dynamics AX.

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

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

בעיקרון, משהו כזה

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

לא יעבוד מכיוון שסימני ה-% במאקרו משמשים למעשה עבור תכונות עיצוב המחרוזות של המאקרו עצמו. במקרה זה, הפונקציה strFmt תראה את מחרוזת העיצוב בתור "--" ולכן רק תחזיר את זה.

משהו כזה:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

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

כדי להשתמש בפועל במאקרו כמחרוזת עיצוב עם strFmt, אתה צריך לברוח מסימני האחוזים עם קווים אחוריים, כך:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

זה למעשה יעבוד כאילו סיפקת את מחרוזת הפורמט ישירות.

העבודה הקטנה הזו ממחישה את הדוגמאות:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}
שתפו בבלוסקישתפו בפייסבוקשתפו בלינקדאיןשתפו ב-Tumblrשתפו ב-Xשתפו בלינקדאיןהצמד בפינטרסט

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

על המחבר

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