拡張ルールの作成方法
Groovyスクリプト言語で記述したコードを使用する拡張ルールを作成することで、コンフィギュレータ・モデルの機能を拡張できます。
拡張ルールの作成に必要なタスクは、次のとおりです:
-
ルールの作成と基本ノードの割当て
-
必要に応じて、インスタンス化スコープを選択
-
ルール・テキストの入力
-
イベント・バインディングの追加
-
必要に応じて、引数バインディングを追加
-
ルールの検証とテスト
前提条件
拡張ルールを定義する際には、次のことが必要です。
-
拡張ルールのベース・ノードになるモデル・ノードはすでに存在している必要があります。
ノート: モデル・ノードが終了日が設定されている可能性がある品目タイプである場合、品目の終了日時に拡張ルールが無効になります。 拡張ルールの終了日は、「コンフィギュレータ・モデルの編集」ページのルール・タブの詳細リージョンの「終了日」フィールドに表示されます。
拡張ルールの作成とベース・ノードの割当て
-
「コンフィギュレータ・モデルの編集」ページのルール・タブで、ルール・ツールバーから「拡張ルールの作成」を選択します。
-
拡張ルールの名前とオプションの説明を入力します。
-
構造ペインでモデル・ツリーを開き、拡張ルールのベース・ノードとなるモデル・ノードを選択します。
ルールを含むモデル内で、拡張ルールを任意のタイプのノードに関連付けることができます。
-
モデル・ノードを右クリックし、コンテキスト・メニューから「基本ノードとして設定」を選択します。 モデル・ノードの完全修飾ノード名パスが「基本ノード」フィールドに挿入されます。
「基本ノード」フィールドに、ノード・パスをプレーン・テキストとして直接入力することもできます。スペースを含むノード名は、一重引用符で区切る必要があります。 ノード・パスは、モデルの構造タブの詳細リージョンにある「パス」フィールドからコピーできます。ノードの名前がモデル内で一意である場合は、「基本ノード」フィールドにノード名(説明ではなく)を直接入力できます。 モデルを保存すると、フル・ノード・パスが追加されます。
-
ベース・ノードに複数のインスタンスを含めることができる場合、「インスタンス化スコープ」制御が有効になります。 デフォルトの選択は「インスタンス」です。
ルール・テキストの入力
ルール・テキストは、拡張ルールの動作を定義します。
-
有効なGroovyスクリプトのテキストを「ルール・テキスト」フィールドに入力します。 「保存」をクリックして、ルール・テキストと残りのルール定義を保存します。
ヒント: ルール・テキストが完了していないか修正されていない場合でも、ルール・テキストの操作時にルールを保存できます。 -
拡張ルールおよびルール・テキストが有効であることを確認するには、定義中の任意の時点で「検証」をクリックします。
イベント・バインディングの追加
少なくとも1つのイベント・バインディングをルールに追加します。
-
「イベント・バインディング」表で、「作成」をクリック
-
イベント・バインディングの新しい行で、「イベント」リストからバインドするイベントを選択します。
-
「イベント・スコープ」リストから、イベントが評価されるイベント・スコープを選択します。
-
「クラス」リストから、イベントにバインドするメソッドを含むクラスを選択します。
スクリプトにクラスが定義されていない場合は、グローバルに定義されたメソッドを含むScriptClassを選択します。
ヒント: 検証をクリックして、スクリプトに変更を加えた後にクラスおよびメソッドリストをリフレッシュし、クラスまたはメソッドを追加します。 「検証」をまだクリックしていない場合、リストは空になります。 -
「メソッド」リストから、イベントにバインドするメソッドを選択します。
スクリプトにメソッドが明示的に定義されていない場合は、グローバルに定義されたメソッドを実行するrun()を選択します。
1つの拡張ルールに対して複数のイベント・バインディングを作成できます。 作成する順序は、ルールの実行にとって重要ではありません。
引数バインドの追加
イベント・バインディングの引数を持つメソッドを選択すると、「引数バインド」表に各引数の行が自動的に移入されます。 各引数の「名前」列には、ルール・テキストでメソッド定義からコピーされた、引数の読取り専用名が含まれています。
-
「引数バインド」表の行を選択します。
-
各引数の「仕様」列から、メソッドが引数値を取得する方法の仕様を選択します。
-
「リテラル」の仕様を選択した場合は、引用符なしで数値または文字列値を入力します。
-
「モデル・ノード」の仕様を選択した場合は、構造ペインでモデル・ツリーを開き、引数の値を提供するモデル・ノードを選択します。 次に、ノードを右クリックし、「引数値として設定」を選択します。 ノードの名前がモデル内で一意である場合は、「モデル・ノード」フィールドにノード名(説明は不可)を直接入力できます。 モデルを保存すると、フル・ノード・パスが追加されます。
-
「引数バインド」表の引数ごとに、引数バインディングを繰り返します。
-
「検証」をクリックして、ルール・テキストと残りのルールの両方を検証します。
-
「保存」、「保存してコンパイル」または「保存してクローズ」をクリックします。
拡張ルールの検証
拡張ルール全体(ルール・テキストとバインディングの両方)が有効であることを確認するには、定義中の任意の時点で「検証」をクリックします。 (対照的に、文ルールの「検証」ボタンは、ルール・テキストのみを検証します。)
ルールの定義中はいつでも検証できます。 検証で一般的に報告される要件の一部を次に示します
-
拡張ルールにはベース・ノードが必要です。
-
ルール・テキストは空にできません。
-
拡張ルールには少なくとも1つのイベント・バインディングが必要です。
-
イベントにバインドされたGroovyメソッドに引数がある場合は、引数をバインドする必要があります。
-
Groovy注釈は使用できません。
-
Groovyスクリプトは構文的に正しい必要があります。 Groovy構文およびプログラミング・エラーが報告されます。
-
既存のイベント・バインドを無効にする方法でスクリプトを変更した場合、無効なイベントはエラー・アイコンでマークされます。 たとえば、メソッドの名前を変更すると、そのメソッドを使用している偶数バインディングは無効になります。 バインディングが無効なルールは無効になり、モデルのテスト時には無視されます