次の方法で共有


拡張可能列挙型の書き込み

コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。

次の列挙型プロパティを設定して、列挙型を拡張可能にします。

  • Is Extensible = True
  • UseEnumValue = No

これらのプロパティを設定すると、ダウンストリームの実装者は、より多くの要素で列挙型を拡張できます。 要素の値はデプロイ時に決定され、システム間で同じではありません。 ただし、次の動作が確認されます。

  • データ アップグレード スクリプトは必要ありません。 列挙型値は、拡張される列挙型に関係なく、データベースに保存されます。 したがって、列挙型を拡張可能にすると、任意のシステムで使用される列挙値が優先されます。
  • 列挙型の最初の要素は、0 (ゼロ) の値を取得します。 したがって、 not 演算子を使用しても拡張可能な列挙型を使用できます。 唯一の例外は、列挙型を拡張可能にする前に、列挙型の最初の要素に 0 以外の値があった場合です。

コードでの拡張可能列挙型の使用

開発者は列挙型の値を制御しなくなったため、列挙型の値を特定することはできません。 コードで拡張可能な列挙型を使用する場合は、比較で拡張可能な列挙型を使用できないことに注意してください。 たとえば、 MyEnum::Value1 > MyEnum::Value2 はサポートされていません。

さらに、整数と列挙型の間のすべての変換を探します。 たとえば、ビューやクエリのモデル化された範囲、 <>などの比較を使用してコードから作成されたクエリ、または比較でハードコーディングされた整数値を使用して作成されたクエリなどです。

モデルとすべての依存モデルをコンパイルすると、コンパイラは、整数への比較と変換をエラーとして検出します。

列挙型の値が使用されるロジックをより小さなメソッドに分割して抽出してください。 この方法を使用すると、コマンドチェーン (CoC) を使用する拡張機能で、追加した列挙値を処理できます。

インスタンス化が列挙型値に基づいている構築メソッドの場合、可能な場合は必ず切り替えブロックを SysExtension に置き換えます。 それ以外の場合、既定のブロックが拡張可能であることを確認します。 例については、PurchRFQCaseCopying クラスを参照してください。

スイッチ ブロックで列挙型を使用する場合は、拡張可能ではないスローがある、または持たない既定のブロックを使用しないようにします。 列挙型値に長い切り替えケース ブロックまたは if...else ブロックがある場合、列挙型に関連する特定のロジックを処理するクラス階層を作成することを検討します。 例については、PriceGroupTypeTradeAgreementMapping クラス階層を参照してください。

列挙型値を使用するクエリ範囲に in キーワードを使用し、in キーワードが使用するコンテナーを拡張可能にします。

潜在的な問題

一部の列挙型では、要素に特定の順序または値が必要であり、拡張可能にすることはできません。 この制限は状態列挙型に適用され、値は論理的なプログレッシブ シーケンス (下書き、承認済み、完了、アーカイブ済みなど) を表します。 また、別の列挙型やタブページ コントロールの数値など、別の成果物と一致するために値に固定整数値が必要な列挙型にも適用できます。

いくつかの列挙型には、多くの要素があります。 列挙型は、最大 250 の要素をサポートします。 列挙型に多くの要素がある場合 (100 を超えるなど)、列挙型を拡張可能にするのではなく、ソリューションを再設計することを検討します。 列挙型が拡張可能な場合、将来的に要素を追加すると、追加が制限を超える可能性があるため、顧客の統合ソリューションが中断される可能性があります。