עיצוב מחרוזות עם מאקרו ו-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 וזה פשוט לא עבד. זה התעלם לחלוטין מהפרמטרים % והחזיר רק את שאר המחרוזת.
אחרי שבדקתי את זה, גיליתי שאפשר להשתמש בפקודות מאקרו עצמן כדי לעצב מחרוזות, וזה גם משהו שלא הכרתי. נו טוב, תמיד טוב ללמוד משהו חדש, אבל עדיין הופתעתי מאוד שלא נתקלתי בזה בעבר.
בעיקרון, משהו כזה
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
לא יעבוד מכיוון שסימני ה-% במאקרו משמשים למעשה עבור תכונות עיצוב המחרוזות של המאקרו עצמו. במקרה זה, הפונקציה strFmt תראה את מחרוזת העיצוב בתור "--" ולכן רק תחזיר את זה.
משהו כזה:
info(#FormatMacro(salesId,itemId,lineNum));
יעבוד, אבל כנראה לא כמו שאתה רוצה. במקום להוציא את הערכים של שלושת המשתנים, היא תוציא את שמות המשתנים במקום זאת, במקרה זה "salesId-itemId-lineNum". (שימו לב שלא שמתי רווחים אחרי הפסקים בהעברת פרמטרים למאקרו, כמו שאני עושה בדרך כלל בקריאות למתודה. זה בגלל שהמאקרו ישתמש גם ברווחים כאלה, אז הפלט יהיה "salesId- itemId- lineNum" אם עשיתי זאת).
כדי להשתמש בפועל במאקרו כמחרוזת עיצוב עם strFmt, אתה צריך לברוח מסימני האחוזים עם קווים אחוריים, כך:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
זה למעשה יעבוד כאילו סיפקת את מחרוזת הפורמט ישירות.
העבודה הקטנה הזו ממחישה את הדוגמאות:
{
#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));
}