Dynamics AX 2012 の X++ コードから列挙型の要素を反復処理する方法
出版された: 2025年2月15日 23:10:40 UTC
最終更新日 2026年1月12日 8:41:59 UTC
この記事では、X++ コード例を含め、Dynamics AX 2012 で基本列挙の要素を列挙およびループする方法について説明します。
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
この投稿の情報は Dynamics AX 2012 R3 に基づいています。他のバージョンでは有効ではない可能性があります。
最近、列挙型の各要素の値を表示するフォームを作成していました。フィールドを手動で作成する(そして列挙型が変更された場合にフォームをメンテナンスする)のではなく、実行時にフィールドがデザインに自動的に追加されるように動的に実装することにしました。
しかし、実際に列挙型の値を反復処理するのは、やり方がわかってしまえば簡単ですが、少し混乱するということにもすぐに気付きました。
当然のことながら、DictEnumクラスから始める必要があります。このクラスには、インデックスと値の両方から名前やラベルなどの情報を取得するためのメソッドがいくつか用意されています。
インデックスと値の違いは、インデックスは列挙型内の要素の番号(列挙型の要素が0から始まる連番で表されている場合)であるのに対し、値は要素の実際の「値」プロパティであることです。ほとんどの列挙型では値が0から始まる連番で表されているため、要素のインデックスと値は多くの場合同じになりますが、必ずしも同じとは限りません。
しかし、列挙型がどのような値を持っているかはどうやって知るのでしょうか?ここがややこしいところです。DictEnumクラスにはvalues()というメソッドがあります。このメソッドは列挙型の値のリストを返すと思われるかもしれませんが、それは明らかに簡単すぎるので、代わりに列挙型に含まれる値の数を返します。ただし、値の数は実際の値とは何の関係もありません。そのため、この数は値ベースのメソッドではなく、インデックスベースのメソッドを呼び出すための基準として使用する必要があります。
代わりにこのメソッドを indexes() と名付けていれば、混乱は少なかったでしょう ;-)
また、列挙値 (および明らかにこれらの「インデックス」) は、1 から始まる X++ の配列およびコンテナー インデックスとは異なり、0 から始まることに注意してください。そのため、列挙内の要素をループするには、次のようにします。
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
これにより、列挙型内の各要素のシンボルとラベルが情報ログに出力されます。
さらに読む
この投稿が気に入った場合は、次の提案も気に入るかもしれません:
- Dynamics AX 2012 の data() と buf2Buf() の違い
- SysExtension フレームワークを使用して Dynamics AX 2012 でインスタンス化するサブクラスを見つける
- Dynamics AX 2012 で実数をすべて小数点付きの文字列に変換する
