マトリックス使用時のアルゴリズムの変更
価格設定マトリックスの結果列を変更するか、価格設定マトリックスで拡張可能フレックスフィールドを使用する場合、アルゴリズム・ステップを変更する必要があります。
拡張可能フレックスフィールドを割引調整に追加するとします。 次に、必要な設定を示します。
-
「タスク」>「アルゴリズムの管理」をクリックします。
-
「アルゴリズムの管理」ページで、編集する必要があるアルゴリズムを検索して開きます。
このマトリクス・タイプを使用する場合
次に、このアルゴリズム・ステップを変更
この価格設定アルゴリズム内
価格設定セグメント
Derive Pricing Segment
Get Sales Pricing Strategy
販売価格設定戦略割当
Get Header Strategy
Get Sales Pricing Strategy
価格表手数料修正
割引調整
価格設定条件調整
Evaluate Pricing Matrices
Apply Matrices
ライン戦略
Get Pricing Strategy
Get Line Pricing Strategy
価格設定手数料ガイドライン
Evaluate Pricing Matrices
Apply Matrix Rules for Guidelines
価格設定では、事前定義されたステップが実行時に実行され、価格設定マトリックスが処理されます。
この例では、
Apply Matrices
を検索して、編集のために開きます。 -
「アルゴリズムの編集」ページで、名前列に
Evaluate Pricing Matrices
が含まれる「ステップ」をクリックします。 -
ステップの詳細領域で、名前列にマトリックスを含む「ステップ」をクリックし、変数パス列のコードを確認します。
finest {'DynamicMatrixId: '+MatrixQ.DynamicMatrixId}; dynamicMatrix(MatrixQ.DynamicMatrixId, Line.PricingDate, ServiceParam.CacheEnabledFlag != null ? ServiceParam.CacheEnabledFlag : true)
マトリックス・データ・セットへのパスの書式を次に示します。
dynamicMatrix(MatrixId, effectivityDate, enableCache)
説明
パラメータ
説明
MatrixId
評価する価格設定マトリックスを識別します。
effectivityDate
価格設定マトリックスの開始日および終了日と比較する日付。
enableCache
Contains.
-
True. マトリックス・ルールをキャッシュします。
-
False. Don't cache.
ほとんどのステップには、次のような他の事前定義済データ・セットが付属しています。
-
手数料
-
明細
-
ヘッダー
-
LineAttribute
-
ItemExtensibleAttribute
-
ServiceParam
メンテナンスを減らすには、事前定義されたデータセットを使用します。 事前定義されたデータ・セットがニーズを満たしていない場合は、新しいデータ・セットを追加します。
条件列で品目拡張可能属性または拡張可能フレックスフィールドを使用する場合は、データ・セットを追加する必要があります。 たとえば、オーダー・ヘッダーに追加する拡張可能フレックスフィールドをサポートするために使用できるデータ・セットを次に示します。
名前
変数パス
カーディナリティ
データ・セット結合
PricingHdrEFF_Custom
PriceRequest.Name
説明
-
名前はデータ・セット名と同じです。
この例では。
PriceRequest.PricingHdrEFF_Custom
0または1つ
[HeaderIdCustom:{Header.HeaderId}]
-
-
ステップの詳細領域で、下にスクロールして「最初の行のアクション」セクションを見つけ、コードを確認します。
-
このアルゴリズムは、問合せが返す最初のレコードに対してこのコードを実行します。
-
価格設定では、価格設定ガイドラインを除き、価格設定マトリックス・タイプごとにこのコードが実行されます。 価格設定ガイドラインに対して各行処理が実行されます。
-
設定、メンテナンスおよびトラブルシューティングの際は、これらの点に注意してください。
-
最初の行アクションの完全なコードを次に示します。 状況によっては変更する必要があります。 詳細は、「価格設定アルゴリズムの管理」を参照してください。
finest('Processing Matrix RuleId: '+Matrix.DynamicMatrixRuleId)
MatrixQ.AdjustmentBasisId = Matrix.AdjustmentBasisId
MatrixQ.AdjustmentValue = Matrix.AdjustmentAmount
MatrixQ.AdjustmentTypeCode = Matrix.AdjustmentTypeCode
MatrixQ.DynamicMatrixRuleId = Matrix.DynamicMatrixRuleId
MatrixQ.ConditionString = Matrix.MatchConditions.join(' ')
MatrixQ.ResultString = Matrix.MatchResults.join(' ')
/*if ( Matrix.AdjustmentTypeCode?.contains('PERCENT') )
Basis = (BasisComp.locate([PriceElementCode:Matrix.AdjustmentBasis]))?.UnitPrice?.Value
finest('Basis Value: ' + Basis)
MatrixQ.AdjustmentValue = pricingUtil.computeUnitAdjustment(Matrix.AdjustmentTypeCode, Basis, Matrix.AdjustmentAmount, Charge.RunningUnitPrice?:0)
MatrixQ.DynamicMatrixRuleId = Matrix.DynamicMatrixRuleId
// 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
finer('\tConverted currency, 1 '+MatrixQ.FromCurrencyCode+' = '+ConvRate.ConversionRate?:1+' '+Charge.CurrencyCode)
}
}
// end currency conversion
*/