Miklix

在 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 函數的格式字串,但它不起作用。它完全忽略了 % 參數,只傳回了字串的其餘部分。

經過一番研究,我發現巨集本身就可以用來格式化字串,這我之前也不知道。哎,學習新知識總是好事,不過我還是挺驚訝自己之前竟然沒發現這一點。

基本上就是這樣

#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));
}

進一步閱讀

如果您喜歡這篇文章,您可能也會喜歡這些建議:


分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

Mikkel Christensen

關於作者

Mikkel Christensen
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。