機械翻訳について

基本定価の上書き

Oracle Pricingを設定して、拡張可能フレックスフィールドの値を使用して基準定価を上書きします。

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

この手順は、標準品目でのみ使用します。 カバレッジ品目またはサブスクリプション品目では使用できません。

この例では、Order Management作業領域に表示する拡張可能フレックスフィールドを定義します。 次に、オーダー入力スペシャリストがフレックスフィールドに入力する値を使用して、販売価格手数料を上書きします。

設定の概要

  1. 拡張可能フレックスフィールドを設定します。

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

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

拡張可能フレックスフィールドの設定

  1. Order Managementの管理に必要な権限があることを確認します。

    価格設定権限でサインインしないでください。 これらを使用して拡張可能フレックスフィールドを定義することはできません。

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

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

    • 機能領域: オーダー

    • タスク: オーダーの拡張可能フレックスフィールドの管理

    この例では、Order Managementオファリングを実装していることを前提としています。 別のオファリングを使用している場合は、Order Managementのかわりにそのオファリングをクリックします。

  3. 拡張可能フレックスフィールドを変更します。

    • 「オーダー拡張可能フレックスフィールドの管理」ページで値を入力し、「検索」をクリックします。

      属性

      名前

      履行明細情報

      フレックスフィールド・コード

      DOO_FULFILL_LINES_ADD_INFO

    • 「処理」→「編集」をクリックします。

    • 「コンテキストの管理」をクリックします。

    • 「コンテキストの管理」ページで、「処理」>「作成」をクリックします。

    • 「コンテキストの作成」ページで、値を設定します。

      属性

      表示名

      LinePrcOverride

      コード

      LinePrcOverride

      API名

      ライン・ナップ

      使用可能

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

      動作

      単一行

    • コンテキスト使用方法領域で、「処理」>「作成」をクリックし、値を設定して、「保存」をクリックします。

      属性

      名前

      追加履行明細情報

      表示権限

      なし

      権限の編集

      なし

    • コンテキスト依存セグメント領域で、「処理」>「作成」をクリックします。

    • 「セグメントの作成」ページで値を設定し、「保存してクローズ」をクリックします。

      属性

      名前

      SalePrcOverrideVal

      コード

      SalePrcOverrideVal

      API名

      売却価額

      使用可能

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

      データ型

      数値

      表の列

      使用可能な列を選択します。

      値セット

      15桁数値

      プロンプト

      SalePrcOverrideVal

    • 「コンテキストの編集」ページで、「保存してクローズ」をクリックします。

    • 「コンテキストの管理」ページで、「保存してクローズ」をクリックします。

    • 「拡張可能フレックスフィールドの編集」ページで、「保存してクローズ」をクリックします。

  4. 拡張可能フレックスフィールドをデプロイします。

    • 「オーダー拡張可能フレックスフィールドの管理」ページで、「処理」>「フレックスフィールドのデプロイ」をクリックします。

    • デプロイメント・ダイアログがデプロイメントが正常に終了したことを示すまで待機し、OKをクリックします。

    • 「処理」>「フレックスフィールド・アーカイブのダウンロード」をクリックし、アーカイブが正常に終了したことを示すダイアログを待ってから、「ダウンロード」をクリックします。

    • ファイル10008_DOO_FULFILL_LINES_ADD_INFO.zipをローカル・ハード・ドライブに保存し、抽出してこのフォルダに移動します。

      oracle\apps\scm\doo\processOrder\flex\fulfillLineContextsB\view\
    • FulfillLineEffBLinePrcOverrideprivateVO.xmlを開きます。

サービス・マッピングへの拡張可能フレックスフィールドの追加

拡張可能フレックスフィールドから価格設定に値をマップするサービス・マッピングを定義します。

拡張可能フレックスフィールドをサービス・マッピングに追加します。

  1. サインアウトし、価格設定の管理に必要な権限でサインインします。

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

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

  4. エンティティを定義します。

    • 「サービス・マッピングの編集」ページのエンティティ・タブで、「処理」>「行の追加」をクリックし、値を設定します。

      属性

      エンティティ

      LinePrcOverrideEff_Custom

      説明

      価格の上書きに使用する拡張可能フレックスフィールドの値を取得します。

    • 詳細領域で属性を追加し、「保存」をクリックします。

      属性

      タイプ

      主キー

      FulfillLineId_Custom

      Long

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

      EffLineId_Custom

      Long

      チェック・マークは含まれません。

      SalePrcOverrideVal_Custom

      小数

      チェック・マークは含まれません。

      たとえば:

      Edit Service MappingsページのEntityタブ
    • 「サービス」をクリックし、この値を含む「行」をクリックします。

      属性

      サービス

      PriceSalesTransaction

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

      エンティティ

      読込み

      書込み

      LinePrcOverrideEff_Custom

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

      チェック・マークは含まれません。

      このステップでは、価格設定と、拡張可能フレックスフィールドから値を送信するために使用するエンティティとの間の関係が作成されます。

    • LinePrcOverrideEff_Customエンティティ領域で属性を追加し、「保存」をクリックします。

      属性

      読込み

      書込み

      EffLineId_Custom

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

      チェック・マークは含まれません。

      FulfillLineId_Custom

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

      チェック・マークは含まれません。

      SalePrcOverrideVal_Custom

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

      チェック・マークは含まれません。

  5. オーダー・ヘッダーのソースを設定します。

    • 「ソース」をクリックし、値を含む「行」をクリックします。

      属性

      Source

      OrderHeader

    • 「エンティティ・マッピング」タブで、「表示」>「列」をクリックし、結合エンティティおよび結合エンティティ属性にチェック・マークを追加します。

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

      属性

      エンティティ

      LinePrcOverrideEff_Custom

      タイプ

      ビュー・オブジェクト

      ビュー・オブジェクト

      FulfillLineEffBLinePrcOverrideprivateVO

      入力する値が、フレックスフィールド・アーカイブを調べたときに、このトピックで前に確認した値と正確に一致していることを確認してください。 .xml拡張子は含めないでください。

      問合せタイプ

      結合

      問合せ属性

      FulfillLineId

      結合エンティティ

      明細

      別の行をクリックしてからこの行に戻り、結合エンティティ属性を取得して値を移入する必要がある場合があります。

      結合エンティティ属性

      LineId

    • 詳細領域LinePrcOverrideEff_Customで、属性を追加し、「保存」をクリックします。

      属性

      ビュー・オブジェクト属性

      EffLineId_Custom

      EffLineId

      FulfillLineId_Custom

      FulfillLineId

      SalePrcOverrideVal_Custom

      salePriceOverrideVal

      入力する値が、このトピックで以前に確認したフレックスフィールド・アーカイブの名前のタグViewAttributeで認識した値と正確に一致していることを確認してください。 たとえば、ViewAttribute Name="salePriceOverrideVal"です。

      このステップでは、オーダー入力スペシャリストが価格オーダー処理を使用するか、販売オーダーを保存するときに、Order Managementが価格設定に送信する公開ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を設定します。

      たとえば:

      Order Managementが価格設定に送信するパブリック・ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を構成するステップ
  6. オーダー明細のソースを設定します。

    • ソース領域で、値を含む「行」をクリックします。

      属性

      Source

      OrderLine

    • 「エンティティ・マッピング」タブで、「処理」>「行の追加」をクリックして値を設定し、「保存」をクリックします。

      属性

      エンティティ

      LinePrcOverrideEff_Custom

      タイプ

      ビュー・オブジェクト

      ビュー・オブジェクト

      FulfillLineEffBLinePrcOverrideprivateVO

      入力する値が、フレックスフィールド・アーカイブを調べたときに、このトピックで前に確認した値と正確に一致していることを確認してください。

      問合せタイプ

      結合

      問合せ属性

      FulfillLineId

      結合エンティティ

      明細

      結合エンティティ属性

      LineId

      このステップでは、パブリック・ビュー・オブジェクトの拡張可能フレックスフィールド属性をマップします。 Order Managementがオーダー明細の明細数量または出荷属性を更新するときに、Order ManagementがPricingに送信するパブリック・ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るようにPricingを設定します。

    • HeaderPricingEff_Customの詳細領域で、属性を追加します。

      属性

      ビュー・オブジェクト属性

      EffLineId_Custom

      EffLineId

      FulfillLineId_Custom

      FulfillLineId

      SalePrcOverrideVal_Custom

      salePriceOverrideVal

      入力する値が、このトピックで以前に調べたフレックスフィールド・アーカイブのViewAttribute名前タグで確認した値と正確に一致していることを確認してください。 たとえば、ViewAttribute Name="salePriceOverrideVal"です。

      このステップでは、Order Managementがオーダー明細の数量属性または出荷属性を更新したときにOrder Managementが価格設定に送信するパブリック・ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を設定します。

      たとえば:

      Order Managementが受注明細の数量属性または出荷属性を更新するときに、Order Managementが価格設定に送信するパブリック・ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を構成するステップ
  7. 「保存してクローズ」>「完了」をクリックします。

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

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

  2. 「アルゴリズムの管理」ページで、この価格設定アルゴリズムの公開済バージョン(バージョン1など)を選択します。

    属性

    名前

    商品およびサービスの基本定価の取得

  3. 「処理」>「バージョンの作成」をクリックし、ページがバージョン2などの進行中のバージョンが表示されるまで待ちます

  4. 編集のために進行中バージョンを開きます。

  5. 「アルゴリズムの編集」ページのアルゴリズム・タブで、ステップ「手数料の作成」を展開し、ステップ「ネイティブ・チャージの作成」をクリックします。

    このステップは、上書き値を含む拡張可能フレックスフィールドを参照するように変更します。

  6. データ・セット領域で、このデータ・セットを追加します。

    属性

    名前

    LinePrcOverrideEff

    変数パス

    PriceRequest.LinePrcOverrideEff_Custom

    カーディナリティ

    0または1つ

    データ・セット結合

    [FulfillLineId_Custom: {Line.LineId}]

    たとえば:

    上書き値を含む拡張可能フレックスフィールドを参照するステップ
  7. デフォルト・アクション領域のアクション・ウィンドウで、コードを置き換えます。

    旧コード

    新規コード

    Ch.CurrencyCode = Line.AppliedCurrencyCode
    //Ch.CurrencyCode = Line.AppliedCurrencyCode
    //Base List Price Override
    if (null != LinePrcOverrideEff?.SalePrcOverrideVal_Custom) {
      Ch.CurrencyCode = Header.AppliedCurrencyCode
      Line.AppliedCurrencyCode = Header.AppliedCurrencyCode
      Ch.NeedsCostPlus = false
      //clear out the tier and matrix adjustments
      Candidate.unset('TieredPricingHeaderId')
      Candidate.unset('AttributePricingMatrixId')
    }
    else {
      Ch.CurrencyCode = Line.AppliedCurrencyCode
      Ch.NeedsCostPlus = ('COST'==CalculationMethod)
    }
    
  8. このコードをコメントにします。

    旧コード

    新規コード

    Ch.NeedsCostPlus = ('COST'==CalculationMethod)
    //Ch.NeedsCostPlus = ('COST'==CalculationMethod)

    改訂された完全なコードを次に示します。

    Ch = Charge.insert([ChargeId:++ServiceParam.ChargeIdCntr, LineId:Line.LineId, ParentEntityId:Candidate.ParentEntityId, ParentEntityCode:'LINE'])
    if ( CanAdjustFlag!=null ) Ch.CanAdjustFlag = ('Y'==CanAdjustFlag)
      Ch.ChargeAppliesTo = Candidate.ChargeAppliesTo
      Ch.ChargeDefinitionCode = Candidate.ChargeDefinitionCode
      Ch.ChargeDefinitionId = ChargeDefinitionId
      Ch.ChargeSubtypeCode = ChargeSubtypeCode
      Ch.ChargeTypeCode = ChargeTypeCode
    // Set the CompSeqCntr as Long instead of Integer
    Ch.CompSeqCntr = 1000L
    //Ch.CurrencyCode = Line.AppliedCurrencyCode
    //Base List Price Override
    if (null != LinePrcOverrideEff?.SalePrcOverrideVal_Custom) {
      Ch.CurrencyCode = Header.AppliedCurrencyCode
      Line.AppliedCurrencyCode = Header.AppliedCurrencyCode
      Ch.NeedsCostPlus = false
      //clear out the tier and matrix adjustments
      Candidate.unset('TieredPricingHeaderId')
      Candidate.unset('AttributePricingMatrixId')
    }
    else {
      Ch.CurrencyCode = Line.AppliedCurrencyCode
      Ch.NeedsCostPlus = ('COST'==CalculationMethod)
    }
    Ch.EstimatedPricedQuantityFlag = ('USAGE'==PriceTypeCode || 'RECURRING_USAGE'==PriceTypeCode)
    Ch.EstimatedUnitPriceFlag = Ch.EstimatedPricedQuantityFlag
    Ch.PrimaryFlag = false
    Ch.RollupFlag = false
    //Ch.NeedsCostPlus = ('COST'==CalculationMethod)
    Ch.NeedsMargin = ('Y'==CalculateMarginFlag)
    if (PricePeriodicityCode!=null) Ch.PricePeriodicityCode = PricePeriodicityCode
      Ch.PriceTypeCode = PriceTypeCode
    if ( 'USAGE'==PriceTypeCode || 'RECURRING_USAGE'==PriceTypeCode ) {
      // PricedQty should be null if estimated usage quantity is not passed in
      PricedQty = (Ci?.EstimatedUsageQuantity!=null ? (Ci.PerUnitUsageFlag ? (Line.ExtendedQuantity?.Value ?: Line.LineQuantity.Value) : 1)*Ci?.EstimatedUsageQuantity?.Value : null)
    }
    else {
      PricedQty = Line.ExtendedQuantity?.Value ?: Line.LineQuantity.Value
    }
    if ( PricedQty != null ) {
      Ch.createDataObject('PricedQuantity')
      Ch.PricedQuantity.Value = PricedQty
      Ch.PricedQuantity.UnitCode = PricingUomCode
      Ch.PricedQuantityUOMCode = PricingUomCode
    }
    Ch.RunningUnitPrice = 0
    if (Ci?.UsagePeriodCode!=null) Ch.UsagePeriodCode = Ci.UsagePeriodCode
    if (Ch.UsagePeriodCode!=null && Candidate.UsagePeriodCode!=null) Ch.UsagePeriodCode = Candidate.UsagePeriodCode
    if (UsageUomCode!=null) Ch.UsageUOMCode = UsageUomCode
    
      Ch.TaxIncludedFlag = false
      finer(AlgmName+': created native charge '+Ch.ChargeId+' ('+Ch.PriceTypeCode+', '+Ch.ChargeTypeCode+', '+Ch.ChargeSubtypeCode+') for line '+Line.LineId)
    
    // Needed to write charge component
    Candidate.ChargeId = Ch.ChargeId
    
    // Initialize for tiered pricing
    if (Candidate.TieredPricingHeaderId != null) {
      TierQ.insert([TieredPricingHeaderId:Candidate.TieredPricingHeaderId, ChargeId:Ch.ChargeId, OriginId:Line.LineId, OriginType:'LINE'])
    }
    
    // Initialize for attribute-based pricing
    if (Candidate.AttributePricingMatrixId != null) {
      MatrixQ.insert([DynamicMatrixId:Candidate.AttributePricingMatrixId, ParentEntityId:Ch.ChargeId, FromCurrencyCode:Ch.CurrencyCode, ParentEntityCode:'CHARGE'])
    }
    
    // Coverage Duration being calculated if its a Phantom Line 
    if ('COVERED_STANDARD' == Line.ItemType && Line.PhantomFlag)
    {
      if (CoverageAssociation != null)
      {
      Ch.createDataObject('CoverageDuration')
      Ch.CoverageDuration.Value = CoverageAssociation.CoverageDuration.Value
      Ch.CoverageDuration.UnitCode = CoverageAssociation.CoverageDuration.UnitCode
      Ch.CoverageDurationUOMCode = CoverageAssociation.CoverageDurationUOMCode   
      }
      Ch.LineId = CoverageLine.LineId
    }
    
  9. 「手数料コンポーネントの作成」ステップをクリックします。

    このステップを変更して、上書き値を含む拡張可能フレックスフィールドを参照し、この値を使用して単価を計算します。

  10. データ・セット領域で、このデータ・セットを追加します。

    属性

    名前

    LinePrcOverrideEff

    変数パス

    PriceRequest.LinePrcOverrideEff_Custom

    カーディナリティ

    0または1つ

    データ・セット結合

    [FulfillLineId_Custom: {Line.LineId}]

  11. Default Action(デフォルト・アクション)領域で、次のコードを見つけます。

    Comp.createDataObject('UnitPrice')
  12. このコードを、先ほど見つけたコードのすぐ下に追加します。

    //Base List Price Override
    if(Candidate.CalculationMethod == 'COVERED_ITEM_PRICE_PERCENT') {
      fine({'UnitPrice Calc - Cand.CalculationAmount: '+Candidate.CalculationAmount+' CoverageBasis: '+Candidate.CoverageBasisValue})
      Comp.UnitPrice.Value = Candidate.CalculationAmount * Candidate.CoverageBasisValue/ 100
      Ch.HasPercentPriceFlag = true
    }
    else {
     //Base List Price Override
      if (LinePrcOverrideEff?.SalePrcOverrideVal_Custom != null)
        Comp.UnitPrice.Value = LinePrcOverrideEff.SalePrcOverrideVal_Custom
      else 
        Comp.UnitPrice.Value = Candidate.BasePrice
    }
    Comp.UnitPrice.CurrencyCode = Line.AppliedCurrencyCode
    Comp.CurrencyCode = Line.AppliedCurrencyCode
    
    // convert currency if needed
    if ( Line.FromCurrencyCode!=null && Line.FromCurrencyCode!=Line.AppliedCurrencyCode ) {
      if (ConvRate?.MessageTypeCode == 'ERROR') {
        finest('creating line message')
        Line.MessageTypeCode = 'ERROR'
        Ch.MessageTypeCode = 'ERROR'
        def messageMap = [ParentEntityCode:'LINE', ParentEntityId:Line.LineId, HeaderId:Header.HeaderId, MessageText:ConvRate.PrcErrorMessage]
        msg = Message.locate(messageMap)
        if ( msg==null ) {
          // create new error message for Line
          msg = Message.insert(messageMap)
          msg.PricingMessageId = getNextId()
          msg.MessageName = ConvRate.PrcMessageName
          msg.MessageTypeCode = Line.MessageTypeCode
        }
      }
      else {
          Ch.CurrencyCode = Line.AppliedCurrencyCode
          Comp.UnitPrice.Value *= ConvRate.ConversionRate?:1
      }
    }
    //end base price override
    

    改訂された完全なコードを次に示します。

    Comp = ChargeComponent.insert([ChargeComponentId:++ServiceParam.ChargeComponentIdCntr, ChargeId: Ch.ChargeId])
    
    Comp.PriceElementCode = ElementParam
    Comp.PriceValidFrom = Line.PricingDate
    if ( EndDate!=null ) Comp.PriceValidUntil = EndDate
    Comp.SequenceNumber = (Long) Ch.CompSeqCntr++
    Comp.SourceId = Candidate.PriceListChargeId
    Comp.SourceTypeCode = 'PRICE_LIST_CHARGE'
    
    fine({'Before UnitPrice Calc - CalcMethod: '+Candidate.CalculationMethod})
    Comp.createDataObject('UnitPrice')
    //Base List Price Override
    if(Candidate.CalculationMethod == 'COVERED_ITEM_PRICE_PERCENT') {
      fine({'UnitPrice Calc - Cand.CalculationAmount: '+Candidate.CalculationAmount+' CoverageBasis: '+Candidate.CoverageBasisValue})
      Comp.UnitPrice.Value = Candidate.CalculationAmount * Candidate.CoverageBasisValue/ 100
      Ch.HasPercentPriceFlag = true
    }
    else {
     //Base List Price Override
      if (LinePrcOverrideEff?.SalePrcOverrideVal_Custom != null)
        Comp.UnitPrice.Value = LinePrcOverrideEff.SalePrcOverrideVal_Custom
      else 
        Comp.UnitPrice.Value = Candidate.BasePrice
    }
    Comp.UnitPrice.CurrencyCode = Line.AppliedCurrencyCode
    Comp.CurrencyCode = Line.AppliedCurrencyCode
    
    // convert currency if needed
    if ( Line.FromCurrencyCode!=null && Line.FromCurrencyCode!=Line.AppliedCurrencyCode ) {
      if (ConvRate?.MessageTypeCode == 'ERROR') {
        finest('creating line message')
        Line.MessageTypeCode = 'ERROR'
        Ch.MessageTypeCode = 'ERROR'
        def messageMap = [ParentEntityCode:'LINE', ParentEntityId:Line.LineId, HeaderId:Header.HeaderId, MessageText:ConvRate.PrcErrorMessage]
        msg = Message.locate(messageMap)
        if ( msg==null ) {
          // create new error message for Line
          msg = Message.insert(messageMap)
          msg.PricingMessageId = getNextId()
          msg.MessageName = ConvRate.PrcMessageName
          msg.MessageTypeCode = Line.MessageTypeCode
          }
      }
      else {
        Ch.CurrencyCode = Line.AppliedCurrencyCode
        Comp.UnitPrice.Value *= ConvRate.ConversionRate?:1
      }
    }
    //end base price override
    
    Ch.RunningUnitPrice+=Comp.UnitPrice.Value
    if ( Ch.PricedQuantity!=null ) {
      Comp.createDataObject('ExtendedAmount')
      Comp.ExtendedAmount.Value = Comp.UnitPrice.Value*Ch.PricedQuantity.Value
      Comp.ExtendedAmount.CurrencyCode = Comp.UnitPrice.CurrencyCode
      def fromUomCode = null
      def fromUomValue = null
      if ( 'COVERED_STANDARD' == Line.ItemType && Line.PhantomFlag ){
        fromUomCode = Ch.CoverageDurationUOMCode
        fromUomValue = Ch.CoverageDuration.Value
      }else if ( Line.ItemType in ['STANDARD', 'COMPONENT', 'ROOT'] && null != Line.ServiceDuration?.Value  && null != Line.ServiceDurationPeriodCode ) {
        fromUomCode = Line.ServiceDurationPeriodCode
        fromUomValue = Line.ServiceDuration?.Value
      }
      if (null != fromUomCode &&  null != fromUomValue)  {
        Comp.createDataObject('CoverageExtendedAmount')
        if ('ONE_TIME' == Ch.PriceTypeCode) {            
          Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value
        }else if ('RECURRING' == Ch.PriceTypeCode) {
          if (Ch.PricePeriodicityCode != fromUomCode) {
            def   fromUom = getOKCUomMappings(fromUomCode)
            def   toUom = getOKCUomMappings(Ch.PricePeriodicityCode)
                    
            if(null == fromUom || null == toUom){
              Line.MessageTypeCode = 'ERROR'
                Ch.MessageTypeCode = Line.MessageTypeCode
                def uomMsg = Message.insert([
                MessageName:'QP_PDP_PARTIAL_PERIOD_UOM_NA',
                MessageTypeCode: 'ERROR',
                ErrorType:(Ch.HasPercentPriceFlag?'PERCENTAGE':'AMOUNT'),
                PricingMessageId: getNextId(),
                ParentEntityCode: 'LINE', 
                ParentEntityId: Line.LineId, 
                HeaderId: Header.HeaderId])
              def chargeName = getChargeDefinitionName(Ch.ChargeDefinitionId)
              if(null == fromUom){
                def fromUomTranslation = getUomTranslation(fromUomCode)
                uomMsg.MessageText = getFndMessage('QP', 'QP_PDP_PARTIAL_PERIOD_UOM_NA', ['CHARGE_DEF_NAME':chargeName?.Name , 'UOM_CODE':fromUomTranslation?.UnitOfMeasure])
                }
                    
              if(null == toUom){
                def toUomTranslation = getUomTranslation(Ch.PricePeriodicityCode)
                uomMsg.MessageText = getFndMessage('QP', 'QP_PDP_PARTIAL_PERIOD_UOM_NA', ['CHARGE_DEF_NAME':chargeName?.Name , 'UOM_CODE':toUomTranslation?.UnitOfMeasure])
                }
              }
                       
              if(null != fromUom && null != toUom){
                durationConvRate = getDurationConversionRate(fromUom, toUom, CoverageAssociation, Line)
                if(null == durationConvRate){
                def fromUomTranslation = getUomTranslation(fromUomCode)
                def toUomTranslation = getUomTranslation(Ch.PricePeriodicityCode)
                Line.MessageTypeCode = 'ERROR'
                Ch.MessageTypeCode = 'ERROR'
                Message.insert([
                  MessageName:'QP_PDP_PARTIAL_PERIOD_CONVERS',
                  MessageText: getFndMessage('QP', 'QP_PDP_PARTIAL_PERIOD_CONVERS',
                    ['UOM': toUomTranslation?.UnitOfMeasure, 'COV_UOM': fromUomTranslation?.UnitOfMeasure]),
                  MessageTypeCode: Line.MessageTypeCode,
                  ErrorType:(Ch.HasPercentPriceFlag?'PERCENTAGE':'AMOUNT'),
                  PricingMessageId: getNextId(),
                  ParentEntityCode: 'LINE', 
                  ParentEntityId: Line.LineId, 
                  HeaderId: Header.HeaderId])
              } else {
                if( RollupCh != null )
                  RollupCh.PartialPeriodDurationConversionRate = durationConvRate
                  Ch.PartialPeriodDurationConversionRate = durationConvRate
                  Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount?.Value * durationConvRate                    
                  }
                }
              } else            
                Comp.CoverageExtendedAmount.Value =  Comp.ExtendedAmount.Value * fromUomValue            
             }
        Comp.CoverageExtendedAmount.CurrencyCode =  Comp.ExtendedAmount.CurrencyCode
      } 
    }
    
    finer(AlgmName+': created '+Comp.PriceElementCode+' charge component '+Comp.ChargeComponentId+' with unit price '+Comp.UnitPrice.Value+' '+Comp.UnitPrice.CurrencyCode+', extended amount '+(Comp.ExtendedAmount!=null ? Comp.ExtendedAmount.Value+' '+Comp.ExtendedAmount.CurrencyCode : null))
    
  13. 「保存して閉じる」をクリックします

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

設定のテスト

  1. 「アルゴリズムの管理」ページで、価格販売トランザクションを開いて編集します。

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

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

    属性

    テスト・ケース名

    テスト基準価格上書き

  4. 入力のテスト領域の変数名列にPriceRequestが含まれている行で、変数値列の「鉛筆」をクリックします。

  5. 「変数の編集」ダイアログで、すべてのコードを削除してから、次のコードを追加します:

    <?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/pricingInternal/PricingInternal"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PriceRequestInternal:PriceRequestInternalType">
    <PriceRequestInternal:Header>
      <PriceRequestInternal:CustomerId>1028144</PriceRequestInternal:CustomerId>
      <PriceRequestInternal:HeaderId>101</PriceRequestInternal:HeaderId>
      <PriceRequestInternal:CalculatePricingChargesFlag>true</PriceRequestInternal:CalculatePricingChargesFlag>   <PriceRequestInternal:CalculateShippingChargesFlag>false</PriceRequestInternal:CalculateShippingChargesFlag>
    <PriceRequestInternal:CalculateTaxFlag>false</PriceRequestInternal:CalculateTaxFlag>  <PriceRequestInternal:SellingBusinessUnitId>103</PriceRequestInternal:SellingBusinessUnitId>
      <PriceRequestInternal:SellingLegalEntityId>204</PriceRequestInternal:SellingLegalEntityId>
      <PriceRequestInternal:TransactionTypeCode>ORDER</PriceRequestInternal:TransactionTypeCode>
    </PriceRequestInternal:Header>
    <PriceRequestInternal:PricingServiceParameter>
      <PriceRequestInternal:PricingContext>SALES</PriceRequestInternal:PricingContext>
    </PriceRequestInternal:PricingServiceParameter>
    <PriceRequestInternal:Line>
      <PriceRequestInternal:HeaderId>101</PriceRequestInternal:HeaderId>
      <PriceRequestInternal:InventoryItemId>100000017351102</PriceRequestInternal:InventoryItemId>
      <PriceRequestInternal:InventoryOrganizationId>204</PriceRequestInternal:InventoryOrganizationId>
      <PriceRequestInternal:LineId>1001</PriceRequestInternal:LineId>
      <PriceRequestInternal:LineCategoryCode>ORDER</PriceRequestInternal:LineCategoryCode>
      <PriceRequestInternal:LineQuantity unitCode="Ea" xmlns:tns="http://xmlns.oracle.com/adf/svc/errors/">2</PriceRequestInternal:LineQuantity>
      <PriceRequestInternal:LineQuantityUOMCode>Ea</PriceRequestInternal:LineQuantityUOMCode>
      <PriceRequestInternal:LineTypeCode>ORA_BUY</PriceRequestInternal:LineTypeCode>
    </PriceRequestInternal:Line>
    <PriceRequestInternal:LinePrcOverrideEff_Custom>
      <PriceRequestInternal:SalePrcOverrideVal_Custom>1000</PriceRequestInternal:SalePrcOverrideVal_Custom>
      <PriceRequestInternal:FulfillLineId_Custom>1001</PriceRequestInternal:FulfillLineId_Custom>
      <PriceRequestInternal:EffLineId_Custom>123</PriceRequestInternal:EffLineId_Custom>
    </PriceRequestInternal:LinePrcOverrideEff_Custom>
    
    <PriceRequestInternal:ChangeSummary logging="false" xmlns:sdo="commonj.sdo"/>
    </PriceRequestInternal:PriceRequestInternalType>
    

    説明

    次に例を示します

    1028144

    CustomerId

    103

    SellingBusinessUnitId

    204

    SellingLegalEntityId

    100000017351102

    InventoryItemId

    204

    InventoryOrganizationId

    Ea

    unitCode

    Ea

    LineQuantityUOMCode

    <PriceRequestInternal:SalePrcOverrideVal_Custom>1000</PriceRequestInternal:SalePrcOverrideVal_Custom>

    正価を$1000に上書きすることを指定します。 必要に応じて、テストのこの値を変更します。

    環境で使用する必要がある値を取得するには、このトピックで後述するテスト・ペイロードの識別子の取得の項を参照してください。

  6. 「テストの実行」>「出力のテスト」をクリックし、出力ペイロードに期待する詳細が含まれていることを確認します。

  7. 最終実行ステータスに成功または同様の成功を示すことを確認します。

    失敗が表示された場合は、「例外詳細の表示」をクリックして確認し、トラブルシューティングします。

    このエラーが表示された場合は、XMLエディタを使用して、コードで正しいXML形式が使用されていることを検証します。

    Error: Unable to parse the variable[PriceRequest] using the service 
    definition [Sales.PriceRequestInternal]. Please check the variable value or service schema
    
  8. 「保存して閉じる」をクリックします

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

販売オーダーのテストの作成

  1. サインアウトし、販売オーダーの管理に必要な権限でサインインします。

  2. 「オーダーの作成」をクリックし、オーダー・ヘッダーの値を入力し、オーダー明細を追加してから、199などの拡張可能フレックスフィールドに値を追加します。

  3. 販売オーダーを保存するか、「処理」>「オーダーの価格再設定」をクリックします。

  4. 品目の価格に、拡張可能フレックスフィールドおよびSalePrcOverrideValに入力した価格が含まれていることを確認します。

テスト・ペイロードの識別子の取得

  1. 販売オーダーの管理に必要な権限があることを確認してください。

    「オーダー管理」作業領域に移動し、販売オーダーを作成します。

    • 属性をテストする必要がある値に設定します。

      属性

      値の例

      Customer

      Fantastic Laptops

      ビジネス・ユニット

      Vision Operations

    • テストする品目を含むオーダー明細を追加します。 この例では、AS54888を追加します。

    • 「送信」をクリックし、Order Managementで作成される販売オーダー番号(12345など)を確認します。

  2. 販売オーダー・ヘッダーの値を取得します。 ステップ1で作成した販売オーダーを格納するために使用するデータベースで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 = $12345;
    

    説明

    • 12345は、ステップ1で書き留めた順序番号です。

    • 問合せは、これらのヘッダー属性のペイロードで使用できる値を返します。

      SQLの値

      テスト・ペイロードの属性の値を指定

      値の例

      sold_to_party_id

      Header.CustomerId

      Header_idは100413で、CustomerIdは1006です。

      org_id

      Header.SellingBusinessUnitId

      SellingBusinessUnitIdは204です。

      legal_entity_id

      Header.SellingLegalEntityId

      SellinglegalEntityIdは204です。

  3. オーダー明細の値を取得します。 このSQL問合せを実行します。

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

    説明

    • 56789は、ステップ2の問合せ結果のヘッダーIDです。

    • 問合せは、これらのオーダー明細属性のペイロードで使用できる値を返します。

      SQLの値

      テスト・ペイロードの属性の値を指定

      値の例

      inventory_item_id

      Line.InventoryItemId

      Header_idは100413で、InventoryItemIdは149です。

      inventory_organization_id

      Line.InventoryOrganizationId

      InventoryOrganizationIdは204です。

      ordered_uom

      Line.LineQuantity.UOMCode

      ペイロード内の2つの異なるロケーションにあるUOMCodeを置換する必要があることに注意してください。 この例では、値はEaです。

      LineQuantityUOMCodeはUSDです。