2012-07-12 25 views
5

自從我必須進行S2S集成以來,它已經發布了幾個版本,但是我遇到了一個意想不到的問題,希望有人能夠更有效地解決問題。Salesforce-to-salesforce往返現場更新問題

我有兩個組織,通過S2S共享聯繫人。

每個組織中的聯繫人具有相同的模式,它是標準字段和自定義字段。我已經再現的基本情況,只有兩個自定義字段:複選框字段A,和Number(18,0)字段B.

組織1發佈字段A,和預訂字段B.

組織2訂閱到域A,併發布域B.

組織1通過在S2S上共享聯繫人到組織2來啓動所有S2S工作流程。組織2已自動接受。

組織2具有Contact Before Insert觸發器,該觸發器簡單地使用字段A來計算字段B的值。如果選中字段A,則填充字段B,如果未選中,填充字段2,0.(這當然是對我真正需要做的事情的極度過度簡化,但它是基本可再現的情況。)

所有工作組織2中的罰款 - 聯繫人遇到罰款領域A,並且我看到字段結果計算到字段B中。

問題是結果 - 字段B - 不會自動共享回組織1,直到下一次聯繫更新。它可以像我一樣簡單,編輯同一聯繫人上的非共享字段,例如組織2中的「說明」,然後我立即看到先前計算出的字段B的值被推回到組織1中。

我假設這是因爲,由於字段B的計算是在Before Insert之前發生的,所以S2S連接假定當前更新事務僅由其自身執行(我可以看到這種邏輯對於防止無限的S2S更新有意義循環)。

我第一次嘗試創建工作流程字段更新,強制更新字段B更改後的(新,虛擬)共享字段,但仍不會導致更新迴流,大概是因爲它在同一個執行上下文中Salesforce認爲免除再分享。還嘗試了一個工作流規則,當字段更改時將Lead轉發回連接隊列,並且它也不起作用。

然後,我在AfterUpdate觸發器中嘗試了重新更新語句 - 如果共享字段已更新,請重新加載並重新更新共享對象。這也沒有奏效。

我找到了一個解決方案,這是一個由AfterUpdate觸發器調用的Future方法,該方法重新加載並觸摸其BeforeWindow觸發器更改了其共享字段的任何記錄。這確實會導致實地結果在原始組織中幾乎實時顯示。

此解決方案適用於我現在,但我覺得我必須失去一些東西。它會導致更多的未來調用和DML被執行。

有沒有人有更優雅的解決方案呢?

+3

我會堅持'@ future'。如果我將自己置身於開發人員的這一特徵之中,他們可能不會檢查組織2中發佈的更新以瞭解有關創建無限循環的更新。如果他們不處理這種情況,那麼沒有循環的可能性,更容易的開發和下一個功能。我喜歡「@未來」,因爲它不會利用副作用而完全符合您的需求(在未來的版本中會有一個壞消息,而不會通知) – 2012-07-14 20:16:04

回答

0

我認爲沒有更好的解決方法,那麼你在做什麼。未來標註的限制增加到相當高的水平,這不應該成爲您的擔憂。

可能是你所能做的就是(不知道這是否會工作,因爲我們仍然在同樣的情況下)另一件事 - 組織1 - 場被更新,出版合同

組織2 - 更新之前組織2中的合同;如果A已更新 - 在新自定義對象中保存合同的ID。 在更新新的自定義對象之後,更新給定合同ID的字段B. B上的更新將發佈