機械翻訳について

拡張ルールの作成

この例では、販売価格に到達するために、品目の定価に異なる割引を適用した場合の影響を計算する拡張ルールを定義します。

この例で割引の計算に使用される式は単純ですが、この方法を使用して、ルール・テキストのスクリプトを使用して、より複雑な拡張ルール機能を作成できます。

この例のタスクは次のとおりです:

  1. 定価と割引、販売価格の補足機能を定義します。

  2. 割引機能ノードをベース・ノードとする拡張ルールを作成します。

  3. 割引機能を定義し、それを補足機能に適用するGroovyスクリプトを記述します。

  4. 関数のイベント・バインドと引数バインドを定義します。

  5. ルールをテストします。

注意: この簡略化された例は、説明のみを目的としています。 実行時にコンフィギュレータに表示される価格構成情報は、通常、Oracle Pricingとの統合によって提供されます。

補足機能の定義

補足機能は、定価と割引に対するエンド・ユーザーの入力、および販売価格の計算された出力に使用されます。

  1. コンフィギュレータ・モデル作業領域の概要ページで、処理メニューから「作成」を選択して、新しいワークスペースを作成します。 Effective Start Date(有効開始日)を明日の日付に設定します。

  2. ワークスペースを開きます。 ワークスペース・ページで、「処理」メニューから「モデルの選択および追加」を選択します。

  3. 選択および追加: モデル・ページで、モデルを検索して選択し、OKをクリックしてワークスペースに追加します。 他のワークスペースのドラフトに関する警告は無視してください。

  4. ワークスペース・ページで、モデルの名前をクリックして編集用に開きます。

  5. 「コンフィギュレータ・モデルの編集」ページで、モデルのルート・ノードを選択し、「処理」メニューから「小数機能の作成」を選択します。

  6. 次の表に示すように、次の10進機能を作成します。

    フィールド

    名前

    定価

    最小

    20,000

    最大

    60.000

    フィールド

    名前

    割引

    最小

    0

    最大

    10

    フィールド

    名前

    販売価格

    最小

    0

    最大

    100.000

  7. 「保存」をクリックします。

拡張ルールの作成

拡張ルールによって、割引が定価に適用され、その結果が販売価格になります。

  1. 「コンフィギュレータ・モデルの編集」ページのルール・タブで、ルール・ツールバーから「拡張ルールの作成」を選択します。

  2. 割引の適用など、拡張ルールの「名前」を入力します。

  3. 構造パレットで、モデル・ツリーを展開し、ノード「割引」を選択して右クリックし、コンテキスト・メニューから「基本ノードとして設定」を選択します。

  4. 「保存」をクリックします。

ルール・テキストの記述

拡張ルールの動作は、Groovyスクリプト言語で記述された「ルール・テキスト」フィールドに入力されたスクリプトで定義されます。

  1. 「ルール・テキスト」フィールドに、次のスクリプトを入力します。

    // 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)
    }
  2. 「保存」をクリックします。

  3. 「検証」をクリックします。

  4. エラー・メッセージThe rule is invalid. The extension rule must have at least one event binding defined.が表示されます

イベント・バインディングの定義

スクリプトを実行するには、コンフィギュレータ・イベントにバインドする必要があります。 次に、ルールにイベント・バインドを追加します。

  1. 「イベント・バインディング」表で、「作成」をクリック

  2. イベント・バインディングの新しい行で、「イベント」リストからpostValueChangeを選択します。

  3. 「イベント・スコープ」リストから、Base nodeを選択します。

  4. 「クラス」リストから、ScriptClassを選択します。

  5. 「メソッド」リストから、applyDiscountを選択します。 引数p_listPriceおよびp_discountは、関数名とともに表示されます。

  6. 「保存」をクリックします。

引数バインドの定義

「イベント・バインディング」表でapplyDiscountメソッドを選択すると、「引数バインド」表が自動的に表示され、各引数の行が移入されます

  1. 「引数バインド」表で、引数p_listPriceの行を選択します。

  2. その行の「仕様」列から、Model nodeを選択します。

  3. 構造ペインでモデル・ツリーを展開し、ノードList Priceを選択してから、ノードを右クリックして「引数値として設定」を選択します。

  4. 「検証」をクリックします。

  5. エラー・メッセージThe rule is invalid. The node referenced in the argument p_discount bound to the event postValueChange was not found.が表示されます

  6. 引数p_discountおよびノードDiscountについて、前述の引数バインディング・ステップを繰り返します。

  7. 「検証」をクリックします。

  8. 情報メッセージNo errors were detected.が表示されます

  9. 「保存してコンパイル」をクリックします。

  10. 確認メッセージModel compilation has completed without errors.が表示されます。

モデルのテスト

モデルをテストして、拡張ルールの機能を検証します。

  1. 「コンフィギュレータ・モデルの編集」ページの上部で、「テスト・モデル」を選択します。

  2. テスト「モデル」ダイアログ・ボックスで、「ユーザー・インタフェース」Defaultに設定されていることを確認し、OKをクリックします。

  3. テスト「モデル」ページでは、追加した小数点以下の3つの機能のフィールドが、作成した順序で表示されます:

    • 定価

    • 割引

    • 販売価格

  4. 「定価」フィールドに、値30,000を入力します。 小数機能の作成時に定義した最小値と最大値の間のみ、値を入力できることに注意してください。

  5. 「割引」フィールドに、値5を入力します。 許容される値は、定義した最小値と最大値の間にあることに注意してください。

  6. 割引フィールドでEnterを押すか、またはTabを押して外すと、「販売価格」フィールドの値が空から28500に変わります。

  7. Discount(割引)フィールドに別の値を入力し、Sale price(販売価格)フィールドの変更を確認します。 この変更は、拡張ルールの実行を割引の値の変更にバインドしたために発生します。

  8. 「定価」フィールドに別の値を入力し、「定価」の値を変更するルールにはバインドがないため、販売価格に変更がないことを確認します。

  9. 「終了」をクリックして、テスト・セッションを終了します。