在 Dynamics AX 2012 中使用巨集和 strFmt 進行字串格式化
已發佈: 2025年2月16日 凌晨12:49:04 [UTC]
最後更新: 2026年1月12日 上午8:44:35 [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 中從 X++ 程式碼迭代枚舉元素
- Dynamics AX 2012 中 data() 與 buf2Buf() 之間的差異
- 使用 SysExtension 框架找出 Dynamics AX 2012 中要實例化的子類
