機械翻訳について

累積またはカスケードする割引の作成

1つの価格表に累積される1つ以上の割引を適用します。

カスケードする1つ以上の割引を適用することもできます。 たとえば、実行中の正価です。

割引は、様々なタイプの調整に従って、単純なルールまたは価格設定マトリックスを介して適用します。

  • 割引額

  • 割引率

  • 値入れ額

  • 値入れ率

  • 価格上書き

重要な概念をいくつか次に示します。

  • 「カスケード割引」 各割引ルールが品目に適用される割引を減算する計算。 カスケード・ディスカウントの動作は次のとおりです。

    • ルール名に従って、アルファベット順の昇順で割引を減算します。

    • 各調整を適用する際に、定価が基準として使用されます。

    • 各ルールに割引を適用するたびに、Running Net Priceの値を減らします。

    • 各ルールの基準を一定に保つことはできません。 かわりに、割引はルールからルールにカスケードされます。

  • 「累積割引」 各割引ルールが品目に適用される割引を減算する計算。 累積割引の動作は次のとおりです。

    • ルール名に従って、アルファベット順の昇順で割引を減算します。

    • 各ルールが適用される間、合計割引額が累計されます。

    • 各調整を適用する際に、定価を基準として使用します。

    • 各割引を適用するときに定価の値を変更しません。

    • 各ルールの基準を一定に保ちます。 割引は、ルールごとに変わりません。

  • 「実行中の正価」 価格設定中に値上げまたは値下げが可能なオブジェクトで、品目の価格に対して他の計算が実行されます。

構成品目に対して累計またはカスケードされる割引は作成できません。

設定の概要

  1. 価格要素と価格設定基準を作成します。

  2. 価格設定アルゴリズムを変更します。

  3. 割引の価格設定アルゴリズムを変更します。

  4. 割引ルールを作成します。

  5. 設定をテストします。

注意: このトピックの例では、価格設定を設定する1つの方法について説明します。 これは、価格設定の様々な設定方法について学習するために使用できる一般的な概要としてのみ意図されています。 ビジネス要件に応じて、実装に異なるプロシージャ、異なるステップ、異なる値および異なるオブジェクトを使用する必要があります。

1. 価格要素と価格設定基準の作成

実行中の正価に使用する価格要素と価格設定基準を作成します。

  1. 「設定および保守」作業領域に移動してから、タスクに移動します。

    • オファリング: オーダー管理

    • 機能領域: 価格設定

    • タスク: 価格要素の管理

  2. 「価格要素の管理」ページで、「処理」>「行の追加」をクリックして値を設定し、「保存してクローズ」をクリックします。

    属性

    要素コード

    ELEMENT_FOR_NET_PRICE

    要素名

    定価の実行

    タイプ

    価格

    アクティブ

    チェック・マークが含まれます。

  3. 検索ページで、価格設定ベースの管理を検索して開きます。

  4. 「価格設定ベースの管理」ページで、「処理」>「作成」をクリックし、値を設定して「保存してクローズ」>「完了」>「完了」をクリックします。

    属性

    名前

    定価の実行

    使用方法

    修正基準

    価格要素

    定価の実行

    説明

    実行中の正価に対する累積およびカスケード割引の価格設定基準。

    アクティブ

    チェック・マークが含まれます。

サービス・マッピング属性の作成

属性に従って単純な割引と割引のどちらを使用するかに応じて、販売サービスのマッピングを異なる方法で変更します。

  1. 価格設定管理作業領域に移動し、「タスク」>「サービス・マッピングの管理」をクリックします。

  2. 「サービス・マッピングの管理」ページで、「販売」をクリックします。

  3. 「サービス・マッピングの編集」ページで、「サービス」>「例による問合せ」をクリックし、値を入力して、キーボードのEnterキーを押します。

    属性

    サービス

    PriceRequestInternal

単純な割引のサービス・マッピングの変更

ここでは、Salesサービス・マッピングで行った変更を示します。

PriceRequestInternalサービスのTermQueueエンティティ

PriceRequestInternalサービスのTermQueueエンティティにTermName_Custom属性を追加します。

層調整に割引を追加する必要がある場合は、TermQueueエンティティのかわりにTierLineQueueエンティティを使用します。 属性に従って割引を適用する必要がある場合は、「価格設定の品目への独自の属性の追加」を参照してください。

  1. 詳細領域のエンティティ・タブで、値を含む「行」をクリックします。

    属性

    エンティティ

    TermQueue

  2. 詳細領域で、「処理」>「行の追加」をクリックし、値を設定します。

    属性

    エンティティ

    TermQueue

    読取

    チェック・マークが含まれます。

    書込み

    チェック・マークが含まれます。

  3. エンティティ領域で、「表示」>「列」>「すべて表示」をクリックし、「処理」>「行の追加」をクリックして値を設定し、「保存」をクリックします。

    属性

    属性

    TermName_Custom

    別名

    TermName

    読取

    チェック・マークが含まれます。

    書込み

    チェック・マークが含まれます。

    タイプ

    文字列

属性に従った割引のサービス・マッピングの変更

ここでは、Salesサービス・マッピングで行った変更を示します。

PriceRequestInternalサービスのMatrixQueueエンティティ

PriceRequestInternalサービスのMatrixQueueエンティティにTermName_Custom属性を追加します。

  1. 詳細領域のエンティティ・タブで、値を含む「行」をクリックします。

    属性

    エンティティ

    MatrixQueue

  2. 詳細領域で、「処理」>「行の追加」をクリックし、値を設定します。

    属性

    エンティティ

    MatrixQueue

    読取

    チェック・マークが含まれます。

    書込み

    チェック・マークが含まれます。

  3. エンティティ領域の「表示」>「列」>「すべて表示」で、「処理」>「行の追加」をクリックして値を設定し、「保存」をクリックします。

    属性

    属性

    TermName_Custom

    別名

    TermName

    読取

    チェック・マークが含まれます。

    書込み

    チェック・マークが含まれます。

    タイプ

    文字列

階層調整のサービス・マッピングの変更

TierQueueエンティティを追加します。

TierQueueエンティティを追加します。

演習

  1. 「タスク」>「サービス・マッピングの管理」をクリックします。
  2. 「サービス・マッピングの管理」ページの名前列で、「販売」をクリックします。
  3. 「サービス・マッピングの編集」ページで、「サービス」をクリックします。
  4. 「例による問合せ」をクリックし、PriceRequestInternalを問い合せます。
  5. PriceRequestInternalの詳細領域のエンティティ・タブで、「例による問合せ」をクリックし、TierQueueを問い合せます。
  6. TierQueueのエンティティ領域で、「表示」>「列」をクリックし、タイプにチェック・マークが含まれていることを確認します。
  7. 「処理」>「行の追加」をクリックし、値を設定します。

    属性

    名前 TermName_Custom
    別名 TermName
    タイプ 文字列
  8. 「保存して閉じる」をクリックします

2. 価格設定アルゴリズムの変更

割引を計算する価格設定アルゴリズムを変更します。

割引を適用する価格設定アルゴリズムの変更

変更するアルゴリズムを次に示します。

割引を適用する価格設定アルゴリズム

割引を適用する価格設定アルゴリズムを変更します。

  1. 「タスク」>「アルゴリズムの管理」をクリックします。

  2. 「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。

    属性

    名前

    ディスカウントを適用

  3. 「処理」>「バージョンの作成」をクリックします。

  4. 名前列で、作成したばかりのバージョンの「リンク」をクリックします。

  5. 「アルゴリズムの編集」ページで、価格設定条件の記述ステップが見つかるまで「ステップ」を展開します。

  6. 名前列にWrite Pricing Termsが含まれる「行」をクリックします。

  7. ステップ詳細領域の最初の行処理領域で、コードを見つけます。

    //if (TermQuery.Name!=null) ts.Name = TermQuery.Name
  8. コードからスラッシュ(//)を削除します。

    たとえば:

    if (TermQuery.Name!=null) ts.Name = TermQuery.Name

    このステップでは、このトピックの前のサービス・マッピングで設定したTermQuery属性を確認するようにアルゴリズムに指示します。

  9. 「保存してクローズ」>「処理」>「公開」をクリックします。

価格設定条件を適用する価格設定アルゴリズムの変更

実行中の正価を処理できるように、価格設定条件を適用する価格設定アルゴリズムを変更します。

  1. 「タスク」>「アルゴリズムの管理」をクリックします。

  2. 「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。

    属性

    名前

    価格設定条件の適用

  3. 「処理」>「バージョンの作成」をクリックします。

  4. 名前列で、作成したばかりのバージョンの「リンク」をクリックします。

  5. 「変数」>「アクション」>「行の追加」をクリックして値を設定し、「保存」をクリックします。

    属性

    名前

    RunningNetPriceElem

    データ型

    文字列

    Input/Output

    なし

    デフォルト式

    'ELEMENT_FOR_NET_PRICE'

    この値は、このトピックで以前に作成した価格設定要素を識別します。

    一重引用符(')を含める必要があります。

  6. 「アルゴリズム」をクリックします。

  7. ステップ領域で、名前列に適用可能な手数料の検索を含む「行」をクリックします。

  8. 実行中の正価を作成するステップを追加します。

    • 「ステップの追加>コンポジット・ステップ」をクリックし、「もし」をクリックします。

      次に、追加するステップを示します。

      アルゴリズムへのステップの追加
    • ステップ詳細領域で値を設定し、「保存」をクリックします。

      属性

      名前

      実行中の正価の作成

      条件

      'DISCOUNT_LINE' == TermType

      一重引用符(')を含める必要があります。

    • ステップ領域で、名前列の実行中のネット価格の作成の確認を含む「行」をクリックします。

    • 「ステップの追加>サブアルゴリズム」をクリックします。

      ステップにのみ条件を追加できます。 そのため、ステップを作成し、実行する価格設定アルゴリズムと、このアルゴリズムに送信する変数を指定するサブアルゴリズムを追加します。

    • ステップ詳細領域で、値を設定します。

      属性

      名前

      実行中の正価の作成

      説明

      このステップでは、実行中の正価の手数料コンポーネントを作成します。

      アルゴリズム名

      RunningUnitPriceを使用してChargeComponentを作成

    • 入力変数領域で値を設定します。

      変数

      割当値

      PriceRequest

      PriceRequest

      PriceElementCode

      RunningNetPriceElem

      IsForCeilingPrice

      BaseCeilingPriceElementCode

      これらの変数は使用しないでください。 これらはOracle内部使用専用です。

      RoundingAdjustmentElementCode

      'QP_ROUNDING_ADJUSTMENT'

      PerformRounding

      false

      IsForMargin

      false

      PriceElementUsageCode

      空のままにします

      ChargeAppliesToCode

      'PRICE'

      RoundingAdjustmentElementUsageCode

      'PRICE_ADJUSTMENT'

    • 出力変数領域で値を設定します。

      変数

      割当値

      PriceRequest

      PriceRequest

  9. 実行中の正価を削除するステップを追加します。

    実行中の正価を削除するステップ

    ステップを追加します。

    • 名前列にProcess Custom Adjustment Flagを含む「ステップ」をクリックします。

    • 「ステップの追加>条件付きアクション」をクリックし、値を設定します。

      属性

      名前

      実行中の正価の削除

      説明

      このステップでは、実行中の正価の手数料コンポーネントを削除します。

      条件

      RunningNetPriceElem == Comp.PriceElementCode

    • データ・セット領域で、「行の追加」をクリックし、値を設定します。

      名前

      変数パス

      プライマリ

      Comp

      PriceRequest.ChargeComponent

      チェック・マークが含まれます。

    • 条件の実行領域で、「条件の追加」>「デフォルト処理」をクリックし、値を設定します。

      属性

      処理

      //This action cascades the discounts. 
      Comp.delete()
    • 「保存」をクリックします。

  10. アルゴリズムで、予期した順序でルールが適用されることを確認します。 このステップは、割引リストに複数のルールがある場合に実行します。

    • 名前列にその他の調整タイプの処理がある「ステップ」をクリックします。

    • 条件付きアクション領域のこれらのアクションの実行列で、鉛筆をクリックします。

    • 「アクションの編集」ダイアログで、コードを確認します。

      finer('\tSetting up queue for applying discount matrix '+TermSetup.AttributePricingMatrixId)
      
      mq = MatrixQ.insert([ParentEntityCode:'CHARGE', ParentEntityId:TermQ.ChargeId])
      mq.DynamicMatrixId = TermSetup.AttributePricingMatrixId
      mq.ApplyToRollupFlag = ('Y' == TermSetup.ApplyToRollupFlag)
      mq.FromCurrencyCode = TermSetup.PricingCurrencyCode
    • mq.FromCurrencyCode = TermSetup.PricingCurrencyCodeがある行を見つけます。 コードの最後の行です。

    • 見つけたコードの後に新しい行を追加し、新しい行にmq.TermName=TermSetup.Nameを追加します。

      これが修正されたコードです。

      finer('\tSetting up queue for applying discount matrix '+TermSetup.AttributePricingMatrixId)
      
      mq = MatrixQ.insert([ParentEntityCode:'CHARGE', ParentEntityId:TermQ.ChargeId])
      mq.DynamicMatrixId = TermSetup.AttributePricingMatrixId
      mq.ApplyToRollupFlag = ('Y' == TermSetup.ApplyToRollupFlag)
      mq.FromCurrencyCode = TermSetup.PricingCurrencyCode
      mq.TermName=TermSetup.Name
    • 「OK > 保存」をクリックします。

3A. 単純割引の価格設定アルゴリズムの変更

このセクションは、単純な割引を適用する場合にのみ実行します。

  1. 関数を追加します。

    • 「関数」をクリックします。

      追加する関数を次に示します。

      価格設定アルゴリズムが調整基準を取得する関数で使用できるビュー・オブジェクト

      価格設定アルゴリズムが調整基準を取得する関数で使用できるビュー・オブジェクトを追加します。

    • 「処理」>「行の追加」をクリックし、値を設定します。

      名前

      問合せタイプ

      getAdjustmentBasis

      ビュー・オブジェクト参照

    • 引数領域に引数を追加します。

      名前

      コメント

      BasisId

      修正基準を識別する値です。

      言語

      言語を識別する略語。

    • 「ビュー・オブジェクト問合せ>行の追加」をクリックし、値を設定します。

      属性

      アプリケーション・モジュール

      oracle.apps.scm.pricing.priceExecution.pricingProcesses.publicModel.applicationModule.PricingProcessAM

      アプリケーション構成

      ${(PriceRequest.PricingServiceParameter[0]?.CacheEnabledFlag==null || PriceRequest.PricingServiceParameter[0].CacheEnabledFlag) ? 'PricingProcessAMShared' : 'PricingProcessAMLocal'}

      ビュー・オブジェクト

      AdjustmentBasis1

      単一行

      チェック・マークが含まれます。

    • バインド変数領域でバインド変数を追加し、「保存」をクリックします。

      バインド変数名

      バインド変数値

      basisId

      BasisId

      ラング

      言語

  2. 調整基準の値を取得するステップを変更します。

    • 「アルゴリズム」をクリックします。

    • ステップ領域で、名前列の基準値の取得を含む「ステップ」をクリックします。

    • ステップ詳細領域の最初の行処理領域で、コードを見つけます。

      finer('\tFound '+Comp.PriceElementCode+' charge component '+Comp.ChargeComponentId+' with unit price '+Comp.UnitPrice.Value)TermQ.AdjustmentBasisValue = Comp.UnitPrice.Value
    • 次に、その他のコードを示します。 見つけたコードの直後に追加します。

      TermQ.TermName = TermSetup.Name

      たとえば:

      調整基準の値を取得するステップ
    • 「保存」をクリックします。

  3. 単純調整を適用するステップを変更します。

    単純調整を適用するステップ
    • ステップ領域で、名前列の単純調整の適用を含む「ステップ」をクリックします。

    • データ・セット領域で、データ・セットを追加します。

      名前

      変数パス

      カーディナリティ

      RunningPriceComp

      PriceRequest.ChargeComponent

      複数

      この値は、期間キュー内の1つの期間に対して、実行中の価格に対して多数の手数料コンポーネントを使用することを指定します。

      BasisComp

      PriceRequest.ChargeComponent

      複数

      この値は、料金コンポーネントの多数の価格設定ベースを期間キュー内の1つの期間に使用するように指定します。

    • データ・セット領域の名前列にTermQが含まれている行で、値を設定します。

      属性

      ソート・キー

      TermName

    • 条件の実行領域のローカル変数領域で、ローカル変数を追加します。

      変数名

      デフォルト

      BasisElementCode

      空のままにします。

      RunningPrice

      空のままにします。

    • デフォルト・アクション領域で、コードの先頭にある次の行を見つけます。

      if ('ROOT' == Line.ItemType && 'Y' == TermSetup.ApplyToRollupFlag) {
        finer('\tAdjustment type = '+TermSetup.AdjustmentTypeCode)
        finer('\tUnit price = '+Charge.RunningUnitPrice)
        finer('\tAdjustment amount = '+TermSetup.AdjustmentAmount)
        finer('\tBasis value = '+TermQ.AdjustmentBasisValue?:0)
    • 調整基準に従って割引をカスケードするコードを次に示します。 見つけたコードの直前に追加します。

      // cascade your discount modifications according to the adjustment basis
      BasisElementCode = getAdjustmentBasis(TermSetup.AdjustmentBasisId, defaultLanguageCode())?.PriceElementCode
      if (BasisElementCode != null)
      TermQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: TermQ.ChargeId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value
      

      この行の前に必ずコードを追加してください。

      AdjustmentValue = pricingUtil.computeUnitAdjustment(TermSetup.AdjustmentTypeCode, Charge.RunningUnitPrice, TermSetup.AdjustmentAmount, TermQ.AdjustmentBasisValue?:0)
    • このコードを見つけます。

      // Adjust running unit price
      Charge.RunningUnitPrice += Comp.UnitPrice.Value
      finest('\tAdjusted running unit price by ' + Comp.UnitPrice.Value)
    • 割引を実行価格にカスケードするコードを次に示します。 見つけたコードの直後に追加します。

      //cascade your discount modifications onto the running price
      RunningPrice = RunningPriceComp.locate(ChargeId: Charge.ChargeId, PriceElementCode: RunningNetPriceElem)
      if (RunningPrice?.UnitPrice?.Value != null) 
        {
         RunningPrice.UnitPrice.Value = Charge.RunningUnitPrice
        }

      変更されたコード全体を次に示します。

      // Cascade your discount modifications according to the adjustment basis
      BasisElementCode = getAdjustmentBasis(TermSetup.AdjustmentBasisId, defaultLanguageCode())?.PriceElementCode
      if (BasisElementCode != null)TermQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: TermQ.ChargeId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value)
      
      if ('ROOT' == Line.ItemType && 'Y' == TermSetup.ApplyToRollupFlag) {
        finer('\tAdjustment type = '+TermSetup.AdjustmentTypeCode)
        finer('\tUnit price = '+Charge.RunningUnitPrice)
        finer('\tAdjustment amount = '+TermSetup.AdjustmentAmount)
        finer('\tBasis value = '+TermQ.AdjustmentBasisValue?:0)
      
      AdjustmentValue = pricingUtil.computeUnitAdjustment(TermSetup.AdjustmentTypeCode, Charge.RunningUnitPrice, TermSetup.AdjustmentAmount, TermQ.AdjustmentBasisValue?:0)
      
      finer('\tUnit price adjustment = '+AdjustmentValue)
      
      Comp = ChargeComponent.insert([ChargeComponentId:++ServiceParam.ChargeComponentIdCntr])
      Comp.createDataObject('UnitPrice')
      Comp.UnitPrice.Value = AdjustmentValue
      Comp.UnitPrice.CurrencyCode = Charge.CurrencyCode
      Comp.CurrencyCode = Charge.CurrencyCode
      
      // currency conversion
      if ( TermSetup.PricingCurrencyCode!=Line.AppliedCurrencyCode ) {
          if ( 'ERROR'==ConvRate?.MessageTypeCode ) {
              finest('creating line message')
              Line.MessageTypeCode = 'ERROR'
              Charge.MessageTypeCode = 'ERROR'
              Term.MessageTypeCode = 'ERROR'
              msg = Message.locate([ParentEntityCode:'LINE',ParentEntityId:Line.LineId,MessageText:ConvRate.PrcErrorMessage])
              if ( msg==null ) {
                  // create new error message for Line
                  msg = Message.insert([PricingMessageId:getNextId()])
                  msg.MessageName = ConvRate.PrcMessageName
                  msg.MessageText = ConvRate.PrcErrorMessage
                  msg.ParentEntityCode = 'LINE'
                  msg.ParentEntityId = Line.LineId
                  msg.MessageTypeCode = Term.MessageTypeCode
              }
          }
          else {
              Comp.UnitPrice.Value *= ConvRate.ConversionRate?:1
              finer('\tConverted currency, 1 '+TermSetup.PricingCurrencyCode+' = '+ConvRate.ConversionRate?:1+' '+Line.AppliedCurrencyCode)
          }
      }
      // end currency conversion
      
      if ( Charge.PricedQuantity!=null ) {
          Comp.createDataObject('ExtendedAmount')
          Comp.ExtendedAmount.Value = Comp.UnitPrice.Value*Charge.PricedQuantity.Value
          Comp.ExtendedAmount.CurrencyCode = Comp.UnitPrice.CurrencyCode
          if (Line.ItemType in ['STANDARD', 'COMPONENT', 'ROOT'] && null != Line.ServiceDuration?.Value && null != Line.ServiceDurationPeriodCode ) {
              Comp.createDataObject('CoverageExtendedAmount')
              if ('ONE_TIME' == Charge.PriceTypeCode) {
                  Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value
              }
              else if ('RECURRING' == Charge.PriceTypeCode) {
                  if (Charge.PricePeriodicityCode != Line.ServiceDurationPeriodCode) {
                      // Partial Price Period with Conversion Rate from OKC tables
                      Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount?.Value * Charge.PartialPeriodDurationConversionRate?:0                                  
                  }
                  else {
                      //no partial Period pricing based on ServiceDuration      
                      Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value * Line.ServiceDuration?.Value     
                  }      
              }
              Comp.CoverageExtendedAmount.CurrencyCode = Comp.ExtendedAmount.CurrencyCode
          }
      }
      assert Charge.CompSeqCntr != null
      Comp.SequenceNumber = (Long) Charge.CompSeqCntr++
      
      Comp.PriceElementCode = TermElementCode
      Comp.PriceElementUsageCode = priceElementUsageCode
      Comp.ExplanationMessageName = TermExplanationMsg
      /*
      // Set price element code in order of setup value, step parameter, then hard-coded
      if (TermSetup.AdjustmentElementCode!=null) {
        Comp.PriceElementCode = TermSetup.AdjustmentElementCode
      } else {
        if (ElementCodeParam!=null) {
          Comp.PriceElementCode = ElementCodeParam
        } else {
          if ('PROMOTION'==TermSetup.ParentEntityTypeCode) {
            Comp.PriceElementCode = 'PROMOTIONAL_ADJUSTMENT'
          } else if ('SALES_AGREEMENT'==TermSetup.ParentEntityTypeCode) {
            Comp.PriceElementCode = 'CONTRACTUAL_ADJUSTMENT'
          } else if ('DISCOUNT_LINE'==TermSetup.ParentEntityTypeCode) {
            Comp.PriceElementCode = 'DISCOUNT_LIST_ADJUSTMENT'
          }
        }
      }*/
      
      Comp.PriceValidFrom = Line.PricingDate
      Comp.PriceValidUntil = TermSetup.EndDate
      Comp.SourceId = TermQ.TermId
      Comp.SourceTypeCode = 'PRICING_TERM'
      finest('\tCreated ' + Comp.PriceElementCode + ' charge component ' + Comp.ChargeComponentId + ' with unit adjustment ' + Comp.UnitPrice.Value + ' ' + Comp.UnitPrice.CurrencyCode)
      
      // Adjust running unit price
      Charge.RunningUnitPrice += Comp.UnitPrice.Value
      finest('\tAdjusted running unit price by ' + Comp.UnitPrice.Value)
      
      //Cascade your discount modifications onto the running price
      RunningPrice = RunningPriceComp.locate(ChargeId: Charge.ChargeId, PriceElementCode: RunningNetPriceElem)
      if (RunningPrice?.UnitPrice?.Value != null) 
        {
         RunningPrice.UnitPrice.Value = Charge.RunningUnitPrice
        }

3B. 階層割引の価格設定アルゴリズムの変更

このセクションは、階層割引を適用する場合にのみ実行します。

  1. 「タスク」>「アルゴリズムの管理」をクリックします。

  2. 「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。

    属性

    名前

    階層価格設定の適用

  3. 「処理」>「バージョンの作成」をクリックします。

  4. 名前列で、作成したばかりのバージョンの「リンク」をクリックします。

  5. 関数を追加します。

    • 「関数」をクリックします。

      追加する関数を次に示します。

      価格設定アルゴリズムが調整基準を取得する関数で使用できるビュー・オブジェクト

      価格設定アルゴリズムが調整基準を取得する関数で使用できるビュー・オブジェクトを追加します。

    • 「処理」>「行の追加」をクリックし、値を設定します。

      名前

      問合せタイプ

      getAdjustmentBasis

      ビュー・オブジェクト参照

    • 引数領域に引数を追加します。

      名前

      コメント

      BasisId

      修正基準を識別する値です。

      言語

      言語を識別する略語。

    • 「ビュー・オブジェクト問合せ>行の追加」をクリックし、値を設定します。

      属性

      アプリケーション・モジュール

      oracle.apps.scm.pricing.priceExecution.pricingProcesses.publicModel.applicationModule.PricingProcessAM

      アプリケーション構成

      ${(PriceRequest.PricingServiceParameter[0]?.CacheEnabledFlag==null || PriceRequest.PricingServiceParameter[0].CacheEnabledFlag) ? 'PricingProcessAMShared' : 'PricingProcessAMLocal'}

      ビュー・オブジェクト

      AdjustmentBasis1

      単一行

      チェック・マークが含まれます。

    • バインド変数領域でバインド変数を追加し、「保存」をクリックします。

      バインド変数名

      バインド変数値

      basisId

      BasisId

      ラング

      言語

  6. 実行単価を調整するステップを変更します。

    • 「アルゴリズム」をクリックします。

    • ステップ領域で階層価格設定処理ステップを展開し、名前列にコンピュート層調整がある「ステップ」をクリックします。

    • データ・セット領域で、TierLineQデータ・セットのソート・キー属性に値TermNameを追加します。
      名前 変数パス ソート・キー
      TierLineQ PriceRequest.TierLineQ TermName
    • デフォルト・アクション領域で、デフォルト・アクションの先頭にコードを追加します。
      def BasisElementCode = getAdjustmentBasis(TierLine.AdjustmentBasisId, defaultLanguageCode())?.PriceElementCode
      if ('XX_RUNNING_NET_PRICE'==BasisElementCode )
          TierLineQ.AdjustmentBasisValue = Charge.RunningUnitPrice
      
    • デフォルト・アクションの最後にコードを追加します。
      // Adjust running unit price
        if (!IsInternalCall) {
               Charge.RunningUnitPrice += TierLineQ.TierAdjustmentValue
          }    
      
    • 「保存」をクリックします。

  7. 手数料コンポーネントを作成するステップを変更します。
    • 階層調整の作成ステップを展開し、手数料コンポーネントの作成ステップがある「行」をクリックします。
    • デフォルト・アクション領域で、if (!IsInternalCall)条件をコメント・アウトします。 コードは次のようになります。
      // Adjust running unit price
      /*if (!IsInternalCall) {
          Charge.RunningUnitPrice += Comp.UnitPrice.Value
          finest('\tAdjusted running unit price by ' + Comp.UnitPrice.Value)
      }*/
      

3C. 属性割引の価格設定アルゴリズムの変更

オプションとして、割引を適用する価格設定アルゴリズムを変更できます。 このセクションは、割引を適用する場合にのみ実行します。

  1. 「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。

    属性

    名前

    Apply Matrices

  2. 「処理」>「バージョンの作成」をクリックします。

  3. 名前列で、作成したばかりのバージョンのリンクをクリックします。

  4. 調整基準を取得するステップを使用不可にします。

    • 「アルゴリズムの編集」ページで、名前列にProcess Pricing Matricesが含まれる「行」をクリックします。

    • 「ステップの追加>コンポジット・ステップ> If」をクリックし、値を設定して、「保存」をクリックします。

      属性

      名前

      調整基準の取得ステップの無効化

      説明

      調整基準を取得するステップを使用不可にします。

      条件

      false

    • ステップ領域で、「上に移動」および「下へ移動」を繰り返し使用して、この階層を実現します。

      Process Pricing Matrices
      	 Disable the Retrieve Adjustment Basis Step
      		 Retrieve Adjustment Basis

      たとえば:

      上に移動および下に移動を使用
  5. 属性に従って割引を適用するステップを変更します。

    • 名前列にプロセス・マトリックス・キューを含む「行」をクリックします。

    • データ・セット領域で、データ・セットを追加します。

      名前

      変数パス

      カーディナリティ

      RunningPriceComp

      PriceRequest.ChargeComponent

      複数

      BasisComp

      PriceRequest.ChargeComponent

      複数

    • 名前列にMatrixQが含まれている行で、この値を設定します。

      属性

      ソート・キー

      TermName

    • 条件の実行領域のローカル変数領域で、これらのローカル変数を追加します。

      変数名

      デフォルト

      RunningNetPriceElement

      'ELEMENT_FOR_NET_PRICE'

      この値は、このトピックで以前に作成した価格設定要素を識別します。

      一重引用符(')を含める必要があります。

      BasisElementCode

      空のままにします。

      RunningPrice

      空のままにします。

    • 条件付きアクション領域で、この条件を見つけます。

      この条件がTrueの場合

      このアクションを実行

      !MatrixQ.ApplyToRollupFlag && 'CURRENCY_CONVERSION' != MatrixType

      finest('\tUnit price adjustment = '+MatrixQ.AdjustmentValue)

    • Then Perform these Actionsのコードで、次の行を見つけます。

      finest('\tUnit price adjustment = '+MatrixQ.AdjustmentValue)
      finest('Basis Value: '+MatrixQ.AdjustmentBasisValue)

      コードの最初の2行です。

    • 先ほど見つけた行をコメントにします。

    • 次に、その他のコードを示します。 コメントした行の直後に追加します。

      //Cascade the discount.
      BasisElementCode = getAdjustmentBasis(MatrixQ.AdjustmentBasisId, defaultLanguageCode())?.PriceElementCode
      if (BasisElementCode != null)
      MatrixQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: MatrixQ.ParentEntityId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value
    • このコードを見つけます。

      if ('PRICE_OVERRIDE' == MatrixQ.AdjustmentTypeCode)
        MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, Charge.RunningUnitPrice?:0, MatrixQ.AdjustmentValue, Charge.RunningUnitPrice?:0)
      else
        MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, MatrixQ.AdjustmentBasisValue, MatrixQ.AdjustmentValue, Charge.RunningUnitPrice?:0)
    • 見つけたコードのelse文の内容を置換します。 このコードをこのコードに置き換えます。

        //MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, MatrixQ.AdjustmentBasisValue, MatrixQ.AdjustmentValue, Charge.RunningUnitPrice?:0)
        MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, Charge.RunningUnitPrice?:0, MatrixQ.AdjustmentValue, MatrixQ.AdjustmentBasisValue)

      調整基準を使用して調整を計算し、実行単価を使用して調整を計算する新しいelse文を追加する既存のelse文をコメントします。

    • 次に、その他のコードを示します。 閉じ中カッコ( } )であるコードの最後の行の直前に追加します。

      //Cascade the discount.
          RunningPrice = RunningPriceComp.locate(ChargeId: MatrixQ.ParentEntityId, PriceElementCode: RunningNetPriceElement)
          if (RunningPrice?.UnitPrice?.Value != null) {
            RunningPrice.UnitPrice.Value = Charge.RunningUnitPrice
          }

      変更されたコード全体を次に示します。

      //finest('\tUnit price adjustment = '+MatrixQ.AdjustmentValue)
      //finest('Basis Value: '+MatrixQ.AdjustmentBasisValue)
      
      //Cascade the discount.
      BasisElementCode = getAdjustmentBasis(MatrixQ.AdjustmentBasisId, defaultLanguageCode())?.PriceElementCode
      if (BasisElementCode != null)
      MatrixQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: MatrixQ.ParentEntityId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value
      
      if ('PRICE_OVERRIDE' == MatrixQ.AdjustmentTypeCode)
        MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, Charge.RunningUnitPrice?:0, MatrixQ.AdjustmentValue, Charge.RunningUnitPrice?:0)
      else
        //MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, MatrixQ.AdjustmentBasisValue, MatrixQ.AdjustmentValue, Charge.RunningUnitPrice?:0)
        MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(MatrixQ.AdjustmentTypeCode, Charge.RunningUnitPrice?:0, MatrixQ.AdjustmentValue, MatrixQ.AdjustmentBasisValue)
      
      // currency conversion
      if (MatrixQ.FromCurrencyCode!=Charge.CurrencyCode ) {
          if ( 'ERROR'==ConvRate?.MessageTypeCode ) {
              finest('creating line message')
              Line.MessageTypeCode = 'ERROR'
              Charge.MessageTypeCode = 'ERROR'
              Term.MessageTypeCode = 'ERROR'
              msg = Message.locate([ParentEntityCode:'LINE',ParentEntityId:Line.LineId,MessageText:ConvRate.PrcErrorMessage])
              if ( msg==null ) {
                  // create new error message for Line
                  msg = Message.insert([PricingMessageId:getNextId()])
                  msg.MessageName = ConvRate.PrcMessageName
                  msg.MessageText = ConvRate.PrcErrorMessage
                  msg.ParentEntityCode = 'LINE'
                  msg.ParentEntityId = Line.LineId
                  msg.MessageTypeCode = ConvRate.MessageTypeCode
              }
          }
          else {
              MatrixQ.AdjustmentValue *= ConvRate.ConversionRate?:1
              finest('\tConverted currency, 1 '+MatrixQ.FromCurrencyCode+' = '+ConvRate.ConversionRate?:1+' '+Charge.CurrencyCode)
              finest('Adjustment Value: '+MatrixQ.AdjustmentValue)
          }
      }
      // end currency conversion
      if ( 'ERROR' != Line.MessageTypeCode ) {
          Comp = ChComp.insert([ChargeComponentId:++Param.ChargeComponentIdCntr])
          Comp.createDataObject('UnitPrice')
          Comp.UnitPrice.Value = MatrixQ.AdjustmentValue
          Comp.UnitPrice.CurrencyCode = Charge.CurrencyCode
          Comp.CurrencyCode = Charge.CurrencyCode
          Comp.PriceElementCode = MatrixElementCode
          if(!(MatrixType in ['PRICE_LIST_ATTR_ADJ','PRICE_LIST_TIER']))
          Comp.PriceElementUsageCode=priceElementUsageCode
          Comp.SourceTypeCode ='MATRIX_RULE'
          Comp.SourceId = MatrixQ.DynamicMatrixRuleId
          Comp.ChargeId = Charge.ChargeId
          Comp.MatrixConditionString = MatrixQ.ConditionString
          Comp.MatrixResultString = MatrixQ.ResultString
          Comp.ExplanationMessageName = MatrixExplanationMsg
      if ( Charge.PricedQuantity!=null ) {
              Comp.createDataObject('ExtendedAmount')
              Comp.ExtendedAmount.Value = Comp.UnitPrice?.Value*Charge.PricedQuantity?.Value
              Comp.ExtendedAmount.CurrencyCode = Comp.UnitPrice?.CurrencyCode
              //Populate CoverageExtendedAmount for Subscription for selling services.
              if ( Line.ItemType in ['STANDARD', 'COMPONENT', 'ROOT'] && null != Line.ServiceDuration?.Value && null != Line.ServiceDurationPeriodCode) {
                  Comp.createDataObject('CoverageExtendedAmount')
                  if ('ONE_TIME' == Charge.PriceTypeCode) {
                      Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value
                  }
                  else if ('RECURRING' == Charge.PriceTypeCode) {
                      if (Charge.PricePeriodicityCode != Line.ServiceDurationPeriodCode) {
                      // Partial Price Period with Conversion Rate from OKC tables
                      Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount?.Value * Charge.PartialPeriodDurationConversionRate?:0                                        
                      }
                      else {
                      //no partial Period pricing based on ServiceDuration      
                      Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value * Line.ServiceDuration?.Value     
                      }      
                  }
                  Comp.CoverageExtendedAmount.CurrencyCode =  Comp.ExtendedAmount.CurrencyCode
             }
          }
          assert Charge.CompSeqCntr != null
          Comp.SequenceNumber = (Long) Charge.CompSeqCntr++
      Charge.RunningUnitPrice += MatrixQ.AdjustmentValue
      //Cascade the discount.
          RunningPrice = RunningPriceComp.locate(ChargeId: MatrixQ.ParentEntityId, PriceElementCode: RunningNetPriceElement)
          if (RunningPrice?.UnitPrice?.Value != null) {
            RunningPrice.UnitPrice.Value = Charge.RunningUnitPrice
          }
      
      }
  6. 「保存して閉じる」をクリックします

  7. 「アルゴリズムの管理」ページで、「処理」>「公開」をクリックします。

4. 割引ルールの作成

AS54888品目の割引ルールを作成します。

  1. 価格設定管理作業領域で、「タスク」>「割引リストの管理」をクリックします。

    この例では、すでにDiscount List for Standard Desktopという名前の割引リストを作成し、AS54888に割引明細を追加したとします。 詳細は、「割引リストの管理」を参照してください。

  2. 「割引リストの管理」ページで、「Discount List for Standard Desktop」を検索して開きます。

  3. 「割引リストの編集」ページの割引明細領域の名前属性で、AS54888を検索します。

単純な割引ルールの作成

使用する調整基準は、実装する割引のタイプによって異なります。

割引のタイプ

修正基準

累積

調整タイプがパーセントに従う場合は、定価を調整基準として使用する必要があります。

カスケード

実行中の正価を調整基準として使用する必要があります。

単純な割引ルールを作成します。

  1. 「品目」AS54888「各購買」領域で、ルールを追加します。 「処理」>「作成」>「単純ルール」をクリックして、各ルールを作成します。

    ルール名

    調整額

    割引ルール1

    50

    割引ルール2

    10

    割引ルール3

    5

    各ルールの属性を設定します。

    属性

    ルール・タイプ

    単純

    価格タイプ

    単発

    手数料タイプ

    販売

    手数料サブタイプ

    価格

    修正基準

    定価の実行

    調整タイプ

    割引率

    たとえば:

    単純な割引ルールの定義

    価格設定管理作業領域では、ルール名に従って、割引ルール・リストに表示される順序で各ルールが実行されます。 順序を設定するには、「表示」>「ソート」>「拡張」をクリックし、ソート・キーをルール名に昇順などの順序を設定し、OKをクリックします。

AS54888の定価が$2500.00であるとします。

カスケード割引に対して価格設定が行う計算を次に示します。

ルール名

修正

定価の実行

割引ルール1

$1250.00

純価格に50%の調整金額を乗算した$2、500.00は$1250.00と等しくなります。

$1,250.00

正価から$1を差し引いた$2、500.00の割引は$1、250.00と等しくなります。

割引ルール2

$125.00

純価格に10%の調整金額を乗算した$1、250.00は$125.00です。

$1125.00

正価から$125.00を差し引いた$1、250.00の割引は、$1125.00です。

割引ルール3

$56.25

$125.00の純価格に5%の調整金額を乗算すると、$56.25になります。

$1068.75

正価から$56.25を差し引いた$1125.00の割引は$1068.75です。

該当なし

該当なし

正価は$1068.75です。

各割引ルールの調整基準をリスト価格に変更するとします。 価格設定の計算は次のとおりです。

ルール名

修正

定価の実行

割引ルール1

$1250.00

$2、500.00定価に50%の調整金額を掛けた値は$1250.00です。

$1,250.00

正価から$1を差し引いた$2、500.00の割引は$1、250.00と等しくなります。

割引ルール2

$250.00

$2、500.00定価に10%の調整金額を掛けた値は$250.00です。

$1,000.00

正価から$250.00を差し引いた$1、250.00の割引は$1、000.00と等しくなります。

割引ルール3

$56.25

$2、500.00定価(5%調整額)は$125.00と等しくなります。

$875.00

正価から$125.00を差し引いた$1、000.00の割引は$875.00です。

該当なし

該当なし

正価は$875.00です。

属性に従って割引ルールを作成

「品目」AS54888「各購買」領域で、ルールを追加します。 「処理」>「作成」>「属性ベース・ルール」をクリックして、各ルールを作成します。

ルール名

調整額

割引ルール1

10

割引ルール2

5

割引ルール3

10

割引ルール4

2

各ルールの属性を設定します。

属性

ルール・タイプ

属性ベース

価格タイプ

すべて

手数料タイプ

すべて

手数料サブタイプ

すべて

修正基準

定価の実行

調整タイプ

割引率

たとえば:

属性に従って割引するルール

AS54888の定価が$3、500.12であるとします。 カスケード割引に対して価格設定が行う計算を次に示します。

ルール名

修正

定価の実行

割引ルール1

$350.01

純価格に10%の調整金額を乗算した$3、500.12は$350.01です。

$3,150.11

正価から$350.01discountを引いた$3、500.12は、$3、150.11と等しくなります。

割引ルール2

$157.51

純価格に5%の調整金額を乗算した$3、150.11は$157.51です。

$2,992.60

正価から$157.51を差し引いた金額の$3、150.11は、$2、992.60と等しくなります。

割引ルール3

$299.26

純価格に10%の調整金額を乗算した$2、992.60は$299.26です。

$2,693.34

正価から$299.26を差し引いた$2、992.60の割引は$2、693.34と等しくなります。

割引ルール4

$53.87

$2、693.34の純価格に2%の調整金額を乗算した金額は$53.87です。

$2,639.47

正価から$53.87を差し引いた$2、992.60の割引は$2、639.47と等しくなります。

該当なし

該当なし

正価は$2、639.47です。

各割引ルールの調整基準をリスト価格に変更するとします。 累積割引に対して価格設定が行う計算を次に示します。

ルール名

修正

定価の実行

割引ルール1

$350.01

$3、500.12定価に10%調整金額を乗算した値は$350.01です。

$3,150.11

正価から$350.01discountを引いた$3、500.12は、$3、150.11と等しくなります。

割引ルール2

$157.00

$3、500.12定価に5%調整金額を掛けた値は$157.00です。

$2,993.11

正価から$157.00を差し引いた金額の$3、150.11は、$2、993.11と等しくなります。

割引ルール3

$299.26

$3、500.12定価実行正価に10%調整金額を掛けた値は$350.01と等しくなります。

$2,643.10

正価から$350.01を差し引いた$2、993.11の割引は$2、643.10と等しくなります。

割引ルール4

$70.00

$3、500.12定価に2%の調整金額を掛けた値は$70.00です。

$2,573.10

正価から$70.00を差し引いた$2、643.10の割引は$2、573.10と等しくなります。

該当なし

該当なし

正価は$2、573.10です。

単純な割引ルールおよび属性割引ルールの作成

一部のデプロイメントでは、同じ品目の属性に従って単純な割引ルールおよび割引ルールを作成する必要がある場合があります。

これらのルールを作成するとします。

ルール名

ルール・タイプ

修正基準

調整タイプ

調整額

割引ルール1

単純

定価の実行

割引率

50

割引ルール2

属性価格設定

定価の実行

割引率

10

割引ルール3

単純

定価の実行

割引率

10

割引ルール4

単純

定価の実行

割引率

5

たとえば:

単純な割引ルールと属性割引ルール

ネット価格の実行時に単純なルールと属性ルールを作成する場合は、Pricingで使用する順序を次に示します。

  1. すべての単純なルールを適用します。

  2. 属性に従ってすべてのルールを適用します。

価格設定では、割引ルール・リストでの表示に使用されるルールや順序をいつ作成するかに関係なく、この順序が使用されます。

定価が$2500.00であるとします。 価格設定で調整を適用するときに使用する順序を次に示します。

ルール名

ルール・タイプ

修正

定価の実行

割引ルール1

単純

$1,250.00

2,500ドルの純価格に10%を掛けた場合、$1、250.00と等しくなります。

$1,250.00

$2,500定価から$1、250.00引いた割引は$1、250.00です。

割引ルール3

単純

$125.00

純価格に10%を乗算した$1、250.00は、$125.00と等しくなります。

$1,125.00

正価から$125.00を差し引いた$1、250.00の割引は$1、125.00と等しくなります。

割引ルール4

単純

$56.25

正価を5%乗算した$1、125.00は、$56.25と等しくなります。

$1,068.75

正価から$56.25を差し引いた$1、125.00の割引は$1、125.00です。

割引ルール2

属性価格設定

$106.88

純価格に10%を乗算した$1、068.75は、$106.88と等しくなります。

$961.87

正価から$106.88を差し引いた$1、068.75の割引は$961.87です。

該当なし

該当なし

該当なし

正価は$961.87です。

価格販売トランザクション・アルゴリズムのテスト

  1. テスト入力ペイロードの詳細を取得します。

    • 販売オーダーの管理に必要な権限でOrder Managementにサインインし、Order Management作業領域に移動して、販売オーダーを作成し、オーダー明細にAS54888品目を追加し、「送信」をクリックして、ダイアログに表示されるオーダー番号をノートします。

      この例では、オーダー番号が5678であるとします。

    • 販売オーダーを格納するデータベースでSQL問合せを実行します。

      select header_id, sold_to_party_id as CustomerId, org_id as SellingBusinessUnitId, legal_entity_id as
      SellingLegalEntityId from doo_headers_all where Order_Number = OrderNumber;
      

      説明

      • OrderNumberは、送信をクリックした後に書き留めた販売オーダー番号です。

      たとえば、販売オーダー5678の問合せを実行します。

      select header_id, sold_to_party_id as CustomerId, org_id as SellingBusinessUnitId, legal_entity_id as
      SellingLegalEntityId from doo_headers_all where Order_Number = 5678;
      
    • SQL問合せを実行します。

      select header_id, sold_to_party_id as CustomerId, org_id as SellingBusinessUnitId, legal_entity_id as SellingLegalEntityId 
      from doo_headers_all where Order_Number = $OrderNumber;
      

      説明

      • CustomerId、SellingBusinessUnitIdおよびSellingLegalEntityIdは、それぞれオーダー・ヘッダーの属性です。

      たとえば、販売オーダー5678の問合せを実行します。

      select header_id, sold_to_party_id as CustomerId, org_id as SellingBusinessUnitId, legal_entity_id as SellingLegalEntityId 
      from doo_headers_all where Order_Number = $5678;
      
    • 問合せがheader_idの値5678を返すことを確認します。

    • SQL問合せを実行します。

      select inventory_item_id as InventoryItemId, inventory_organization_id as InventoryOrganizationId, ordered_uom as LineQuantityUOMCode from doo_fulfill_lines_all where header_id = $header_id;

      説明

      • InventoryItemId、InventoryOrganizationId、LineQuantity.UOMCodeおよびLineQuantityUOMCodeは、それぞれオーダー明細の属性です。

    • 問合せで返された値をテスト入力ペイロードに追加します。

      このトピックの後半にあるテスト「入力ペイロード」の項を参照してください。

  2. 価格設定アルゴリズムをテストします。

    • 「アルゴリズムの編集」ページで、「テスト」をクリックします。

    • 入力のテスト領域で、変数名列にPriceRequestを含む行の「鉛筆」アイコンをクリックします。

    • 「変数の編集」ダイアログで、すべてのコード行を削除します。

    • 入力ペイロードをコピーしてダイアログに貼り付け、OKをクリックします。

    • 「テストの実行」をクリックします。

    • テストが終了するまで待機してから、「最終実行ステータス」オプションにチェックマークが付いていることを確認します。

      このエラーが発生した場合。

      Error: Unable to parse the variable[PriceRequest] using the service definition [Sales.PriceRequestInternal]. Please check the variable value or service schema

      次に、テスト・ペイロードの全内容をXMLエディタに貼り付け、XML形式が正しいことを確認します。

    • 「テスト出力」をクリックし、出力にこれらの詳細が含まれていることを確認します。

      • ChargeComponentエントリに適用された割引は正しいです。

      • 各ChargeComponentのUnitPriceの計算は正しいです。

      • ChargeComponentでのUnitPriceの計算。PriceElementCodeはQP_NET_PRICEです。

  3. 「保存して閉じる」をクリックします

  4. 「アルゴリズムの管理」ページで、「処理」>「公開」をクリックします。

入力ペイロードのテスト

販売オーダーのテストに使用できる入力ペイロードを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<PriceRequestInternal:PriceRequestInternalType xmlns:ns0="http://xmlns.oracle.com/adf/svc/types/" xmlns:PriceRequestInternal="http://xmlns.oracle.com/apps/scm/pricing/priceExecution/pricingProcesses/PriceRequestInternal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PriceRequestInternal:PriceRequestInternalType">
<PriceRequestInternal:Header>
      <PriceRequestInternal:CustomerId>customer_id</PriceRequestInternal:CustomerId>
      <PriceRequestInternal:HeaderId>101</PriceRequestInternal:HeaderId>
      <PriceRequestInternal:CalculatePricingChargesFlag>true</PriceRequestInternal:CalculatePricingChargesFlag>       <PriceRequestInternal:CalculateShippingChargesFlag>false</PriceRequestInternal:CalculateShippingChargesFlag>
<PriceRequestInternal:CalculateTaxFlag>false</PriceRequestInternal:CalculateTaxFlag>      <PriceRequestInternal:SellingBusinessUnitId>selling_business_unit_id </PriceRequestInternal:SellingBusinessUnitId>
      <PriceRequestInternal:SellingLegalEntityId>selling_legal_entity_id </PriceRequestInternal:SellingLegalEntityId>
      <PriceRequestInternal:TransactionTypeCode>ORA_SALES_ORDER</PriceRequestInternal:TransactionTypeCode>
      </PriceRequestInternal:Header>
   <PriceRequestInternal:PricingServiceParameter>
      <PriceRequestInternal:PricingContext>SALES</PriceRequestInternal:PricingContext>
   </PriceRequestInternal:PricingServiceParameter>
   <PriceRequestInternal:Line>
      <PriceRequestInternal:HeaderId>101</PriceRequestInternal:HeaderId>
      <PriceRequestInternal:InventoryItemId>inventory_item_id </PriceRequestInternal:InventoryItemId>
      <PriceRequestInternal:InventoryOrganizationId>inventory_organization_id </PriceRequestInternal:InventoryOrganizationId>
      <PriceRequestInternal:LineId>1001</PriceRequestInternal:LineId>
      <PriceRequestInternal:LineCategoryCode>ORDER</PriceRequestInternal:LineCategoryCode>
      <PriceRequestInternal:LineQuantity unitCode="unit_code" xmlns:tns="http://xmlns.oracle.com/adf/svc/errors/">2</PriceRequestInternal:LineQuantity>
      <PriceRequestInternal:LineQuantityUOMCode>line_quantity_uom_code </PriceRequestInternal:LineQuantityUOMCode>
      <PriceRequestInternal:LineTypeCode>ORA_BUY</PriceRequestInternal:LineTypeCode>
   </PriceRequestInternal:Line>
   <PriceRequestInternal:ChangeSummary logging="false" xmlns:sdo="commonj.sdo"/>
</PriceRequestInternal:PriceRequestInternalType>

これらの置換を行います。

コード内の変数

変数の置換に使用できるSQL問合せからの属性

customer_id

CustomerId

selling_business_unit_id

SellingBusinessUnitId

selling_legal_entity_id

SellingLegalEntityId

inventory_item_id

InventoryItemId

inventory_organization_id

InventoryOrganizationId

unit_code

LineQuantityUOMCode

line_quantity_uom_code

LineQuantityUOMCode

5. 設定のテスト

  1. オーダー管理にサインインし、販売オーダーを作成します。

  2. CustomerをPennyPack Systemsなどの値に設定します。

  3. 「処理」>「価格設定セグメントおよび戦略の表示」をクリックし、セグメントがデフォルト・セグメントであり、戦略がPennyPackシステムに対して正しいことを確認します。

  4. オーダー明細領域で、品目AS54888を検索し、結果を待って検索属性をタブ・アウトしてから、Order ManagementがPennyPackシステムの価格表から価格を取得することを確認します。

  5. AS54888品目をオーダー明細に追加し、オーダー明細の「金額」をクリックしてから、Pricingで正味価格が正しく計算され、割引が適用されていることを確認します。