如何基于关联关系将IndexationEntry的percentage值同步到Contract对象
实现方案
以下是针对该Salesforce对象数据同步需求的两种可落地方案,你可以根据自身业务复杂度和技术栈选择:
方案1:声明式自动化(无需代码,优先推荐)
该方案不用写代码,配置即可完成,适合大部分常规业务场景:
- 前置准备:给
Contract对象新建一个百分比类型的自定义字段,比如API名为Indexation_Percentage__c,设置为只读用于存储同步值。同时给IndexationEntry对象添加联合唯一校验规则,校验条件为Indexationtype__c + Year__c全局唯一,避免同一个指数类型下出现多个同年份的条目导致匹配冲突。 - 配置Contract触发的流:
- 新建记录触发流,触发对象选择
Contract,触发时机为创建或编辑时,运行前置条件设置为Indexationtype__c != null && Year__c != null - 新增「获取记录」节点,查询对象选
IndexationEntry,筛选条件设置为Indexationtype__c = {!$Record.Indexationtype__c} 且 Year__c = {!$Record.Year__c},设置仅返回单条记录 - 新增「更新记录」节点,更新当前触发的Contract记录,将
Indexation_Percentage__c赋值为上一步查询到的IndexationEntry.Percentage__c,空值场景下可设置赋值为null
- 新建记录触发流,触发对象选择
- 配置IndexationEntry修改的反向同步流:
- 新建记录触发流,触发对象选择
IndexationEntry,触发时机为创建、编辑、删除、恢复删除时 - 新增「获取记录」节点,查询所有满足
Indexationtype__c = {!$Record.Indexationtype__c} 且 Year__c = {!$Record.Year__c}的Contract记录 - 新增「更新记录」节点,批量更新所有查询到的Contract的
Indexation_Percentage__c字段:编辑/创建/恢复场景赋值为最新的百分比值,删除场景赋值为null
- 新建记录触发流,触发对象选择
方案2:Apex触发器实现(适合复杂/大数据量场景)
如果你的数据量极大,或者后续还要叠加其他关联业务逻辑,可以用代码实现:
- 给
Contract对象写触发器,触发时机为after insert, after update,触发器逻辑中批量查询关联的符合年份匹配规则的IndexationEntry记录,再批量更新对应Contract的百分比字段 - 给
IndexationEntry对象写触发器,触发时机为after insert, after update, after delete, after undelete,触发器逻辑中批量查询所有符合匹配规则的Contract,再批量更新对应百分比字段
注意触发器必须遵循bulkify规则,禁止在循环中执行SOQL/DML操作,避免触发 governor limit 报错
上线前注意事项
- 存量数据初始化:如果系统已经有历史数据,你可以通过数据导入导出工具,或者执行一次匿名Apex批量作业,先把存量Contract的百分比字段补全
- 权限校验:确认自动化的运行上下文(流的运行用户/触发器的配置权限)有两个对象对应字段的读写权限
- 边界场景测试:测试Contract未关联Indexationtype、Year为空、无对应年份IndexationEntry的场景,做好空值兼容处理
内容的提问来源于stack exchange,提问作者meenakshi meenu
相关产品推荐
相关产品推荐

