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