価格設定アルゴリズム
価格設定アルゴリズムを使用して、価格設定ロジックおよび価格計算を管理します。
価格設定アルゴリズムは、条件ロジック、変数、関数およびGroovyスクリプトを使用して、価格設定に影響するデータを操作するルールのセットです。 これを使用して、品目の価格設定時にOracle Pricingで使用されるロジックを変更します。
-
プロシージャ・ロジックを作成します。 価格設定では、異なる価格設定アルゴリズムを使用して異なる価格が計算されます。 たとえば、事前定義済の販売トランザクションの価格設定アルゴリズムは、各販売トランザクションの価格設定に論理ステップを使用します。
-
価格設定セグメントと戦略の決定
-
定価の取得
-
調整および割引の適用
-
出荷および税金の計算
-
-
ステップの変更、再利用、順序変更、追加または削除を行います。
-
関数および変数を追加します。
-
独自のアルゴリズムを作成します。
-
Groovyスクリプトおよび式ビルダーを使用して、アルゴリズムをコーディングおよび拡張します。
-
独自の動的価格設定計算を追加します。 たとえば、毎日変更される商品価格を計算します。 別の例として、サービス契約の価格設定とは異なる販売オーダーの価格設定、およびサブスクリプションの価格設定とは異なるサービス契約の価格設定を設定します。
-
アルゴリズムの様々なバージョンを作成して公開し、様々なシナリオを試すようにテストします。
-
独自の価格設定アルゴリズムから別の価格設定アルゴリズムを参照します。
価格設定アルゴリズムを使用するユースケースについては、「価格設定ユースケースの概要」から始まるユースケースの章を参照してください。 さらに多くのユースケースについては、My Oracle Supportの「Oracle Pricingの技術リファレンス(ドキュメントID 2248583.1)」を参照し、様々な添付を確認します。
価格設定アルゴリズムの構成要素
価格設定アルゴリズムは、価格設定で価格の計算に使用される出力サービス・データ・オブジェクト(SDO)内のデータを操作します(SDOの各属性に値を追加するなど)。
一般的な価格設定アルゴリズムの一部を次に示します。
ノート
-
Name. 各価格設定アルゴリズムは、出荷手数料の計算時に使用する出荷手数料リストの決定や、出荷手数料の計算が必要な各オーダー明細に対する出荷手数料の作成など、有限目標を達成します。
-
Version. 価格設定では、価格設定アルゴリズムを公開するたびに、価格設定アルゴリズムのバージョンが増加します。
-
順序 価格設定アルゴリズムがシーケンスで処理する一連のステップ。 各ステップを上下に移動して、順序を変更できます。
税務当局が、出荷手数料ではなく、販売している品目に対してのみ税金を計算することを要求するとします。 ステップ10の税金のコンピュートを、ステップ4の出荷手数料の作成のすぐ上に移動できます。
-
ステップ・タイプ。 ステップをクリックし、ステップ詳細領域を使用してステップを変更します。
タイプは、条件付きアクション、ネストされたアクション、グループ、サブアルゴリズムなど、ステップで使用されるロジックのタイプを指定します。
ステップ4のCreate Shipping Charges(出荷手数料の作成)は、オーダー明細が出荷手数料の候補である場合にのみ、出荷手数料を出力SDOに書き込む条件ステップです。 使用する条件は次のとおりです。
条件
説明
'SUCCESS' == ServiceParam.OutputStatus && 'LINE' == Candidate.ParentEntityCode
このステップは、オーダー明細が出荷手数料の候補である場合にのみ実行します。
条件で使用される書式を次に示します。
-
SUCCESS
-
ServiceParam
。 この価格設定アルゴリズム・ステップのデータ・セットを識別します。 -
OutputStatus
。 -
&&
。 -
LINE
。 -
Candidate
。 価格設定アルゴリズム・ステップのデータ・セットを識別します。 -
ParentEntityCode
。
詳細は、「価格設定アルゴリズム・ステップ」を参照してください。
-
-
データ・セット データ・セット領域の各行はデータ・セットを定義し、各データ・セットによってステップが処理するレコードのセットがフィルタされます。
-
Variables. 価格設定アルゴリズムで使用する変数を設定します。 たとえば、出荷手数料の計算アルゴリズムでNeedsCurrencyConversion変数をYesに設定すると、通貨を含む各アルゴリズム・ステップで変換が実行されます。
-
Functions. アルゴリズムからデータを受信して処理し、1つ以上の値をアルゴリズムに返す関数を設定します。
-
Subalgorithm. この価格設定アルゴリズムが参照する別の価格設定アルゴリズム。
出荷手数料の計算アルゴリズムのステップ10は、正味価格手数料コンポーネントの作成サブアルゴリズムを参照します。 実行時に、Pricingによってサブアルゴリズムが実行され、後続のステップに戻ります。 ステップ11に戻ります。
変数
価格設定アルゴリズムの変数には、各アルゴリズム・ステップを通過する条件または詳細に応じて変更できる値が格納されます。 これを使用して、価格設定アルゴリズムをコールするオブジェクトからデータを受信したり、オブジェクトにデータを送信します。
次に、変数で使用できる属性を示します。
属性 |
説明 |
---|---|
名前 |
変数を説明する英数字テキスト。 アルゴリズムで一意の名前を使用します。 スペースを含めないでください。 |
データ型 |
文字列などのデータ型。 データ型をデータ・オブジェクトに設定する場合は、内部サービス・スキーマ属性に値を設定する必要があります。 |
必須 |
アルゴリズム・ステップでこの変数を必須にするには、チェック・マークを追加します。 |
Input/Output |
使用方法を指定します。
|
内部サービス・スキーマ |
データ型変数をデータ・オブジェクトに設定した場合は、内部サービス・スキーマを、この変数に詳細を提供するサービス、またはこの変数が提供する出力を使用できるサービスに設定します。 たとえば、CalculateSalesOrderTotalsサービスでは、販売オーダーの合計価格が計算されます。 この変数を使用して合計価格を計算する必要がある場合は、内部サービス・スキーマをCalculateSalesOrderTotalsに設定します。 ほとんどのアルゴリズムには、少なくとも1つのデータ・オブジェクト変数が含まれます。 |
デフォルト式 |
変数のデフォルト値を指定するGroovy式。 入力ペイロードの結果、変数の値を空でない値に設定した場合、Pricingでは式が無視されます。 データ・オブジェクト以外のデータ型ごとに式を使用できます。 |
ほとんどのアルゴリズムには、PriceRequest変数が含まれています。 価格を設定する必要があるトランザクション(販売オーダーなど)に従って、PriceRequestサービス・データ・オブジェクトの詳細が格納されます。
ノート
-
PriceRequestは、PricingInternal.PriceRequestInternal内部サービス・スキーマを使用します。
-
PriceRequestには、ヘッダー、行およびChargeCandidateエンティティの詳細が格納されます。
-
価格設定では、価格設定戦略のセグメント価格リストからChargeCandidateが作成されます。
価格設定アルゴリズムのタイプ
タイプ |
説明 |
---|---|
新規 |
Pricingが初めて提供する価格設定アルゴリズム。
|
現行 |
以前のリリースから現在のリリースにプロモートした価格設定アルゴリズム。
|
提示済 |
特定のビジネス・ニーズを満たすように作成する価格設定アルゴリズム。 「アルゴリズムの管理」ページの「処理」>「作成」をクリックして、拡張価格設定アルゴリズムを作成します。 |
変更済 |
変更した事前定義済の価格設定アルゴリズム。 |
関数
価格設定アルゴリズムの関数は、価格設定アルゴリズムからデータを受信して処理し、1つ以上の値を価格設定アルゴリズムに返すルーチンです。 ビュー・オブジェクト参照関数またはスクリプト関数を使用できます。
事前定義済の通貨換算レートの取得アルゴリズムで、2つのビュー・オブジェクト参照(1つのスクリプトと3つの引数)を使用する方法の例を次に示します。
ノート
属性 |
説明 |
---|---|
名前 |
英数字テキストを入力します。 キャメル・ケースを使用し、最初の文字を小文字にします。 スペースを含めないでください。 たとえば、myPricingFunctionと入力します。 |
問合せタイプ |
値を選択します。
|
引数 |
引数リンクをクリックし、引数を追加します。
|
スクリプトの例
スクリプトはプロシージャ・ロジックを実行し、値を返します。
スクリプトを使用して関数を呼び出すステップの例を次に示します。
ノート
-
ステップ2のGetPricingCurrencyConversionRatesでは、トランザクションの通貨換算レートを取得する必要があります。
-
GetPricingCurrencyConversionRatesの「最初の行のアクション」セクションにあるスクリプトは、getAdjustedRate関数をコールします。
-
この関数は、AdjustmentTypeCodeやAdjustmentValueなどの引数を使用して、換算レートを計算します。
-
この関数は、ConversionRate引数で換算レートを返します。
最初の行アクションの完全なスクリプトを次に示します。 スクリプトがConversionRateなどの引数を頻繁に使用し、getAdjustedRate関数に対して1回のみコールすることに注意してください。 パフォーマンスを向上させるには、スクリプト内の関数に対して1回のみコールします。
ConvRate.ConversionTypeCode = Match.ConversionTypeCode
ConvRate.ConversionRate = Match.ConversionRate
finest {'test GetCurrencyConversionRate - on First row'}
if (Match.ConversionTypeCode == 'GL_SOURCED') {
finest {'get GL Rate for -- FromCurr: '+FromCurrencyCode+' ToCurr: '+ToCurrencyCode+' PriceAsOf: '+PriceAsOf+' GlConvType: '+GlConversionTypeCode}
rate = pricingUtil.getGlRate(FromCurrencyCode, ToCurrencyCode, PriceAsOf, GlConversionTypeCode)
finest {'GL Rate returned -- ConversionRate: '+rate}
ConvRate.ConversionRate = rate
}
finest {'ConversionRate: '+ConvRate.ConversionRate}
if (Match.AdjustmentTypeCode != null && ConvRate.ConversionRate != null && ((ConvRate.ConversionTypeCode.contains('GL') && ConvRate.ConversionRate != -1 && ConvRate.ConversionRate != -2) || !ConvRate.ConversionTypeCode.contains('GL'))) {
finest {'Rate Adjustment -- AdjType: '+Match.AdjustmentTypeCode+' AdjValue: '+Match.AdjustmentValue}
ConvRate.ConversionRate = getAdjustedRate(ConvRate.ConversionRate, Match.AdjustmentTypeCode, Match.AdjustmentValue)
}
finest {'Conversion Error Check - ConvType: '+ConvRate?.ConversionTypeCode}
if (ConvRate?.ConversionTypeCode?.contains('GL') && (ConvRate.ConversionRate == null || ConvRate.ConversionRate == -1 || ConvRate.ConversionRate == -2)) {
finest {'GL Conversion Error'}
ConvRate.ConversionRate = null;
ConvRate.MessageTypeCode = 'ERROR';
ConvRate.PrcMessageName = 'QP_PDP_PRICE_GL_CURR_ERROR';
ConvRate.GlMessageName = (ConvPurpose == 'VALIDATE_PRICE')?'QP_PDP_POLICY_GL_CURR_ERROR':null;
ConvRate.PrcErrorMessage = getFndMessage('QP','QP_PDP_PRICE_GL_CURR_ERROR', null);
ConvRate.GlErrorMessage = ((ConvPurpose == 'VALIDATE_PRICE')?getFndMessage('QP','QP_PDP_POLICY_GL_CURR_ERROR', null):null);
}
else if (!ConvRate?.ConversionTypeCode?.contains('GL') && (ConvRate.ConversionRate == null)) {
finest {'QP Conversion Error'}
ConvRate.ConversionRate = null;
ConvRate.MessageTypeCode = 'ERROR';
ConvRate.PrcMessageName = 'QP_PDP_PRICE_CURR_LIST_ERROR';
ConvRate.GlMessageName = (ConvPurpose == 'VALIDATE_PRICE')?'QP_PDP_POLICY_CURR_LIST_ERROR':null;
ConvRate.PrcErrorMessage = getFndMessage('QP','QP_PDP_PRICE_CURR_LIST_ERROR', null);
ConvRate.GlErrorMessage = (ConvPurpose == 'VALIDATE_PRICE')?getFndMessage('QP','QP_PDP_POLICY_CURR_LIST_ERROR', null):null;
}
getAdjustedRate関数の完全なスクリプトを次に示します。 finest
を使用して引数を宣言し、If文などのロジックを追加します。
finest {'getAdjustedRate Arguments-- AdjType: '+adjustmentTypeCode+' AdjValue: '+adjustmentValue+' convRate: '+conversionRate}
if (conversionRate != null && adjustmentValue != null) {
if (adjustmentTypeCode == 'MARKUP_AMOUNT') { conversionRate += adjustmentValue}
if (adjustmentTypeCode == 'MARKDOWN_AMOUNT') { conversionRate -= adjustmentValue}
if (adjustmentTypeCode == 'MARKUP_PERCENT') { conversionRate += conversionRate * adjustmentValue / 100}
if (adjustmentTypeCode == 'MARKDOWN_PERCENT') { conversionRate -= conversionRate * adjustmentValue / 100}
}
if (adjustmentTypeCode == 'OVERRIDE') { conversionRate = adjustmentValue}
return conversionRate
ビュー・オブジェクト参照の例
次に、ビュー・オブジェクト参照を使用して関数を呼び出すステップの例を示します。 開始するには、引数を追加します。
次に、ビュー・オブジェクト問合せをクリックし、問合せを設定します。 一般的なビュー・オブジェクト問合せを次に示します。 ビュー・オブジェクトの問合せとビュー・オブジェクトの参照は同じ意味であることに注意してください。
この例で使用するコードを次に示します。
-
アプリケーション・モジュール
例
説明
oracle.apps.scm.pricing.priceExecution.pricingProcesses.publicModel.applicationModule.PricingProcessAM
アプリケーション・モジュールを識別します。
価格設定アルゴリズムは価格設定プロセスの一部であるため、PricingProcessを使用します。
-
oracle.apps.scm.pricing.priceExecution
。 PricingProcessへのパス。 -
applicationModule.PricingProcessAM
。 PricingProcessAMを使用するように指定します。AMはアプリケーション・モジュールを意味します。
アプリケーション・モジュールおよびアプリケーション構成について学習します。 詳細は、「価格設定マトリックスで選択できる選択肢」を参照してください。
-
-
アプリケーション構成。
例
説明
${(PriceRequest.PricingServiceParameter[0]?.CacheEnabledFlag==null || PriceRequest.PricingServiceParameter[0].CacheEnabledFlag) ? 'PricingProcessAMShared' : 'PricingProcessAMLocal'}
ほとんどのアルゴリズムでこの構成を使用する必要があります。
-
ビュー・オブジェクト。
例
説明
CurrencyConvRate1
ビュー・オブジェクトの名前を入力します。
価格設定は、GetCurrencyConversionRate関数にCurrencyConvRate1を使用するように事前定義されています。
完全修飾名を使用することもできます。 付加フレックスフィールドを使用する場合のビュー・オブジェクトの名前を識別する例を次に示します。
oracle.apps.flex.scm.pricing.priceExecution.pricingProcesses.priceListCharges.view.PriceListChargeDFFVO
説明
-
oracle.apps.flex.scm.pricing.priceExecution.pricingProcesses.priceListCharges
。 フレックスフィールドのpricingProcessesアプリケーション・モジュールのpriceListChargesエンティティへのパス。
-
PriceListChargeDFFVO
。 ビュー・オブジェクトの名前。DFFVOは付加フレックスフィールド・ビュー・オブジェクトを意味します。
-
-
表示基準
例
説明
この例の値はありません。
バインド変数に従ってビュー・オブジェクトを問い合せることができるかどうかを決定する基準。
-
メモリー内検索仕様。
例
説明
isInDateRange(StrategyDetailStartDate, StrategyDetailEndDate, priceAsOf) && isInDateRange(ConvListStartDate, ConvListEndDate, priceAsOf)&& isInDateRange(ConvDetailStartDate, ConvDetailEndDate, pricingDate)
現在メモリーにあるビュー・オブジェクトの結果をフィルタする検索仕様を追加します。
この例には、検索方法を指定する3つのisInDateRange関数が含まれています。
最初のisInDateRangeは、価格設定戦略に従ってフィルタします。
-
isInDateRange
。 検索仕様の名前。 -
StrategyDetailStartDate
。 この日付以降に開始する価格設定戦略のみが含まれるように結果をフィルタします。 -
StrategyDetailEndDate
。 この日付以前に開始する価格設定戦略のみが含まれるように結果をフィルタします。 -
priceAsOf
。 特定の日付に品目の価格を設定するためにPricingが戦略を使用したレコードのみが含まれるように結果をフィルタします。
2番目のisInDateRangeは、通貨換算リストに従ってフィルタします。
-
isInDateRange
。 検索仕様の名前。 -
ConvListStartDate
。 この日付以降に開始する通貨換算リストのみが含まれるように、結果をフィルタします。 -
ConvListEndDate
。 この日付以前に終了する通貨換算リストのみが含まれるように結果をフィルタします。 -
priceAsOf
。 特定の日付に品目の価格を設定するためにPricingで変換リストが使用されたレコードのみが含まれるように、結果をフィルタします。
3番目のisInDateRangeは、通貨換算の詳細に従ってフィルタします。
-
isInDateRange
。 検索仕様の名前。 -
ConvDetailStartDate
。 この日付以降に開始する通貨換算詳細のみが含まれるように、結果をフィルタします。 -
ConvDetailEndDate
。 この日付以前に終了する通貨換算詳細のみが含まれるように結果をフィルタします。 -
pricingDate
。 特定の日付に品目の価格を設定するためにPricingで変換詳細が使用されたレコードのみが含まれるように、結果をフィルタします。
仕様は累積的です。 たとえば、この仕様は、価格設定戦略、通貨換算リストおよび換算詳細に従ってフィルタします。
検索仕様フィルタでaおよびbの価格設定戦略、通貨換算リストcおよびdおよび換算詳細eのみが返されるとします。 レコード1、2および3に価格設定戦略aおよびbが含まれ、レコード7および8に通貨換算リストcおよびdが含まれ、レコード9に換算詳細eが含まれている場合、検索結果にはレコード1、2、3、7、8および9が含まれます。
-
-
ソート・キー
例
説明
この例の値はありません。
1つ以上の列に従って、データ・セットのレコードを昇順または降順にソートします。
たとえば、価格設定戦略の価格に従って問合せ結果を順序付ける際に優先順位を使用するには、順序基準を優先順位に設定します。
ソート基準はパフォーマンスに影響します。 本当に必要でない限り、使用しないでください。
詳細は、このトピックの「データ・セット」の項を参照してください。
-
単一行
例
説明
この例では無効です。
ビュー・オブジェクトが1行のみを返すことができるかどうかを確認します。 たとえば、価格表に含まれる価格表IDは1つのみです。 価格表IDに従って問合せを実行する場合は、単一行を有効にします。
このオプションを有効にすると、可能なすべてのレコードを検索するのではなく、1つのレコードを受信した直後にアルゴリズムが処理時間が短縮されます。
-
バインド変数。
例
説明
バインド変数名。 たとえば、fromCurrencyCodeです。
ビュー・オブジェクトに追加するバインド変数の名前。
バインド変数値 たとえば、fromCurrencyです。
固定値、Groovy式または引数名を使用します。 この例では、fromCurrencyがこの関数の引数の名前です。
階層ビュー・オブジェクトの参照を追加する場合は、「階層問合せ」タブをクリックして、プロパティを設定できます。
プロパティ |
説明 |
---|---|
接続者 |
接続方法を指定します。 |
問合せ結果別名 |
別名を指定します。 |