機械翻訳について

拡張ルール・テキストの作成方法

拡張ルールのルール・テキストとして使用できるスクリプトは、Groovyスクリプト言語で記述され、コンフィギュレータ・モデル・オブジェクトにアクセスするインタフェースを使用します。

Groovyスクリプト言語

Groovy言語は、拡張ルールのスクリプトを記述する便利な手段を提供します。

Groovyは、オブジェクト指向で動的にコンパイルされます。 Javaプラットフォーム用のスクリプト言語として使用できます。 Groovyは、他の場所(http://groovy-lang.org)およびその他のパブリック・ソースで広く説明されています。

拡張ルール・スクリプトを記述する場合、Groovyの関連機能は次のとおりです:

  • 多くのベースJavaパッケージが自動的にインポートされるため、スクリプトにインポートする必要はありません。

  • defキーワードを使用して変数を宣言できます。型を宣言する必要はありません。

  • クラス外でメソッドおよび変数を定義できます。 これらは、スクリプト内でグローバルと見なされます。 グローバル定義は、組込みクラスScriptClass内で実行され、組込みメソッドrun()で実行されます。

  • クラスにメソッドと変数を配置することには、次のような利点があります:

    • カプセル化および継承を使用できます。

    • Javaのように複雑なロジックを構築できます。

    • クラス内のメソッドを編成すると、イベント・バインディングを追加するときに、「クラス」および「メソッド」リストからメソッドを簡単に選択できるようになります。

    クラスにメソッドおよび変数を配置しないという利点は次のとおりです:

    • クラスを使用しない場合は、グローバル・クラスScriptClassおよびグローバル・メソッドrun()にバインドされたコードを追加して実行するだけで、コードを記述し、コードをより迅速にテストできます。

重要なコンフィギュレータ・オブジェクトへのアクセス

コンフィギュレータ・ランタイム・コア・パッケージ内の特定のオブジェクトは、構成セッション中に最も一般的に必要なオブジェクトへのアクセスを提供します。

拡張ルールが実行されると、コンフィギュレータ・フレームワークによって、ルールのイベント・バインディングで指定されたイベントを表すオブジェクトが自動的に初期化されます。 このオブジェクトは、cxEventという名前のインタフェースICXEventのインスタンスです。

次の表に、構成セッション中に最も一般的に必要となるオブジェクトを示します。 表では、オブジェクトごとに次の情報を提供します:

  • オブジェクトの簡単な説明

  • そのオブジェクトにアクセスするメソッドを含むJavaインタフェース

  • オブジェクトのインスタンスを作成するコードの簡単な例

  • オブジェクトのインスタンスを使用するコードの短い例

オブジェクト

アクセスされたエンティティ

使用されるインタフェース

オブジェクトの作成例

オブジェクトの使用例

イベント

ルールのイベント・バインディングによって指定されたイベント。

ICXEvent

コードは必要ありません。 オブジェクトcxEventは、ルールの実行時に自動的に作成されます。

ルールをトリガーしたイベントに関連付けられた現在の構成を取得します。

IConfiguration config = cxEvent.getConfiguration()

ルールの基本ノード

ルールに関連付けられた基本ノード。

ICXEvent

バインド・イベントによってトリガーされるルールのベース・ノードを取得します。

def baseNode = cxEvent.getBaseNode()

ルールのベース・ノードがエンド・ユーザーによって選択されているかどうかをテストします。

if (baseNode.isSelected()) ...

構成

セッション中のアクティブな構成。

IConfiguration

バインド・イベントによってトリガーされたルールの影響を受ける構成を取得します。

IConfiguration config = cxEvent.getConfiguration()

現在構成中の品目ベース・モデルのルート・ノードを取得します。

def root = config.getRootBomModel()

モデルのルート・ノード

構成されるモデルのルート・ノード。

IBomModelInstance

現在構成中の品目ベース・モデルのルート・ノードを取得します。

IBomModelInstance root = config.getRootBomModel()

現在のモデルの子ノードを取得し、その品目名を使用して、ルート・ノードからモデル・ツリーを検索します。

def childItem = root.getChildByName("CM85010")

モデル・ノード値との相互作用

ここで説明するインタフェースを使用して、モデル・ノードの値と状態を取得および設定できます。

次の表に、コンフィギュレータ・モデルのノードのタイプを表すオブジェクトを示します。 表では、オブジェクトごとに次の情報を提供します:

  • そのオブジェクトにアクセスするメソッドを含むJavaインタフェース

  • オブジェクトの現在の値または状態を取得するためのメソッドのプロトタイプ。

  • オブジェクトの新しい値または状態を設定するためのメソッドのプロトタイプ。

  • Groovyは実行時にデータ型を使用する場合にデータ型を導出できるため、スクリプトで戻り型を宣言する必要が厳密ではありません。 ただし、モデル・インタラクションに関連するオブジェクトおよびインタフェースを理解することをお薦めします。

コンフィギュレータAPIのインタフェースは、他のタイプのノード・オブジェクトとの相互作用のために、他の多くのインタフェースおよびメソッドも提供します。 この表は、一般的な操作に役立つメソッドの概要を示しています。 詳細は、「Oracle FusionコンフィギュレータのJava APIリファレンス」を参照してください。

オブジェクト

インタフェース

値の取得

値の設定

整数機能

IIntegerFeature

int getValue()

void setIntValue(int value)

小数点機能

IDecimalFeature

double getValue()

void setDecimalValue(double value)

オプション機能のオプション

IOptionFeature

IOption getSelectedOption()

void select()

ブール機能

IBooleanFeature

boolean isSelected()

void toggle()

その他のモデル顧客対応

ここで説明するインタフェースを使用して、モデル・ノードとの様々な重要な相互作用を実行できます。

  • 論理状態の取得および設定

  • プロパティへのアクセス

  • オプションへのアクセス

  • 矛盾の上書き

  • 論理矛盾の処理

  • 例外の処理

使用可能なクラスの参照ドキュメント

コンフィギュレータと対話するためのクラスを含むパッケージは、oracle.apps.scm.configurator.runtime.coreです。

拡張ルール・スクリプトの記述に使用するパッケージ内のインタフェースのリファレンス・ドキュメントは、「Oracle FusionコンフィギュレータのJava APIリファレンス」です。

サポートされるクラスおよびインタフェースの一部のメンバーは拡張ルールでの使用がサポートされていないため、それらの使用によってコンパイル時にエラーが発生します。 サポートされていないメンバーは、APIリファレンス・ドキュメントから省略されます。 スクリプトが拡張ルールで使用できないクラスまたはメンバーを参照している場合は、検証メッセージによって無効な参照が識別されます。