Dynamics AX 2012 でのマクロと strFmt を使用した文字列の書式設定
出版された: 2025年2月16日 0:48:35 UTC
最終更新日 2026年1月12日 8:44:27 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));
}
さらに読む
この投稿が気に入った場合は、次の提案も気に入るかもしれません:
- Dynamics AX 2012 の AIF サービスのドキュメント クラスとクエリの識別
- Dynamics AX 2012 の X++ から AIF ドキュメント サービスを直接呼び出す
- Dynamics AX 2012 SysOperation Framework の概要
