拡張ルールの作成
Groovyを使用して拡張をコーディングし、Groovyメソッドをイベントにバインドし、メソッドの引数をソースにバインドしてから、作業をテストします。
設定のサマリー
- モデルと補足機能を作成します。
- 拡張ルールを作成します。
- groovyメソッドをイベントにバインドします。
- メソッドの引数をソースにバインドします。
- モデルをテストします。
zCZ_CAR4DRSDNという名前のモデルを作成し、定価に20,000から60,000の値を指定できるようにしてから、0%から10%の割引を適用する必要があるとします。
この項ではサンプル値を使用しています。 ユーザーは、ビジネス要件に応じて別の値を使用できます。
モデルおよび補助機能の作成
- 「コンフィギュレータ・モデル」作業領域に移動します。
- 新しいワークスペースを作成し、「有効開始日」を明日に設定します。 詳細は、「ワークスペースの管理」を参照してください。
- 「ワークスペースの管理」ページの検索結果で、新しい「ワークスペース」をクリックします。
- 「ワークスペース」ページで、「処理」→「選択して追加」→「モデル」の順にクリックします。
-
表示されるダイアログで、モデルを検索して選択し、OKをクリックします。
属性 値 モデル zCZ_CAR4DRSDN - 「ワークスペースの参加者」領域で、zCZ_CAR4DRSDNをクリックします。
- 「コンフィギュレータ・モデルの編集」ページで、zCZ_CAR4DRSDNモデルの「ルート・ノード」を選択し、「処理」>「作成」>「小数機能」をクリックします。
-
表示されるダイアログで、値を設定します。
属性 値 名前 定価 最小 20,000 最大 60,000 ドメイン順序 システム・デフォルト -
「適用して別の作成」をクリックし、値を設定します。
属性 値 名前 割引 最小 0 最大 10 ドメイン順序 システム・デフォルト -
「適用して別の作成」をクリックし、値を設定します。
属性 値 名前 販売価格 最小 0 最大 100,000 ドメイン順序 システム・デフォルト - OKをクリックし、「保存」をクリックします。
拡張ルールの作成
定価に割引を適用するルールを作成し、その結果を販売価格にします。
- 「コンフィギュレータ・モデルの編集」ページで、「ルール」をクリックします。
- 「処理」>「作成」>「拡張ルール」をクリックします。
- 表示されるダイアログで、「名前」属性を「割引の適用」に設定し、OKをクリックします。
- 構造領域で、「ツリー」を展開します。
- 割引「ノード」を右クリックし、「基本ノードとして設定」をクリックします。
- 「ルール・テキスト」領域で、次のGroovyスクリプトを入力します:
// Import objects from the configurator model. import oracle.apps.scm.configurator.runtime.core.IConfiguration import oracle.apps.scm.configurator.runtime.core.IBomModelInstance import oracle.apps.scm.configurator.runtime.core.IDecimalFeature // Define the method that will apply the discount. def applyDiscount ( p_listPrice, p_discount ) { // Use arguments to get values from the nodes. double listPrice = ((IDecimalFeature)p_listPrice).getValue() double discount = ((IDecimalFeature)p_discount).getValue() double salePrice = 0 // Calculate the price. salePrice = listPrice - ( listPrice * ( discount / 100 ) ) // Get the node where you will set the value. IConfiguration config = cxEvent.getConfiguration() IBomModelInstance root = config.getRootBomModel() IDecimalFeature salePriceNode = root.getChildByName("Sale Price") // Set the value. ((IDecimalFeature)salePriceNode).setDecimalValue(salePrice) }
- 「保存」をクリックし、「検証」をクリックします。
イベントへのメソッドのバインド
-
「イベント・バインディング」領域で、「作成」をクリックし、値を設定します。
属性 値 イベント postValueChange イベント・スコープ 基本ノード Class ScriptClass メソッド applyDiscount
Method属性には、applyDiscountの引数(
p_listPrice
やp_discount
など)も表示されることに注意してください。 - 「保存」をクリックします。
メソッドの引数のソースへのバインド
-
「引数バインディング」領域で、この値を持つ「行」をクリックします。
名前 仕様 値 p_listPrice モデル・ノード 空 - 「構造」領域で、「定価」「ノード」を右クリックし、「引数値として設定」をクリックします。
-
「引数バインディング」領域で、行にこの値があることを確認します。
名前 仕様 値 p_listPrice モデル・ノード 'zCZ_CAR4DRSDN'.'List Price' -
「引数バインディング」領域で、この値を持つ「行」をクリックします。
名前 仕様 値 p_discount モデル・ノード 空 - 「構造」領域で、「割引」「ノード」を右クリックし、「引数値として設定」をクリックします。
-
「引数バインディング」領域で、行にこの値があることを確認します。
名前 仕様 値 p_discount モデル・ノード 'zCZ_CAR4DRSDN'.'Discount' - 「保存」をクリックし、「検証」をクリックしてから、「保存してコンパイル」をクリックします。
モデルのテスト
- 「テスト・モデル」をクリックします。
- 表示されたダイアログで値を設定し、OKをクリックします。
属性 値 ユーザー・インタフェース デフォルト ルート数量 1 - 「テスト」の「モデル」ページで、新しい10進数機能がページに表示され、モデルに追加したときと同じ順序で表示されることを確認します:
- 定価
- 割引
- 販売価格
- 「定価」属性に、
30,000
と入力します。 - 20,000から60,000までの値のみを入力できることを確認します。 これらは、定価小数機能の作成時に指定した最小値と最大値です。
- 「販売価格」属性が空であることを確認します。
- 「Discount」属性に、
10
と入力します。 - 0から10までの値のみを入力できることを確認します。 これらは、小数の割引機能の作成時に指定した最小値と最大値です。
- 「割引」属性で「入力」をクリックし、Oracle Configuratorによって「販売価格」属性の値が空から27,000に更新されることを確認します。
割引は10%、定価は30,000です。30,000の10%は3,000に、30,000から3,000は27,000に等しくなります。
- 「割引」属性に
20
と入力し、「販売価格」属性に24,000が含まれるようになったことを確認します。この変更は、割引属性の値を変更したときに発生するイベントに拡張ルールをバインドしたため、コンフィギュレータによって適用されます。
- 「定価」属性に
20,000
と入力します。コンフィギュレータが販売価格を更新しないことに注意してください。 これは、定価の値を変更したときに発生するイベントにルールをバインドしなかったためです。
実際の実装では、ルールを定価にバインドすることもできます。 ここでは、ロジックがどのように機能するかを説明しません。 知識をテストするために、そのバインドを設定し、それが機能するかどうかを確認できます。
- 「終了」をクリックします。