在多币种组织中显示基于交易币种的促销 (Beta)
完成此可选设置,以根据交易的币种显示促销。默认情况下,当您在贵组织中使用多币种时,“浏览目录”窗口会根据与交易关联的客户的币种显示促销。
所需的 Edition
| 适用于:Lightning Experience |
| 适用于:具有 Revenue Cloud Advanced 许可证的 Revenue Cloud Enterprise、Unlimited 和 Developer Edition,以及全局促销管理基本加载项许可证或会员管理 - Growth 或 Starter 许可证。 |
| 所需用户权限 | |
|---|---|
| 自定义上下文定义: | 上下文服务管理员 |
| 自定义流: | 管理流 |
重要
仅当您未设置基于渠道的促销时,您才能显示基于交易币种的促销。
配置产品发现上下文定义
更改定义,以根据交易币种显示促销。
-
编辑扩展产品发现上下文定义。
- 从“设置”中,查找并选择上下文定义。
- 单击自定义定义。
-
单击扩展产品发现上下文定义。
如果您正在使用预构建的上下文定义,请扩展 ProductDiscoveryContext 上下文定义。
- 单击“编辑”。
- 在“编辑上下文定义”页面上,单击下一步。
-
在“编辑结构”页面上,单击 Promotion__std 旁边的
。
- 对于名称,输入 Transaction__c,然后单击下一步。
- 单击 Transaction__c。
-
单击添加属性并添加币种详细信息。
- 对于名称,输入 ccycode__c。
- 对于类型,选择输入输出
- 对于数据类型,选择 STRING。
-
单击添加属性并添加客户详细信息。
- 对于名称,输入 accountId__c。
- 对于类型,选择输入输出。
- 对于数据类型,选择 STRING。
-
单击添加属性并添加 ID 详细信息。
- 对于名称,输入 id__c。
- 对于类型,选择输入输出。
- 对于数据类型,选择 STRING。
- 单击下一步。
-
在“编辑属性标记”页面上,将属性名称添加为标记名称。
- 在 accountId__c 旁边,单击添加标记。
- 对于标记名称,输入 accountId__c。
- 单击“完成”。
-
重复这些步骤,以添加 ccycode__c 和 id__c 的标记。
使用属性名称作为标记名称。
- 保存更改。
创建自定义促销映射
- 打开地图数据选项卡。
-
在 ProductDiscoveryPromoMapping 旁边,单击
并选择复制。
- 输入名称,并保存更改。
- 删除客户节点和 SalesTransaction 节点之间的映射。
-
映射这些节点和属性。
产品发现上下文 销售交易上下文 Transaction__c SalesTransaction ccycode__c CurrencyIsoCode accountId__c 客户 - 保存更改。
-
在 ProductDiscoveryMapping 旁边,单击
,然后选择编辑输入映射。
- 单击生成节点映射。
- 在“生成节点映射”窗口中,单击保留并生成。
- 保存更改。
- 激活上下文定义。
创建 Apex 类
为流操作创建 Apex 类。
-
单击
,然后选择开发人员控制台。
- 选择 文件 | 新建 | Apex 类 。
- 对于名称,输入 DiscoverProductFlowAction。
-
添加此代码,并保存更改。
public class DiscoverProductFlowAction { // Define input parameters public class FlowInput { @InvocableVariable(required=false) public String objectApiName; @InvocableVariable(required=false) public String recordId; } // Define output parameters public class FlowOutput { @InvocableVariable public runtime_industries_cpq.ContextDataInput[] additionalContextData; } // This method is invoked from a flow @InvocableMethod(label='Process Input' description='Creates the Array of ContextDataInput for additional Context Data') public static List<FlowOutput> generateAdditionalContextData(List<FlowInput> inputs) { String objectApiName; String recordId; String ccyCode; String accountId; Quote quoteObject; Order orderObject; FlowOutput output = new FlowOutput(); // Capture input from the flow for(FlowInput input : inputs ){ objectApiName = input.objectApiName; recordId = input.recordId; } //Write logic to Query Currency from Transaction Entity if(objectApiName == 'Quote') { quoteObject = [SELECT CurrencyIsoCode,AccountId FROM Quote WHERE Id = :recordId LIMIT 1][0]; ccyCode = quoteObject.CurrencyIsoCode; accountId = quoteObject.AccountId; } else if(objectApiName == 'Order') { orderObject = [SELECT CurrencyIsoCode,AccountId FROM Order WHERE Id = :recordId LIMIT 1]; ccyCode = orderObject.CurrencyIsoCode; accountId = orderObject.AccountId; } //Populate the ContextDataInput list to store additional context data List<runtime_industries_cpq.ContextDataInput> listContextData = new List<runtime_industries_cpq.ContextDataInput>(); runtime_industries_cpq.ContextDataInput cd1 = new runtime_industries_cpq.ContextDataInput(); cd1.nodeName = 'Transaction'; //Where Quote is the name of the node in the context definition. cd1.nodeData = new Map<String,Object>(); cd1.nodeData.put('id',recordId); cd1.nodeData.put('ccycode',ccyCode); cd1.nodeData.put('accountId',accountId); listContextData.add(cd1); // Return the additional Context Data to a flow output.additionalContextData = listContextData; return new List<FlowOutput>{output}; } }
本文章是否解决您的问题?
请与我们共享您的想法,以便我们进行改进!


