如何使用Amazon Appflow实现两个Salesforce ORG双向数据同步
你提出的为所有同步对象配置External ID作为跨Org关联锚点的思路是正确的,这是保障关联记录不丢失的核心基础,落地双向同步可按以下实操方案配置,避开Appflow和Salesforce适配的常见坑:
前置基础配置
- 双向同步涉及的两个Salesforce Org,给所有需要同步的对象统一创建命名一致的External ID字段,推荐字段名设为
Appflow_Cross_Org_ID__c,字段类型选文本(长度255),开启唯一索引、大小写不敏感,勾选External ID属性、设置为非必填(首次写入时赋值)。不要直接用Salesforce原生18位记录ID做跨Org映射,两个Org的原生ID完全独立不互通。 - 给所有同步对象新增同步来源标识字段
Appflow_Sync_Source__c,选项值配置为两个Org的唯一标识(比如Org_A/Org_B),这个字段是阻断循环同步的核心。 - 给Appflow对应的Salesforce连接账号开足权限:开启API访问权限,给所有同步对象、字段开读写权限,字段级安全配置放开所有要同步的字段(包含新建的两个自定义字段、所有关系字段),不要漏了子对象、关联对象的读权限。
双向同步流搭建规则
- 禁止直接创建两个独立的全量/增量流无差别对跑,会触发无限循环同步,快速耗光两个Org的API额度。每个流的增量过滤规则必须加条件:仅同步
Appflow_Sync_Source__c不等于当前流目标Org标识的记录,Appflow写入目标记录时自动把Appflow_Sync_Source__c赋值为源Org标识,从规则上阻断回写触发的二次同步。 - 同步触发模式选定时增量同步,同步频率根据业务实时性要求设5分钟-1小时即可,不要选实时事件触发模式——实时触发对关联记录的写入顺序兼容性极差,很容易出现子表记录同步时主表关联记录还未写入目标Org的匹配失败报错。
- 流的调度顺序严格按对象依赖层级排布:先同步无依赖的顶层主对象(比如User、Account、Product),再同步单层关联对象(比如Contact、Opportunity),最后同步多层依赖的子对象(比如OpportunityLineItem、CaseComment、自定义子对象),不同层级的流错开1-2分钟调度,保证关联记录优先写入目标Org。
关联关系同步配置细节
- 配置字段映射时,所有Lookup、Master-Detail类型的关系字段,不要直接映射源端的原生记录ID,要通过External ID做匹配写入:比如映射Contact的Account关联字段时,匹配规则选择「按目标Org Account对象的
Appflow_Cross_Org_ID__c,匹配源端关联Account记录的Appflow_Cross_Org_ID__c值」完成关联,Appflow原生支持该匹配逻辑,不需要额外写自定义代码。 - 统一Cross ID生成规则:新记录首次同步时,直接用「源Org标识+源端记录原生18位ID」拼接生成
Appflow_Cross_Org_ID__c值(比如OrgA_003000000001234),第一次写入目标Org时直接把该值写入目标端同名字段,保证同一条业务记录在两个Org的Cross ID完全一致。 - 若需要同步删除操作,不要直接依赖Appflow读取Salesforce回收站记录,在两个Org的所有同步对象上加
Is_Cross_Sync_Deleted__c勾选字段,源端删除记录前先通过触发器/流程勾选该字段,目标Org收到该字段更新后再执行本地删除,避免权限问题导致删漏。
异常兜底配置
- 每个Appflow流都开启死信队列配置,同步失败的记录(比如关联匹配失败、字段值不符合校验规则、权限不足)统一存入指定S3路径,配置每日定时任务重试失败记录,重试3次仍失败的推送告警给管理员手动处理。
- 首次上线前先按对象依赖顺序跑一次全量同步,全量完成后抽样校验10%以上记录的字段值、关联关系、Cross ID匹配度,校验无问题后再开启增量双向同步。
内容的提问来源于stack exchange,提问作者Yashas G C
相关产品推荐
相关产品推荐

