Dynamics AX 2012 でのマクロと strFmt を使用した文字列の書式設定
出版された: 2025年2月16日 0:48:35 UTC
この記事では、strFmt でマクロを書式文字列として使用する場合の Dynamics AX 2012 の特殊な動作と、その回避方法の例について説明します。
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));
動作しますが、おそらく期待どおりには動作しません。3 つの変数の値を出力する代わりに、変数の名前(この場合は "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));
}