拡張ルール・テキストの作成方法
拡張ルールのルール・テキストとして使用できるスクリプトは、Groovyスクリプト言語で記述され、コンフィギュレータ・モデル・オブジェクトにアクセスするインタフェースを使用します。
Groovyスクリプト言語
Groovy言語は、拡張ルールのスクリプトを記述する便利な手段を提供します。
Groovyは、オブジェクト指向で動的にコンパイルされます。 Javaプラットフォーム用のスクリプト言語として使用できます。 Groovyは、他の場所(http://groovy-lang.org
)およびその他のパブリック・ソースで広く説明されています。
拡張ルール・スクリプトを記述する場合、Groovyの関連機能は次のとおりです:
-
多くのベースJavaパッケージが自動的にインポートされるため、スクリプトにインポートする必要はありません。
-
def
キーワードを使用して変数を宣言できます。型を宣言する必要はありません。 -
クラス外でメソッドおよび変数を定義できます。 これらは、スクリプト内でグローバルと見なされます。 グローバル定義は、組込みクラス
ScriptClass
内で実行され、組込みメソッドrun()
で実行されます。 -
クラスにメソッドと変数を配置することには、次のような利点があります:
-
カプセル化および継承を使用できます。
-
Javaのように複雑なロジックを構築できます。
-
クラス内のメソッドを編成すると、イベント・バインディングを追加するときに、「クラス」および「メソッド」リストからメソッドを簡単に選択できるようになります。
クラスにメソッドおよび変数を配置しないという利点は次のとおりです:
-
クラスを使用しない場合は、グローバル・クラス
ScriptClass
およびグローバル・メソッドrun()
にバインドされたコードを追加して実行するだけで、コードを記述し、コードをより迅速にテストできます。
-
重要なコンフィギュレータ・オブジェクトへのアクセス
コンフィギュレータ・ランタイム・コア・パッケージ内の特定のオブジェクトは、構成セッション中に最も一般的に必要なオブジェクトへのアクセスを提供します。
拡張ルールが実行されると、コンフィギュレータ・フレームワークによって、ルールのイベント・バインディングで指定されたイベントを表すオブジェクトが自動的に初期化されます。 このオブジェクトは、cxEvent
という名前のインタフェースICXEvent
のインスタンスです。
次の表に、構成セッション中に最も一般的に必要となるオブジェクトを示します。 表では、オブジェクトごとに次の情報を提供します:
-
オブジェクトの簡単な説明
-
そのオブジェクトにアクセスするメソッドを含むJavaインタフェース
-
オブジェクトのインスタンスを作成するコードの簡単な例
-
オブジェクトのインスタンスを使用するコードの短い例
オブジェクト |
アクセスされたエンティティ |
使用されるインタフェース |
オブジェクトの作成例 |
オブジェクトの使用例 |
---|---|---|---|---|
イベント |
ルールのイベント・バインディングによって指定されたイベント。 |
|
コードは必要ありません。 オブジェクト |
ルールをトリガーしたイベントに関連付けられた現在の構成を取得します。
|
ルールの基本ノード |
ルールに関連付けられた基本ノード。 |
|
バインド・イベントによってトリガーされるルールのベース・ノードを取得します。
|
ルールのベース・ノードがエンド・ユーザーによって選択されているかどうかをテストします。
|
構成 |
セッション中のアクティブな構成。 |
|
バインド・イベントによってトリガーされたルールの影響を受ける構成を取得します。
|
現在構成中の品目ベース・モデルのルート・ノードを取得します。
|
モデルのルート・ノード |
構成されるモデルのルート・ノード。 |
|
現在構成中の品目ベース・モデルのルート・ノードを取得します。
|
現在のモデルの子ノードを取得し、その品目名を使用して、ルート・ノードからモデル・ツリーを検索します。
|
モデル・ノード値との相互作用
ここで説明するインタフェースを使用して、モデル・ノードの値と状態を取得および設定できます。
次の表に、コンフィギュレータ・モデルのノードのタイプを表すオブジェクトを示します。 表では、オブジェクトごとに次の情報を提供します:
-
そのオブジェクトにアクセスするメソッドを含むJavaインタフェース
-
オブジェクトの現在の値または状態を取得するためのメソッドのプロトタイプ。
-
オブジェクトの新しい値または状態を設定するためのメソッドのプロトタイプ。
-
Groovyは実行時にデータ型を使用する場合にデータ型を導出できるため、スクリプトで戻り型を宣言する必要が厳密ではありません。 ただし、モデル・インタラクションに関連するオブジェクトおよびインタフェースを理解することをお薦めします。
コンフィギュレータAPIのインタフェースは、他のタイプのノード・オブジェクトとの相互作用のために、他の多くのインタフェースおよびメソッドも提供します。 この表は、一般的な操作に役立つメソッドの概要を示しています。 詳細は、「Oracle FusionコンフィギュレータのJava APIリファレンス」を参照してください。
オブジェクト |
インタフェース |
値の取得 |
値の設定 |
---|---|---|---|
整数機能 |
IIntegerFeature |
|
|
小数点機能 |
IDecimalFeature |
|
|
オプション機能のオプション |
IOptionFeature |
|
|
ブール機能 |
IBooleanFeature |
|
|
その他のモデル顧客対応
ここで説明するインタフェースを使用して、モデル・ノードとの様々な重要な相互作用を実行できます。
-
論理状態の取得および設定
-
プロパティへのアクセス
-
オプションへのアクセス
-
矛盾の上書き
-
論理矛盾の処理
-
例外の処理
使用可能なクラスの参照ドキュメント
コンフィギュレータと対話するためのクラスを含むパッケージは、oracle.apps.scm.configurator.runtime.core
です。
拡張ルール・スクリプトの記述に使用するパッケージ内のインタフェースのリファレンス・ドキュメントは、「Oracle FusionコンフィギュレータのJava APIリファレンス」です。
サポートされるクラスおよびインタフェースの一部のメンバーは拡張ルールでの使用がサポートされていないため、それらの使用によってコンパイル時にエラーが発生します。 サポートされていないメンバーは、APIリファレンス・ドキュメントから省略されます。 スクリプトが拡張ルールで使用できないクラスまたはメンバーを参照している場合は、検証メッセージによって無効な参照が識別されます。