ビジネス規則セットの実行計画の実行
ビジネス規則セットの実行計画の生成では以下が行われます。
1. ビジネス規則で定義されているセレクタに基づいた特定の RuleValidation インスタンスの作成。
2. RuleValidation インスタンスでは isConfigurationValid メソッドを使用して、ビジネス規則のコンフィギュレーションが有効であるかどうかが判別されます。コンフィギュレーションが有効でない場合、そのビジネス規則セットの実行計画では RuleValidation がスキップされ、エラーが記録されます。
3. ビジネス規則ごとに、次のアイテムを使用して RuleValidation インスタンスが呼び出されます。
a. 規則を評価するオブジェクトのコレクション
b. RuleValidation によってその実行を設定するために使用されるコンテキスト固有の基準 (コンテナ参照など)
4. RuleValidation インスタンスが実行計画に追加されます。
すべてのビジネス規則バリデータは RuleValidation インタフェースを実装します。一般的なビジネス規則は次の 2 つの主要カテゴリのいずれかに分類されます。
• 単純な検証: 規則チェックは、ビジネスオブジェクト自体、または関連によって設定されるシードオブジェクトに対して行われます。この例として、属性検証チェックや、リリース前のオブジェクトのライフサイクル状態のチェックがあります。
• 構造化された検証: 規則はビジネスオブジェクトに対して実行される場合とそうでない場合がありますが、部品やドキュメントの子などの関連オブジェクトに対する検証チェックが行われます。このタイプの検証では、ビジネス検証規則を計算して検証結果に適切なフラグを立てるため、一般的に、より複雑なアルゴリズムのセットが必要となります。構造化された検証規則の例としては、すべての結果オブジェクトとすべての第 1 レベルの依存が正しい状態にあることを確認する検証チェックがあります。
Windchill のデフォルトインストールでは次に示す RuleValidation の実装がサポートされています。
ビジネス規則セレクタ
|
RuleValidation
|
説明
|
CHECKOUT_RULE
|
com.ptc.core.businessRules.validation.CheckoutRuleValidator
|
オブジェクトがチェックアウトされない、またはプロジェクトにチェックアウトされることを検証します。
|
RELEASE_TARGET
|
com.ptc.core.businessRules.validation.ReleaseTargetValidator
|
すべての結果オブジェクトがリリースに対して適切な状態にあり、割り当てられたライフサイクル遷移規則と矛盾しない適切な変更管理遷移が指定されていることを保証します。
|
ATTRIBUTE_RULE
|
com.ptc.core.businessRules.validation.AttributeRuleValidator
|
あるオブジェクトタイプの指定されている属性規則コンフィギュレーションが有効であることを検証します。
|
BOM_RELEASE_RULE
|
com.ptc.core.businessRules.validation.BOMReleaseRuleValidator
|
すべての結果オブジェクトが適切な状態にあり、それらの第 1 レベルの子がすべて適切な状態にあることを保証します。
|
|
リリース 11.0 におけるプロモーションリクエストでは属性規則とチェックアウト規則がサポートされています。変更通知ではすべての規則がサポートされています。
|
RuleValidation のインスタンス化はビジネス規則で定義されているセレクタに基づきます。定義されているセレクタの実装クラスの検索にはアプリケーションのサービスが使用されます。実装クラスが定義されていないかクラスのインスタンス化に失敗した場合、エラーが記録されます。
検証を実行する前に、エンジンはビジネス規則のコンフィギュレーションが有効であるかどうかを調べる
RuleValidation.isConfigurationValid を呼び出します。このビジネス規則のコンフィギュレーションの検証は、ビジネス規則を読み込む際にも呼び出されますが (
ビジネス規則の作成を参照)、登録されている
RuleValidation は変更可能なので、コンフィギュレーションの検証はビジネス規則の検証を実行する前にも呼び出されます。
TheRuleValidation 初期化メソッド prepare を使用して、ビジネス規則のセットと照らして検証されるシードオブジェクトのセット全体の初期前処理が実行されます。これにより、Windchill サーバー内で事前検証を実行できます (多くのアイテムに共通するライフサイクルテンプレートの読み込みなど)。RuleValidation.prepare メソッドからマルチオブジェクト API を呼び出すのが最適です。マルチオブジェクトの呼び出しに RuleValidation.peformValidation メソッドは使用しないでください。
メソッド RuleValidation.isConfigurationValid によって true が返った場合、各シードオブジェクトに対して RuleValidation performValidation が呼び出されます。シードオブジェクトは RuleValidationObject 内で渡されます。RuleValidationObject にはターゲットオブジェクト (シードオブジェクトがリンクでない場合はシードオブジェクト、シードオブジェクトがリンクの場合は役割 A または役割 B) とリンク (シードオブジェクトがリンクの場合) が格納されています。ビジネス規則が構造化タイプ RuleValidation である場合、RuleValidationObject には、集められた子と、一緒に集められたリンクへの集められた子のマップも含まれています。performValidation はリンクではなくターゲットオブジェクトへの参照を持つ新しい RuleValidationResult を必ず返す必要があります。
ビジネス規則エンジンとシーケンスの図
ビジネス規則エンジンと検証の相互関係図
RuleValidation の実装は service.properties で登録されます。RuleValidation の実装を作成またはオーバーライドするには、カスタム service.properties xconf ファイルに以下を追加します。
<Service context="default" name="com.ptc.core.businessRules.validation.
RuleValidation">
<Option serviceClass="com.ptc.core.businessRules.validation.
CheckoutRuleValidator"
selector="CHECKOUT_RULE"
cardinality="singleton"
requestor="null"/>
</Service>
可能な場合、特定の RuleValidation 実装のインスタンス数を削減するため、RuleValidation の多重度を "singleton" に設定します。多重度が "singleton" に設定されている場合、RuleValidation 実装のスレッドセーフ処理をサポートするため、事前検証データの保管に RuleValidationKey.processingMap を使用できます。