在 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 函数的格式字符串,但它不起作用。它完全忽略了 % 参数,只返回了字符串的其余部分。
经过一番研究,我发现宏本身就可以用来格式化字符串,这我之前也不知道。哎,学习新知识总是好事,不过我还是挺惊讶自己之前竟然没发现这一点。
基本上就是这样
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
这样做行不通,因为宏中的百分号 (%) 实际上用于宏自身的字符串格式化功能。在这种情况下,strFmt 函数会将格式化字符串视为“--”,因此只会返回该字符串。
类似这样的:
info(#FormatMacro(salesId,itemId,lineNum));
可以运行,但可能不是你想要的结果。它不会输出三个变量的值,而是输出变量名,在本例中为“salesId-itemId-lineNum”。(请注意,我在向宏传递参数时,逗号后没有添加空格,这与我通常在方法调用中的做法不同。这是因为宏实际上也会使用空格,所以如果我添加了空格,输出结果将是“salesId-itemId-lineNum”。)
要在 strFmt 函数中实际使用宏作为格式化字符串,需要用反斜杠转义百分号,如下所示:
;
info(strFmt(#FormatMacro, 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));
}
进一步阅读
如果您喜欢这篇文章,您可能还会喜欢这些建议:
- 在 Dynamics AX 2012 中删除法人实体(公司帐户)
- 在 Dynamics AX 2012 中识别文档类别并查询 AIF 服务
- Dynamics AX 2012 SysOperation Framework 快速概览
