עיצוב מחרוזות עם מאקרו ו-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 וזה פשוט לא עבד. הוא התעלם לחלוטין מהפרמטרים % והחזיר רק את שארית המחרוזת.
אחרי שבדקתי את זה, גיליתי שאפשר להשתמש במאקרו עצמם כדי לעצב מחרוזות, וזה גם משהו שלא ידעתי. נו טוב, תמיד טוב ללמוד משהו חדש, אבל עדיין הופתעתי מאוד שלא נתקלתי בזה קודם.
בעיקרון, משהו כזה
;
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));
}
קריאה נוספת
אם נהניתם מהפוסט הזה, אולי תאהבו גם את ההצעות הבאות:
- מחק ישות משפטית (חשבונות חברה) ב- Dynamics AX 2012
- שגיאה "לא הוגדרה מחלקת מטא נתונים עבור אובייקט חוזה נתונים" ב- Dynamics AX 2012
- ההבדל בין נתונים() ל-buf2Buf() ב-Dynamics AX 2012
