自从我不得不进行 S2S 集成以来,已经发布了几个版本,但我遇到了一个意想不到的问题,希望有人能更有效地解决这个问题。
我有两个组织,通过 S2S 共享联系人。
每个组织中的联系人具有相同的架构,即标准字段和自定义字段。我已经复制了一个只有两个自定义字段的基本案例:复选框字段 A 和 Number(18,0) 字段 B。
组织 1 发布字段 A,并订阅字段 B。
组织 2 订阅字段 A,并发布字段 B。
组织 1 通过通过 S2S 与组织 2 共享联系人来启动所有 S2S 工作流程。组织 2 已启用自动接受。
Org 2 有一个 Contact Before Insert 触发器,它只使用字段 A 来计算字段 B 的值。例如,如果选中字段 A,则使用 2 填充字段 B,如果未选中,则填充 0。(这当然是对我真正需要做的,但这是基本的可重复案例。)
这在组织 2 中一切正常 - 联系人在字段 A 中遇到很好,我看到字段结果被计算到字段 B 中。
问题是结果 - 字段 B - 在下一次联系人更新之前不会自动共享回 Org 1。就像我在组织 2 中编辑同一联系人的非共享字段一样简单,例如“描述”,然后我立即看到字段 B 的先前计算值被推回组织 1。
我假设这是因为,由于字段 B 的计算发生在插入前,S2S 连接假定当前更新事务仅由它自己执行(我可以看到这个逻辑如何防止无限 S2S 更新循环)。
我首先尝试创建一个工作流字段更新,当字段 B 更改时强制更新一个(新的,虚拟的)共享字段,但这仍然没有导致更新回流,大概是因为它位于 Salesforce 认为可以免除 re -分享。还尝试了在字段更改时将潜在客户转发回连接队列的工作流规则,但它也不起作用。
然后,我在 AfterUpdate 触发器中尝试了重新更新语句 - 如果共享字段已更新,则重新加载并重新更新共享对象。那也没用。
我确实找到了一个解决方案,它是由 AfterUpdate 触发器调用的 Future 方法,该方法重新加载并触及其共享字段被 BeforeUpdate 触发器更改的任何记录。这确实会导致现场结果在原始组织中近乎实时地显示。
这个解决方案现在对我有用,但我觉得我必须遗漏一些东西。它导致执行的 Future 调用和 DML 超出了必要的范围。
有没有人对此有更优雅的解决方案?