基本定価の上書き
Oracle Pricingを設定して、拡張可能フレックスフィールドの値を使用して基準定価を上書きします。
この手順は、標準品目でのみ使用します。 カバレッジ品目またはサブスクリプション品目では使用できません。
この例では、Order Management作業領域に表示する拡張可能フレックスフィールドを定義します。 次に、オーダー入力スペシャリストがフレックスフィールドに入力する値を使用して、販売価格手数料を上書きします。
設定の概要
-
拡張可能フレックスフィールドを設定します。
-
価格設定アルゴリズムを変更します。
-
設定をテストします。
拡張可能フレックスフィールドの設定
-
Order Managementの管理に必要な権限があることを確認します。
価格設定権限でサインインしないでください。 これらを使用して拡張可能フレックスフィールドを定義することはできません。
-
「設定および保守」作業領域に移動してから、タスクに移動します。
-
オファリング: オーダー管理
-
機能領域: オーダー
-
タスク: オーダーの拡張可能フレックスフィールドの管理
この例では、Order Managementオファリングを実装していることを前提としています。 別のオファリングを使用している場合は、Order Managementのかわりにそのオファリングをクリックします。
-
-
拡張可能フレックスフィールドを変更します。
-
「オーダー拡張可能フレックスフィールドの管理」ページで値を入力し、「検索」をクリックします。
属性
値
名前
履行明細情報
フレックスフィールド・コード
DOO_FULFILL_LINES_ADD_INFO
-
「処理」→「編集」をクリックします。
-
「コンテキストの管理」をクリックします。
-
「コンテキストの管理」ページで、「処理」>「作成」をクリックします。
-
「コンテキストの作成」ページで、値を設定します。
属性
値
表示名
LinePrcOverride
コード
LinePrcOverride
API名
ライン・ナップ
使用可能
チェック・マークが含まれます
動作
単一行
-
コンテキスト使用方法領域で、「処理」>「作成」をクリックし、値を設定して、「保存」をクリックします。
属性
値
名前
追加履行明細情報
表示権限
なし
権限の編集
なし
-
コンテキスト依存セグメント領域で、「処理」>「作成」をクリックします。
-
「セグメントの作成」ページで値を設定し、「保存してクローズ」をクリックします。
属性
値
名前
SalePrcOverrideVal
コード
SalePrcOverrideVal
API名
売却価額
使用可能
チェック・マークが含まれます。
データ型
数値
表の列
使用可能な列を選択します。
値セット
15桁数値
プロンプト
SalePrcOverrideVal
-
「コンテキストの編集」ページで、「保存してクローズ」をクリックします。
-
「コンテキストの管理」ページで、「保存してクローズ」をクリックします。
-
「拡張可能フレックスフィールドの編集」ページで、「保存してクローズ」をクリックします。
-
-
拡張可能フレックスフィールドをデプロイします。
-
「オーダー拡張可能フレックスフィールドの管理」ページで、「処理」>「フレックスフィールドのデプロイ」をクリックします。
-
デプロイメント・ダイアログがデプロイメントが正常に終了したことを示すまで待機し、OKをクリックします。
-
「処理」>「フレックスフィールド・アーカイブのダウンロード」をクリックし、アーカイブが正常に終了したことを示すダイアログを待ってから、「ダウンロード」をクリックします。
-
ファイル10008_DOO_FULFILL_LINES_ADD_INFO.zipをローカル・ハード・ドライブに保存し、抽出してこのフォルダに移動します。
oracle\apps\scm\doo\processOrder\flex\fulfillLineContextsB\view\
-
FulfillLineEffBLinePrcOverrideprivateVO.xmlを開きます。
-
サービス・マッピングへの拡張可能フレックスフィールドの追加
拡張可能フレックスフィールドから価格設定に値をマップするサービス・マッピングを定義します。
拡張可能フレックスフィールドをサービス・マッピングに追加します。
-
サインアウトし、価格設定の管理に必要な権限でサインインします。
-
価格設定管理作業領域に移動し、「タスク」>「サービス・マッピングの管理」をクリックします。
-
「サービス・マッピングの管理」ページの名前列で、「販売」をクリックします。
-
エンティティを定義します。
-
「サービス・マッピングの編集」ページのエンティティ・タブで、「処理」>「行の追加」をクリックし、値を設定します。
属性
値
エンティティ
LinePrcOverrideEff_Custom
説明
価格の上書きに使用する拡張可能フレックスフィールドの値を取得します。
-
詳細領域で属性を追加し、「保存」をクリックします。
属性
タイプ
主キー
FulfillLineId_Custom
Long
チェック・マークが含まれます。
EffLineId_Custom
Long
チェック・マークは含まれません。
SalePrcOverrideVal_Custom
小数
チェック・マークは含まれません。
たとえば:
-
「サービス」をクリックし、この値を含む「行」をクリックします。
属性
値
サービス
PriceSalesTransaction
-
詳細領域で、「処理」>「行の追加」をクリックし、これらの値を設定します。
エンティティ
読込み
書込み
LinePrcOverrideEff_Custom
チェック・マークが含まれます。
チェック・マークは含まれません。
このステップでは、価格設定と、拡張可能フレックスフィールドから値を送信するために使用するエンティティとの間の関係が作成されます。
-
LinePrcOverrideEff_Customエンティティ領域で属性を追加し、「保存」をクリックします。
属性
読込み
書込み
EffLineId_Custom
チェック・マークが含まれます。
チェック・マークは含まれません。
FulfillLineId_Custom
チェック・マークが含まれます。
チェック・マークは含まれません。
SalePrcOverrideVal_Custom
チェック・マークが含まれます。
チェック・マークは含まれません。
-
-
オーダー・ヘッダーのソースを設定します。
-
「ソース」をクリックし、値を含む「行」をクリックします。
属性
値
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が価格設定に送信する公開ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を設定します。
たとえば:
-
-
オーダー明細のソースを設定します。
-
ソース領域で、値を含む「行」をクリックします。
属性
値
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が価格設定に送信するパブリック・ビュー・オブジェクトから拡張可能フレックスフィールド値を読み取るように価格設定を設定します。
たとえば:
-
-
「保存してクローズ」>「完了」をクリックします。
価格設定アルゴリズムの変更
-
「タスク」>「アルゴリズムの管理」をクリックします。
-
「アルゴリズムの管理」ページで、この価格設定アルゴリズムの公開済バージョン(バージョン1など)を選択します。
属性
値
名前
商品およびサービスの基本定価の取得
-
「処理」>「バージョンの作成」をクリックし、ページがバージョン2などの進行中のバージョンが表示されるまで待ちます
-
編集のために進行中バージョンを開きます。
-
「アルゴリズムの編集」ページのアルゴリズム・タブで、ステップ「手数料の作成」を展開し、ステップ「ネイティブ・チャージの作成」をクリックします。
このステップは、上書き値を含む拡張可能フレックスフィールドを参照するように変更します。
-
データ・セット領域で、このデータ・セットを追加します。
属性
値
名前
LinePrcOverrideEff
変数パス
PriceRequest.LinePrcOverrideEff_Custom
カーディナリティ
0または1つ
データ・セット結合
[FulfillLineId_Custom: {Line.LineId}]
たとえば:
-
デフォルト・アクション領域のアクション・ウィンドウで、コードを置き換えます。
旧コード
新規コード
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) }
-
このコードをコメントにします。
旧コード
新規コード
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 }
-
「手数料コンポーネントの作成」ステップをクリックします。
このステップを変更して、上書き値を含む拡張可能フレックスフィールドを参照し、この値を使用して単価を計算します。
-
データ・セット領域で、このデータ・セットを追加します。
属性
値
名前
LinePrcOverrideEff
変数パス
PriceRequest.LinePrcOverrideEff_Custom
カーディナリティ
0または1つ
データ・セット結合
[FulfillLineId_Custom: {Line.LineId}]
-
Default Action(デフォルト・アクション)領域で、次のコードを見つけます。
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
改訂された完全なコードを次に示します。
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))
-
「保存して閉じる」をクリックします
-
「アルゴリズムの管理」ページで、「処理」>「公開」をクリックします。
設定のテスト
-
「アルゴリズムの管理」ページで、価格販売トランザクションを開いて編集します。
-
「アルゴリズムの編集」ページで、「テスト」をクリックします。
-
「処理」>「行の追加」をクリックし、値を設定します。
属性
値
テスト・ケース名
テスト基準価格上書き
-
入力のテスト領域の変数名列にPriceRequestが含まれている行で、変数値列の「鉛筆」をクリックします。
-
「変数の編集」ダイアログで、すべてのコードを削除してから、次のコードを追加します:
<?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に上書きすることを指定します。 必要に応じて、テストのこの値を変更します。
環境で使用する必要がある値を取得するには、このトピックで後述するテスト・ペイロードの識別子の取得の項を参照してください。
-
「テストの実行」>「出力のテスト」をクリックし、出力ペイロードに期待する詳細が含まれていることを確認します。
-
最終実行ステータスに成功または同様の成功を示すことを確認します。
失敗が表示された場合は、「例外詳細の表示」をクリックして確認し、トラブルシューティングします。
このエラーが表示された場合は、XMLエディタを使用して、コードで正しいXML形式が使用されていることを検証します。
Error: Unable to parse the variable[PriceRequest] using the service definition [Sales.PriceRequestInternal]. Please check the variable value or service schema
-
「保存して閉じる」をクリックします
-
「アルゴリズムの管理」ページで、「処理」>「公開」をクリックします。
販売オーダーのテストの作成
-
サインアウトし、販売オーダーの管理に必要な権限でサインインします。
-
「オーダーの作成」をクリックし、オーダー・ヘッダーの値を入力し、オーダー明細を追加してから、199などの拡張可能フレックスフィールドに値を追加します。
-
販売オーダーを保存するか、「処理」>「オーダーの価格再設定」をクリックします。
-
品目の価格に、拡張可能フレックスフィールドおよびSalePrcOverrideValに入力した価格が含まれていることを確認します。
テスト・ペイロードの識別子の取得
-
販売オーダーの管理に必要な権限があることを確認してください。
「オーダー管理」作業領域に移動し、販売オーダーを作成します。
-
属性をテストする必要がある値に設定します。
属性
値の例
Customer
Fantastic Laptops
ビジネス・ユニット
Vision Operations
-
テストする品目を含むオーダー明細を追加します。 この例では、AS54888を追加します。
-
「送信」をクリックし、Order Managementで作成される販売オーダー番号(12345など)を確認します。
-
-
販売オーダー・ヘッダーの値を取得します。 ステップ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です。
-
-
オーダー明細の値を取得します。 この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です。
-