拡張ルールの作成
この例では、販売価格に到達するために、品目の定価に異なる割引を適用した場合の影響を計算する拡張ルールを定義します。
この例で割引の計算に使用される式は単純ですが、この方法を使用して、ルール・テキストのスクリプトを使用して、より複雑な拡張ルール機能を作成できます。
この例のタスクは次のとおりです:
-
定価と割引、販売価格の補足機能を定義します。
-
割引機能ノードをベース・ノードとする拡張ルールを作成します。
-
割引機能を定義し、それを補足機能に適用するGroovyスクリプトを記述します。
-
関数のイベント・バインドと引数バインドを定義します。
-
ルールをテストします。
補足機能の定義
補足機能は、定価と割引に対するエンド・ユーザーの入力、および販売価格の計算された出力に使用されます。
-
コンフィギュレータ・モデル作業領域の概要ページで、処理メニューから「作成」を選択して、新しいワークスペースを作成します。 Effective Start Date(有効開始日)を明日の日付に設定します。
-
ワークスペースを開きます。 ワークスペース・ページで、「処理」メニューから「モデルの選択および追加」を選択します。
-
選択および追加: モデル・ページで、モデルを検索して選択し、OKをクリックしてワークスペースに追加します。 他のワークスペースのドラフトに関する警告は無視してください。
-
ワークスペース・ページで、モデルの名前をクリックして編集用に開きます。
-
「コンフィギュレータ・モデルの編集」ページで、モデルのルート・ノードを選択し、「処理」メニューから「小数機能の作成」を選択します。
-
次の表に示すように、次の10進機能を作成します。
フィールド
値
名前
定価
最小
20,000
最大
60.000
フィールド
値
名前
割引
最小
0
最大
10
フィールド
値
名前
販売価格
最小
0
最大
100.000
-
「保存」をクリックします。
拡張ルールの作成
拡張ルールによって、割引が定価に適用され、その結果が販売価格になります。
-
「コンフィギュレータ・モデルの編集」ページのルール・タブで、ルール・ツールバーから「拡張ルールの作成」を選択します。
-
割引の適用など、拡張ルールの「名前」を入力します。
-
構造パレットで、モデル・ツリーを展開し、ノード「割引」を選択して右クリックし、コンテキスト・メニューから「基本ノードとして設定」を選択します。
-
「保存」をクリックします。
ルール・テキストの記述
拡張ルールの動作は、Groovyスクリプト言語で記述された「ルール・テキスト」フィールドに入力されたスクリプトで定義されます。
-
「ルール・テキスト」フィールドに、次のスクリプトを入力します。
// Import the needed Configurator interfaces 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 discounting function. def applyDiscount ( p_listPrice, p_discount ) { // Get values of nodes from arguments. 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 whose value will be set. IConfiguration config = cxEvent.getConfiguration() IBomModelInstance root = config.getRootBomModel() IDecimalFeature salePriceNode = root.getChildByName("Sale Price") // Set the value. ((IDecimalFeature)salePriceNode).setDecimalValue(salePrice) }
-
「保存」をクリックします。
-
「検証」をクリックします。
-
エラー・メッセージ
The rule is invalid. The extension rule must have at least one event binding defined.
が表示されます
イベント・バインディングの定義
スクリプトを実行するには、コンフィギュレータ・イベントにバインドする必要があります。 次に、ルールにイベント・バインドを追加します。
-
「イベント・バインディング」表で、「作成」をクリック
-
イベント・バインディングの新しい行で、「イベント」リストから
postValueChange
を選択します。 -
「イベント・スコープ」リストから、
Base node
を選択します。 -
「クラス」リストから、
ScriptClass
を選択します。 -
「メソッド」リストから、
applyDiscount
を選択します。 引数p_listPrice
およびp_discount
は、関数名とともに表示されます。 -
「保存」をクリックします。
引数バインドの定義
「イベント・バインディング」表でapplyDiscount
メソッドを選択すると、「引数バインド」表が自動的に表示され、各引数の行が移入されます
-
「引数バインド」表で、引数
p_listPrice
の行を選択します。 -
その行の「仕様」列から、
Model node
を選択します。 -
構造ペインでモデル・ツリーを展開し、ノード
List Price
を選択してから、ノードを右クリックして「引数値として設定」を選択します。 -
「検証」をクリックします。
-
エラー・メッセージ
The rule is invalid. The node referenced in the argument p_discount bound to the event postValueChange was not found.
が表示されます -
引数
p_discount
およびノードDiscount
について、前述の引数バインディング・ステップを繰り返します。 -
「検証」をクリックします。
-
情報メッセージ
No errors were detected.
が表示されます -
「保存してコンパイル」をクリックします。
-
確認メッセージ
Model compilation has completed without errors.
が表示されます。
モデルのテスト
モデルをテストして、拡張ルールの機能を検証します。
-
「コンフィギュレータ・モデルの編集」ページの上部で、「テスト・モデル」を選択します。
-
テスト「モデル」ダイアログ・ボックスで、「ユーザー・インタフェース」が
Default
に設定されていることを確認し、OKをクリックします。 -
テスト「モデル」ページでは、追加した小数点以下の3つの機能のフィールドが、作成した順序で表示されます:
-
定価
-
割引
-
販売価格
-
-
「定価」フィールドに、値30,000を入力します。 小数機能の作成時に定義した最小値と最大値の間のみ、値を入力できることに注意してください。
-
「割引」フィールドに、値5を入力します。 許容される値は、定義した最小値と最大値の間にあることに注意してください。
-
割引フィールドでEnterを押すか、またはTabを押して外すと、「販売価格」フィールドの値が空から28500に変わります。
-
Discount(割引)フィールドに別の値を入力し、Sale price(販売価格)フィールドの変更を確認します。 この変更は、拡張ルールの実行を割引の値の変更にバインドしたために発生します。
-
「定価」フィールドに別の値を入力し、「定価」の値を変更するルールにはバインドがないため、販売価格に変更がないことを確認します。
-
「終了」をクリックして、テスト・セッションを終了します。