Miklix

在 Dynamics AX 2012 中使用宏和 strFmt 进行字符串格式化

已出版: 2025年2月16日 UTC 00:49:01
最后更新 2026年1月12日 UTC 08:44:35

本文介绍了在 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 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。