高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > 列挙タイプ > 外部列挙値リスト
  
外部列挙値リスト
値の単純な静的リストではない属性に対して、列挙の制約を定義できます。これらの値は外部ソースから読み込まれ、時間の経過とともに変更されることがあります。「タイプおよび属性の管理」ユーティリティによって、属性に対する静的な列挙の制約を定義できます。これらの列挙は UI から手動で維持する必要があります。ただし、静的リストを手動で維持するのではなく、外部ソースから列挙を読み込む必要がある場合もあります。
範囲/適用可能性/前提条件
この機能は、「タイプおよび属性の管理」ユーティリティで定義される文字列属性に適用されます。
予測される結果
このソリューションでは、外部ソースから読み込まれる値の列挙リストに属性を制約できます。以下を制御できます。
値のローカライズ
値の並べ替え順序
値の選択可能性
列挙を常に最新の状態にするための任意のトリガ条件
ソリューション
EnumerationInfoProvider を実装して列挙リストを提供し、「タイプおよび属性の管理」ユーティリティで制約を設定して EnumerationInfoProvider を使用します。
前提となる知識
この目的を達成するには、次のことを理解している必要があります。
「タイプおよび属性の管理」ユーティリティでの属性への制約の追加。
必要な列挙値を外部ソースから抽出する方法。
ソリューションエレメント
エレメント
タイプ
説明
EnumerationInfoProvider
java
このインタフェースはカスタムダイナミック列挙プロバイダを実装する方法を定義します。このインスタンスは、戻り値からインスタンス化されます。したがって、パブリックな no-arg コンストラクタが必要です。このインタフェースでメソッドから例外がスローされると、空の列挙が作成されます。
EnumerationInfoManager
java
このインタフェースは、列挙情報プロバイダがキャッシュされた列挙のリセットに使用できるメソッドを定義します。
EnumerationInfo
java
このクラスは列挙を表します。列挙のプロパティとそのエントリの両方を含んでいます。このクラスはスレッドセーフではないので、別のコードに渡した後は修正を行わないでください。
EnumerationEntryInfo
java
このクラスは列挙エントリを表します。列挙エントリのプロパティを含んでいます。列挙エントリにはそれぞれ一意の名前があります。
手順 - EnumerationInfoProvider の実装
EnumerationInfoProvider インタフェースの実装を指定します。
initialize メソッドは、システムによって列挙が最初に読み込まれる前に、1 回呼び出されます。パラメータフィールドの使用はオプションです。入力を必要としない実装の場合は、パラメータを無視できます。パラメータフィールドの構文は任意です。唯一の制約として、空白または '~' の文字を含むことはできません。どのような目的であろうとシステムがこのパラメータを使用することはありません。EnumerationInfomanager.resetEnumeration(<provider>) が呼び出された後、EnumerationInfoProvider.initialize() メソッドも呼び出されます。
getEnumerationInfo メソッドは初期化の後に呼び出され、その呼び出しの結果はシステムによって自動的にキャッシュされます。getEnumerationInfo メソッドは、EnumerationInfomanager.resetEnumeration(<provider>) の呼び出しの後、次回の列挙リクエスト時のみもう一度呼び出されます。それ以外は、キャッシュされた情報が返されます。ユーザーはそれぞれの使用例に適したロジックを使用して、resetEnumeration の呼び出しを行うタイミングを決定します。呼び出しを行わない場合、列挙は実際には静的なものになります (別の理由でシステムキャッシュがフラッシュする場合を除く)。呼び出しは定期的に行うことも、トリガに応じて行うこともできます。最良のパフォーマンスを得るには、列挙に反映させる必要がある外部情報への変更が行われた後のみ、このメソッドを呼び出すようにします。
getEnumerationInfo() メソッドは、EnumerationInfo データ構造のインスタンスを返す場所です。EnumerationInfo は、列挙の動作をカスタマイズするために使用できる 2 つのローカライズ不可のプロパティをサポートしています。
サンプル
public EnumerationInfo getEnumerationInfo() {
EnumerationInfo enumerationInfo = new EnumerationInfo();
enumerationInfo.setNonLocalizableProperty(EnumerationInfo.AUTO_SORT,
Boolean.TRUE);
enumerationInfo.setNonLocalizableProperty(EnumerationInfo.DEFAULT_LOCALE,
Locale.EN_US);

Set<EnumerationEntryInfo> enumEntryInfos = getEntries();
enumerationInfo.addEnumerationEntryInfos(enumEntryInfos);

return enumerationInfo;
}
EnumerationInfo には、EnumerationEntryInfo データ構造のコレクションが含まれています。EnumerationEntryInfo データ構造は 2 つのローカライズ不可のプロパティと 1 つのローカライズ可能なプロパティをサポートしており、これらを使用して列挙の動作をカスタマイズできます。ローカライズ可能なプロパティには、任意の数の各種ロケールの独自の値セットを持たせることができます。
サンプル
Set<EnumerationEntryInfo> enumEntryInfos =
new LinkedHashSet<EnumerationEntryInfo>(12);
loop (…) {
String name = …;
EnumerationEntryInfo enumEntryInfo = new EnumerationEntryInfo(name);
int sortOrder = …;
Boolean selectable = …;
enumEntryInfo.setNonLocalizableProperty(EnumerationEntryInfo.SORT_ORDER,
sortOrder);
enumEntryInfo.setNonLocalizableProperty(EnumerationEntryInfo.SELECTABLE,
selectable);
Locale locale = …;
String displayName = …;
enumEntryInfo.setLocalizableProperty(EnumerationEntryInfo.DISPLAY_NAME,
locale, displayName); }
手順 - 「タイプおよび属性の管理」ユーティリティにおける外部列挙値リストの制約の設定
「タイプおよび属性の管理」ユーティリティで、外部列挙値リストの制約を属性に追加する場合、次の 2 つのフィールドを指定する必要があります。
各自の EnumerationInfoProvider 実装の完全修飾の classname を指定します。
オプションで、EnumerationInfoProvider 実装の initialize メソッドに渡す必要があるパラメータ文字列を指定します。
カスタマイズポイント
カスタマイズポイント - EnumerationInfo
プロパティ
デフォルト値
有効な値
必須
説明
EnumerationInfo.AUTO_SORT
Boolean.FALSE
Boolean.FALSE
Boolean.TRUE
いいえ
EnumerationInfo.AUTO_SORT プロパティを true に設定すると、エントリのローカライズされた表示名に基づいて列挙が自動的に並べ替えられます。false に設定すると、エントリに対して割り当てた相対的な順序に基づいて列挙が並べ替えられます。複数のエントリに同じ並べ替え順序が指定されている場合、これらのエントリは表示名に基づいて相互に相対的に並べ替えられます。並べ替え順序が定義されていないエントリは、順序が定義されているすべてのエントリの並べ替えが終わった後で並べ替えられます。
EnumerationInfo.DEFAULT_LOCALE
システムロケール
任意のロケール
いいえ
ローカライズが使用できないロケールの列挙エントリに対してクライアントがローカライズされた表示情報をリクエストした場合のフォールバックとして使用するロケールを示します。
カスタマイズポイント - EnumerationEntryInfo
プロパティ
デフォルト値
有効な値
必須
説明
EnumerationEntryInfo.SORT_ORDER
null
任意の整数
いいえ
EnumerationInfo.AUTO_SORT プロパティを false に設定すると、エントリに対して割り当てた相対的な順序に基づいて列挙が並べ替えられます。複数のエントリに同じ並べ替え順序が指定されている場合、これらのエントリは表示名に基づいて相互に相対的に並べ替えられます。並べ替え順序が定義されていないエントリは、順序が定義されているすべてのエントリの並べ替えが終わった後で並べ替えられます。
EnumerationEntryInfo.SELECTABLE
Boolean.TRUE
Boolean.TRUE
Boolean.FALSE
いいえ
編集操作時にエンドユーザーがエントリを選択可能かどうかを示します。
EnumerationEntryInfo.DISPLAY_NAME
null
任意の文字列
不可
示されたロケールの列挙エントリの表示名。