Miklix

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

פורסם: 16 בפברואר 2025 בשעה 0:49:13 UTC
עודכן לאחרונה: 12 בינואר 2026 בשעה 8:44:39 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 אירופאי גדול. כשהוא לא כותב בלוג, הוא מבלה את זמנו הפנוי במגוון עצום של תחומי עניין, תחביבים ופעילויות, שעשויים לבוא לידי ביטוי במידה מסוימת במגוון הנושאים המכוסים באתר זה.