Miklix

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

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

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

#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企業に常勤している。ブログを書いていないときは、さまざまな興味、趣味、活動に余暇を費やしている。