2012-07-25 71 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對此的非常迅速的響應,這有助於我解決問題。

作爲一個友好的提示:對子對象的多重查找關係將防止自動接受發生在子對象上。這是在文檔中,但在診斷過程中未能發生。