58.3. ルールアセットのドロップダウンリストの列挙定義
Business Central での列挙定義では、ガイド付きルール、ガイド付きルールテンプレート、ガイド付きデシジョンテーブルの条件やアクションのフィールドで使用可能な値を指定します。列挙定義には、ルールアセットで該当するフィールドのドロップダウンリストとして表示される対応値一覧に対する fact.field
マッピングが含まれています。列挙定義と同じファクトとフィールドをベースにしたフィールドを選択すると、定義した値のドロップダウンリストが表示されます。
列挙は、Business Central または Red Hat Process Automation Manager プロジェクトの DRL ソースで定義できます。
手順
-
Business Central で、Menu
Design Projects に移動して、プロジェクト名をクリックします。 -
Add Asset
Enumerataion をクリックします。 - 分かりやすい Enumeration 名を入力し、適切な パッケージ を選択します。指定するパッケージは、必要なデータオブジェクトと適切なルールアセットが割り当てられているか、これから割り当てるパッケージと同じでなければなりません。
Ok をクリックして列挙を作成します。
Project Explorer の Enumeration Definitions パネルに、新しい列挙が追加されました。
列挙デザイナーの Model タブで、Add enum をクリックし、以下の列挙値を定義します。
- Fact: この列挙を関連付けるプロジェクトの同じパッケージ内に、既存のデータオブジェクトを指定します。Project Explorer で Data Objects パネルを開き、利用可能なデータオブジェクトを表示するか、必要に応じて新規アセットとして適切なデータオブジェクトを作成します。
- Field: Fact 用に選択したデータオブジェクトの一部として定義した既存のフィールド ID を指定します。Project Explorer で Data Objects パネルを開き、適切なデータオブジェクトを選択して、利用可能な Identifier オプションの一覧を表示します。必要に応じて、データオブジェクトに関連する ID を作成してください。
-
Context: Fact と Field の定義にマッピングする
['string1','string2','string3']
形式または[integer1,integer2,integer3]
形式の値一覧を定義します。これらの値は、ルールアセットの適切なフィールドに、ドロップダウンリストとして表示されます。
たとえば、以下の列挙は、ローン申請デシジョンサービスの申請者でクレジットスコアに使用するドロップダウンの値を定義します。
図58.7 Business Central での申請者のクレジットスコアの列挙例
DRL ソースの申請者のクレジットスコアの列挙例
'Applicant.creditRating' : ['AA', 'OK', 'Sub prime']
以下の例では、プロジェクトと同じパッケージ内にあり、
Applicant
データオブジェクトとcreditRating
フィールドを使用するガイド付きルール、ガイド付きルールテンプレート、またはガイド付きデシジョンテーブルであれば、設定値がドロップダウンオプションとして利用できます。図58.8 ガイド付きルールまたはガイド付きルールテンプレートでの列挙ドロップダウンオプション例
図58.9 ガイド付きデシジョンテーブルでの列挙ドロップダウンオプション例
58.3.1. ルールアセットの詳細列挙オプション
Red Hat Process Automation Manager プロジェクトの列挙定義を使用した詳細ユースケースについては、列挙を定義する時に、以下の拡張オプションの使用を検討してください。
- Business Central の値との DRL の値におけるマッピング
列挙値を DRL ソースに表示されるものとは異なる方法で、または完全に Business Central インターフェイスに表示する場合は、列挙定義値の形式
'fact.field' : ['sourceValue1=UIValue1','sourceValue2=UIValue2', … ]
のマッピングを使用します。たとえば、ローンの状態に関する以下の列挙定義では、
A
またはD
のオプションを DRL ファイルで使用しますが、Business Central ではApproved
またはDeclined
のオプションが表示されます。'Loan.status' : ['A=Approved','D=Declined']
- 列挙値の依存関係
選択した値を 1 つのドロップダウンリストにまとめて、後続のドロップダウンリストで利用可能なオプションを判断する場合は、列挙定義で
'fact.fieldB[fieldA=value1]' : ['value2', 'value3', … ]
の形式を使用します。たとえば、保険契約に関する以下の列挙定義では、
policyType
フィールドにHome
またはCar
の値を使用できます。ユーザーが選択する保険契約タイプにより、利用できる契約coverage
のフィールドオプションが決まります。'Insurance.policyType' : ['Home', 'Car'] 'Insurance.coverage[policyType=Home]' : ['property', 'liability'] 'Insurance.coverage[policyType=Car]' : ['collision', 'fullCoverage']
注記列挙依存関係は、ルールの条件およびアクションをまたいで適用されません。たとえば、保険契約のユースケースでは、ルール条件で選択した契約をもとに、ルールアクションで利用可能な補償オプションが決定されるわけではありません (該当する場合)。
- 列挙の外部データソース
列挙定義で直接、値を定義するのではなく、外部のデータソースから列挙値の一覧を取得する場合は、プロジェクトのクラスパスで、文字列の
java.util.List
リストを返すヘルパークラスを追加します。列挙定義で、値を指定する代わりに、外部の値を取得するように設定したヘルパークラスを特定します。たとえば、ローン申請者の地域に関する以下の列挙定義では、
'Applicant.region' : ['country1', 'country2', … ]
の形式で明示的に申請者の地域を定義するのではなく、外部で定義した値の一覧を返すヘルパークラスを使用します。'Applicant.region' : (new com.mycompany.DataHelper()).getListOfRegions()
この例では、
DataHelper
クラスに、文字列の一覧を返すgetListOfRegions()
メソッドが含まれます。列挙は、ルールアセットの関連フィールドのドロップダウンリストに、読み込まれます。また、通常通り従属フィールドを特定して、ヘルパーへの呼び出しを引用符で囲むことで、ヘルパークラスから動的に、従属の列挙定義を読み込むこともできます。
'Applicant.region[countryCode]' : '(new com.mycompany.DataHelper()).getListOfRegions("@{countryCode}")'
リレーショナルデータベースなど、外部データソースから列挙データをすべて読み込む場合は、
Map<String, List<String>>
マッピングを返す Java クラスを実装できます。マップのキーはfact.field
マッピングです。この値は、値のjava.util.List<String>
リストになります。たとえば、以下の Java クラスでは、関連する列挙のローン申請者の地域を定義します。
public class SampleDataSource { public Map<String, List<String>> loadData() { Map data = new HashMap(); List d = new ArrayList(); d.add("AU"); d.add("DE"); d.add("ES"); d.add("UK"); d.add("US"); ... data.put("Applicant.region", d); return data; } }
以下の列挙定義は、この Java クラスの例に相関します。参照は Java クラスで定義されているため、列挙にはファクトまたはフィールド名への参照が含まれません。
=(new SampleDataSource()).loadData()
=
演算子を使用して、Business Central がヘルパークラスから全列挙データを読み込めるようにします。エディターで使用するように列挙定義を要求すると、ヘルパーメソッドが静的に評価されます。注記現在、Business Central では、ファクトおよびフィールド定義なしで列挙を定義することはできません。この方法で関連の Java クラスの列挙を定義するには、Red Hat Process Automation Manager プロジェクトで DRL ソースを使用します。