在 Dynamics AX 2012 中使用巨集和 strFmt 進行字串格式化
已發佈: 2025年2月16日 凌晨12:49:04 [UTC]
本文介紹了在 Dynamics AX 2012 中使用巨集作為 strFmt 中的格式字串時的一些特殊行為,以及如何解決該問題的範例。
該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:
String Formatting with Macro and strFmt in Dynamics AX 2012
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));
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
將不起作用,因為巨集中的 % 符號實際上用於巨集自己的字串格式化功能。在這種情況下,strFmt 函數將把格式字串視為“--”,因此只傳回該字串。
像這樣:
#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));
info(#FormatMacro(salesId,itemId,lineNum));
可以工作,但可能不是你想要的方式。它不會輸出這三個變數的值,而是輸出變數的名稱,在本例中為「salesId-itemId-lineNum」。 (請注意,在將參數傳遞給巨集時,我沒有在逗號後面添加空格,而通常在方法呼叫中我這樣做。這是因為巨集實際上也會使用這樣的空格,所以如果我這樣做了,輸出將是“salesId- itemId- lineNum”)。
要實際使用巨集作為 strFmt 的格式化字串,您需要使用反斜線轉義百分號,如下所示:
#define.FormatMacro('\\%1-\\%2-\\%3')
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
;
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));
}
{
#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));
}