我正在爲高流量應用程序進行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子句的長度有限制。通過一些研究,我看其實有幾個限制:
我認爲接下來的事情在做查詢,找到所有在Salesforce滿足其他過濾條件的ID的不檢查ID本身。然後,我們可以將這個ID列表刪除,並刪除我們已經在我們的末尾追蹤到的那個,以找到一個更小的IN條件,我們可以設置它來查找我們實際需要的記錄上的所有數據。
雖然這仍然不是很可靠。我看到一個查詢只能返回2000行,只有2000的偏移量。如果我們已經導入了2000條記錄,第一條查詢可能沒有我們想要導入的任何必要的行,但是我們無法抵消它以得到相關的行因爲這些限制。
有了這些限制,我無法找到一種可靠的方式來查找相關記錄,以導入我們已經導入的記錄數增長的相關記錄。我覺得這是Salesforce集成的常見用法,但我無法找到任何相關信息。我們如何做到這一點,而不必擔心我們達到高產量時的問題?
對查詢沒有2000限制,將返回前2000行,但您可以通過獲取nextRecordsUrl字段值來訪問其餘行[ – superfell
]謝謝!我不知道有一種內置的方式來獲得查詢結果的其餘部分!這肯定會允許我上面解釋的計劃工作。 – mikewoj