2012-07-25 58 views
2

我需要通过S2S从组织A分享到组织B的联系人,以便在正确(先前共享)的帐户下自动显示在组织B中。使用Salesforce-to-Salesforce自动接受帐户和相关联系人

我的目标是发布组织A中的帐户A1及其相关联系人,并将它们全部自动显示在组织B中(无需手动干预),并保留相同的帐户/联系人关系。

我确信我之前做过这件事,但最后几次我做到这一点的可能性是自定义主细节记录。

有人可以澄清,如果这实际上是可能的,或S2S只支持这个真正的自定义主从关系?

到目前为止,我已经尝试了手动共享(“转发到连接” - 有和没有“转发相关记录”复选框)和自动(通过更新后和/或插入触发后的帐户和/或联系人中的PartnerNetworkConnection)分享。我也尝试了联系,然后帐户,然后帐户然后联系。我也尝试检查并取消选中联系人的“自动接受”,甚至取消选中它,在天真的希望,将导致

如果我使用触发器来自动发送联系人并填充ParentRecordId在PartnerNetworkRecordConnection记录上,联系人被共享但不被自动接受,我必须手动将其映射到帐户。如果我在未指定ParentRecordId的情况下共享它,它会自动接受,但没有任何帐户。从“帐户”中的“转发相关记录”复选框的“转发连接”似乎也执行相同的操作 - 帐户和所有子联系人都会转发,但联系人记录不会被自动接受。

我确定Salesforce-to-Salesforce处理了这个问题,但我找不到任何关于它的更多信息。任何人都有一个配方,用于自动共享和自动接受与相关联系人的帐户?

如果是代码监督(我非常怀疑它),这里是我用来共享联系人的代码。它是松散的基础上的代码示例 “Salesforce的到Salesforce最佳实践”(http://wiki.developerforce.com/page/Best_Practices_for_Salesforce_to_Salesforce)

public static void share(List<Contact> triggerNew) { 
    // Define connection id 
    Id networkId = ConnectionHelper.getConnectionId('Some Partner Connection'); 

    Set<Id> localContactAccountSet = new Set<Id>(); 
    List<Contact> localContactSet = new List<Contact>(); 
    Set<Id> sharedAccountSet = new Set<Id>(); 

    // only share records created in this org, do not add contacts received from another org. 
    for (Contact ct : triggerNew) { 
     if (ct.ConnectionReceivedId == null) { 
      localContactAccountSet.add(ct.AccountId); 
      localContactSet.add(ct); 
     }  
    } 

    if (localContactAccountSet.size() > 0) { 
     List<PartnerNetworkRecordConnection> newConns = new List<PartnerNetworkRecordConnection>(); 

     // Get the contact account's partner network record connections 
     for (PartnerNetworkRecordConnection accountSharingRecord : [SELECT p.Status, p.LocalRecordId, p.ConnectionId FROM PartnerNetworkRecordConnection p WHERE p.LocalRecordId IN :localContactAccountSet]) { 
      // for each partner connection record for contact's account, check if it is active 
      if ((accountSharingRecord.status.equalsignorecase('Sent') || accountSharingRecord.status.equalsignorecase('Received')) && (accountSharingRecord.ConnectionId == networkId)) { 
       sharedAccountSet.add(accountSharingRecord.LocalRecordId); 
      } 
     } 

     if (sharedAccountSet.size() > 0) { 
      for (Contact ct : localContactSet) { 
       if (sharedAccountSet.contains(ct.AccountId)) { 
        PartnerNetworkRecordConnection newConnection = 
         new PartnerNetworkRecordConnection(
          ConnectionId = networkId, 
          LocalRecordId = ct.Id, 
          SendClosedTasks = false, 
          SendOpenTasks = false, 
          SendEmails = false, 
          ParentRecordId = ct.AccountId); 

        newConns.add(newConnection); 
       } 
      } 

      if (newConns.size() > 0) { 
       database.insert(newConns); 
      } 
     } 
    } 
} 
+0

我跟着官方(http://wiki.developerforce.com/page/An_Introduction_to_Salesforce_to_Salesforce)文档,它对我来说工作得很好。我已发布帐户和联系人,然后订阅这些对象,选中“自动映射字段”选项。你确定你没有查询ID吗? – 2012-07-25 13:47:01

回答

2

UPDATE:问题解决。

原来,联系人有一个长期未使用和遗忘的自定义查找(帐户)字段。删除此字段可解决问题并导致帐户和联系人被自动接受。

感谢Salesforce对此的非常迅速的响应,这有助于我解决问题。

作为一个友好的提示:对子对象的多重查找关系将防止自动接受发生在子对象上。这是在文档中,但在诊断过程中未能发生。

相关问题