2

組織 A から組織 B に S2S 経由で共有された連絡先が、正しい (以前に共有されていた) アカウントの下で組織 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);
            }
        }
    }
}
4

1 に答える 1

2

更新: 問題は解決しました。

Contact には、長い間使用されておらず、忘れられていたカスタム Lookup(Account) フィールドがあることが判明しました。このフィールドを削除すると問題が修正され、アカウントと連絡先の両方が自動的に受け入れられるようになりました。

問題を解決するのに役立つ非常に迅速な対応をしてくれた Salesforce に感謝します。

念のために言っておきますが、子オブジェクトに複数の参照関係があると、子オブジェクトで自動承認が行われなくなります。これはドキュメントに記載されていますが、診断中に発生しませんでした。

于 2012-07-26T02:44:00.260 に答える