Miklix

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

已出版: 2025年2月16日 UTC 00:49:01

本文介绍了在 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上固定

米克尔·邦·克里斯滕森

关于作者

米克尔·邦·克里斯滕森
迈克尔 是 miklix.com 的创建者和所有者。他拥有 20 多年的专业计算机程序员/软件开发人员经验,目前全职受雇于一家大型欧洲 IT 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。