拡張ルールの記述のガイドライン
次のガイドラインは、拡張ルールの作成に役立ちます。
イベントの識別
イベントは、実行時にモデルで発生するアクションまたは条件です。 たとえば、属性の値を変更します。 Oracle Configuratorでは、事前定義済イベントが実行時に発生した場合に拡張ルールを実行できます。 これらのイベントを使用してルールを開始できます。
このイベントを使用 | ユーザーの直後に拡張ルールを呼び出すには |
---|---|
postConfigInit |
セッションを開始します。 このイベントを使用して、ユーザーが品目の構成を開始するとすぐにモデルに値を設定します。 |
postConfigSave | 「保存」をクリックします。 |
postValueChange |
値を変更するか、ノード内で選択します。
たとえば、小数点以下桁数の値を変更します。 |
preAutoComplete |
「終了」をクリックするか、「終了してレビュー」をクリックします。
このイベントは、実行時にコンフィギュレータがオートコンプリートを実行する直前に発生します。
このイベントを使用して、構成を確認する前に、または構成を保存して終了する前に、モデルに値を設定します。 |
ベース・ノードの設定
ベース・ノードとして少なくとも1つのノードを指定する必要があります。
ベース・ノードに品目が含まれていて、そのノードに終了日を構成した場合、コンフィギュレータはその終了日以降に拡張ルールを実行しません。 ルールの終了日を確認するには、「コンフィギュレータ・モデルの編集」ページに移動し、「ルール」をクリックして、「詳細」セクションの「終了日」属性を確認します。
「ベース・ノードとして構成」をクリックすると、モデル内のノードを特定するパスが自動的に追加されます。
- このパスは、ノードの「詳細」セクションの「ベース・ノード」属性に追加されます。
- 「ベース・ノード」属性にパスを手動で入力することもできます。 その場合、入力する値にスペース文字()が含まれている場合は、一重引用符(' ')を使用して、入力したテキスト全体を囲む必要があります。
- なんらかの理由でパスをコピーする必要がある場合は、「構造」タブをクリックします。 「詳細」領域で、「パス」属性の値をコピーし、ノードの詳細領域に戻り、値を「ベース・ノード」属性に貼り付けます。 ノードの名前がモデル内で一意である場合、ノード名を「ベース・ノード」属性に入力し、モデルを保存すると、コンフィギュレータによってパス全体が追加されます。
モデルにベース・ノードの複数のインスタンスを含めることができる場合、コンフィギュレータは「インスタンス化スコープ」属性を有効にし、そのデフォルト値を「インスタンス」に構成します。 インスタンス化スコープは、ルールの実行方法を決定するフィルタです。 次のことを決定します:
- ルールを実行するタイミング
- ベース・ノードのインスタンスごとにルールの個別のインスタンスを作成するか、ベース・ノードのすべてのインスタンスに対してルールの単一インスタンスを作成するか
ルールのテキストを入力
- ルールが完全でない場合や正しくない場合でも、ルールのテキストの処理中にルールを保存します。
- 「元に戻す」をクリックするか、「やり直し」をクリックして、テキストの編集を元に戻すか、やり直します。
- テキストをナビゲートするには、「次」および「前へ」を使用します。
- 「検索および置換」をクリックして、テキストを検索して置換します。
- 「行に移動」に値を入力し、「虫眼鏡」をクリックして行に移動します。
- スクロール・バーを使用して、「最大化」をクリックし、「ペインを折りたたみます」をクリックしてテキストをナビゲートします。
- 書式設定されていないテキストを入力すると、キーワード、リテラルおよびコメントの識別に役立つ色の追加など、テキスト・エディタによって書式設定されます。
- 緑のカッコとカッコは、フレーズを正しく閉じていることを意味します。これは適切です。 赤はいないことを意味し、それは悪いことです。 コードを緑色になるまで修正します。
イベントのバインド
- 「検証」をクリックすると、コンフィギュレータによって、「クラス」属性および「メソッド」属性で選択できる値に、ルールのテキストで定義したクラスおよびメソッドが移入されます。 「検証」をいつでもクリックすると、スクリプトに対して追加または削除したクラスおよびメソッドに従って、コンフィギュレータによってこれらの値が更新されます。
- 「検証」を少なくとも1回クリックしていない場合、これらの属性のリストは空です。
-
イベントをバインドするときに、次の属性を設定します:
属性 説明 イベント メソッドを開始するイベントを選択します。 イベント・スコープ イベント・バインディングを適用するタイミングを指定するフィルタを作成します。 次のように設定します:
- 「グローバル」。 バインディングは、任意のノードの値を変更するときに使用します。
- 「基本ノード」。 バインディングは、ベース・ノードの値を変更する場合にのみ使用します。
スコープがモデルの拡張ルールに適用される場合、コンフィギュレータは、そのイベントにバインドされたすべてのメソッドを実行します。
Class バインドするメソッドを含むクラスを選択します。 クラスでメソッドを定義していない場合は、ScriptClassを選択します。 メソッド イベントにバインドするメソッドを選択します。 クラスでメソッドを定義していない場合は、クラスにないすべてのメソッドを実行する run()
を選択します。 - 1つの拡張ルールに複数のメソッドをバインドできます。 その場合、作成に使用する順序は、コンフィギュレータによるルールの実行方法に影響しません。
- 各ルールに少なくとも1つのイベントをバインドする必要があります。
引数のバインド
- コンフィギュレータは、ルールのテキストで定義した各メソッド引数を「引数バインディング」領域に自動的に追加します。
- コンフィギュレータは、「引数バインディング」領域に、各引数を独自の名前、仕様および値属性とともにリストします。
- Specification属性を使用して、メソッドが引数の値を取得する方法を指定します。
仕様 操作 リテラル 数値または文字列値を引用符なしで入力します。 モデル・ノード - 「引数バインディング」領域で、引数の「行」を選択していることを確認してください。 これを行わない場合、コンフィギュレータはこの行の「値」属性に移入されません。
- 「ルール」タブの「構造」セクションを展開します。
- 「構造」セクションで「モデル」を展開します。
- 引数の値を指定する「ノード」を右クリックし、「引数値として設定」をクリックします。
- コンフィギュレータがこの行の値属性を自動的に移入したことを確認します。
ノードの名前がモデル内で一意である場合は、モデル・ノード属性にノード名を直接入力でき、モデルの保存時にコンフィギュレータによってモデル・ノード属性へのパスが自動的に追加されます。
- コンフィギュレータに表示される各引数は、必ず「引数バインド」セクションにバインドしてください。
ルールの検証
- 「検証」をクリックして、ルールのテキストとバインディングを検証します。 この検証は、文ルールに対して実行する検証とは異なります。 文ルールでは、ルールのテキストのみが検証されます。
- コードを検証するには、いつでも「検証」をクリックします。 検証しても、作業内容は保存されず、影響もありません。
コンフィギュレータが行う一般的な検証のいくつかを次に示します。 次のことが確認されます:
- ルールのテキストが空ではありません。
- Groovy構文は正しいです。
- Groovyスクリプトに注釈がありません。
- ルールには少なくとも1つのベース・ノードがあります。
- ルールは、少なくとも1つのイベントをバインドします。
- イベントにバインドするGroovyメソッドに引数がある場合、検証によってすべての引数がバインドされていることが確認されます。
イベント・バインディングを変更すると、検証によって変更が正しいことが確認されます。 正しくない場合は、検証によってエラー・アイコンがイベントに追加されます。 たとえば、メソッドの名前を変更すると、バインディングが正しくなくなります。 不適切なバインディングがある場合、モデルのテスト時にコンフィギュレータはそれを無視します。
その他
ルールが参照するノードの名前を変更すると、コンフィギュレータは次の処理を実行します:
- 変更したノードの元の名前を識別する警告が表示されます。
- ルールの「ステータス」属性を「エラー」に変更します。
ノードの名前を元の値に変更するか、新しいノード名を使用するようにスクリプトを更新する必要があります。
有効でないルールを含むモデルをテストできます。 有効でないルールを含むモデルはリリースできません。 また、有効でないルールを無効にしてモデルを解放することもできます。