2017-08-17 41 views
0

我正在爲高流量應用程序進行Salesforce集成,我們希望能夠自動將記錄從Salesforce導入到我們的應用程序。爲了清楚起見,我並非從Salesforce方面(即Apex)開展工作,而是從其他應用程序中使用Salesforce Rest API。我如何輪詢Salesforce API以查找符合條件並且之前未被我的應用程序看到的記錄?

第一個想法是使用創建記錄時的截止時間,根據申請人在上次投票中的創建時間,我們將增加每次投票的時間。很快就意識到這不適用於此。查詢中可能包含其他過濾器,這些過濾器可能包含Salesforce中的狀態字段,例如,記錄只應在設置特定狀態後才導入。這會使檢查創建時間或類似的不可靠,因爲較舊的記錄可能以後與我們的自動導入相關。

我的下一個想法是輪詢Salesforce API來每隔幾個小時查找一次記錄。爲了避免輸入相同的記錄兩次,只有這樣我能想到這樣做是保持我們已經嘗試導入的ID的跟蹤和使用這些做一個NOT IN條件:

SELECT #{columns} FROM #{sobject_name} 
WHERE Id NOT IN #{ids_we_already_imported} AND #{other_filters} 

我的大此時關注的是Salesforce是否對WHERE子句的長度有限制。通過一些研究,我看其實有幾個限制:

https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_soslsoql.htm

我認爲接下來的事情在做查詢,找到所有在Salesforce滿足其他過濾條件的ID的不檢查ID本身。然後,我們可以將這個ID列表刪除,並刪除我們已經在我們的末尾追蹤到的那個,以找到一個更小的IN條件,我們可以設置它來查找我們實際需要的記錄上的所有數據。

雖然這仍然不是很可靠。我看到一個查詢只能返回2000行,只有2000的偏移量。如果我們已經導入了2000條記錄,第一條查詢可能沒有我們想要導入的任何必要的行,但是我們無法抵消它以得到相關的行因爲這些限制。

有了這些限制,我無法找到一種可靠的方式來查找相關記錄,以導入我們已經導入的記錄數增長的相關記錄。我覺得這是Salesforce集成的常見用法,但我無法找到任何相關信息。我們如何做到這一點,而不必擔心我們達到高產量時的問題?

+0

對查詢沒有2000限制,將返回前2000行,但您可以通過獲取nextRecordsUrl字段值來訪問其餘行[ – superfell

+0

]謝謝!我不知道有一種內置的方式來獲得查詢結果的其餘部分!這肯定會允許我上面解釋的計劃工作。 – mikewoj

回答

0

不確定你的所有要求是什麼,或者如果解決方案需要是通用的,但你可以做一些事情。已導入

  1. 標誌的記錄,但是這意味着在打電話回Salesforce來更新記錄,但可以bulkified減少呼叫的數量和修改查詢來排除標誌
  2. 反向您的數據推送方式而非拉取方式,因此只要記錄符合工作流程和出站郵件的標準,salesforce就會推送符合條件的記錄
  3. 使用流API可以設置應用程序推送主題可以訂閱,當記錄符合條件時將得到通知
+0

解決方案2與3不同?有沒有辦法讓Salesforce在我們的終端上調用webhook? – mikewoj

+0

解決方案2將是salesforce中的工作流規則,只要記錄符合指定的條件,它就會向您選擇的端點發送出站消息(認爲SOAP消息)。解決方案3是一個推送主題(思考長輪詢),您的應用程序將訂閱推送主題頻道並監聽更改。通道採用SOQL語句,因此每當記錄更改以符合SOQL中指定的條件時,就會向訂閱客戶端發送一條消息,其中包含詳細信息。選項3主要圍繞大量更改同時存在一些限制。 –

相關問題