Miklix

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 関数の書式文字列としてマクロを使用しようとしたが、うまくいかなかったことです。% パラメータは完全に無視され、文字列の残りの部分のみが返されました。

調べてみると、マクロ自体を使って文字列をフォーマットできることが分かりました。これも私が知らなかったことです。まあ、何か新しいことを学ぶのは良いことですが、それでも、これまでこれに出くわさなかったことにとても驚きました。

基本的にはこんな感じです

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

マクロ内の % 記号は実際にはマクロ自体の文字列書式設定機能に使用されるため、動作しません。この場合、strFmt 関数は書式設定文字列を "--" と見なし、その文字列のみを返します。

次のようなものです:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

動作しますが、おそらく期待どおりには動作しません。3 つの変数のを出力する代わりに、変数の名前(この場合は "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企業に常勤している。ブログを書いていないときは、さまざまな興味、趣味、活動に余暇を費やしている。