使用Salesforce-to-Salesforce自动接受帐户和相关联系人

时间:2012-07-25 06:23:23

标签: salesforce

我需要通过S2S从Org A到Org B共享的联系人自动显示在Org B的正确(以前共享)帐户下。

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

我确信我之前已经这样做了,但最后几次我做这件事的可能是定制的主要细节记录。

有人可以澄清这是否真的可行,或者S2S是否仅支持这种真正的自定义主 - 细节关系?

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

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

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

如果是代码疏忽(我非常怀疑),这是我用来共享联系人的代码。它松散地基于“Salesforce to 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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

更新:问题已解决。

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

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

并且作为友情提醒:子对象上的多个查找关系将阻止在子对象上发生自动接受。这是在文档中,但在诊断期间没有发生。