如何轮询Salesforce API以查找符合条件且之前未被我的应用程序看到的记录?

时间:2017-08-17 20:22:10

标签: salesforce soql

我正在为高流量应用开发Salesforce集成,我们希望能够自动化将记录从Salesforce导入到我们的应用程序。要明确我不是在Salesforce方面(即Apex)工作,而是在另一个应用程序中使用Salesforce Rest API。

第一个想法是使用创建记录时的截止时间,我们会根据申请人在上次民意调查中的创建时间来增加每次轮询的时间。很快意识到这对此无效。查询中可能还有其他过滤器,可能包括Salesforce中的状态字段,例如,只有在设置了某个状态后才能导入记录。这会使检查创建时间或类似的东西变得不可靠,因为较旧的记录以后可能与我们的自动导入相关。

我的下一个想法是每隔几个小时轮询Salesforce API以查找记录。为了避免两次导入相同的记录,我能想到的唯一方法是跟踪我们已经尝试导入的ID并使用这些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列表并删除我们已经跟踪的ID列表,找到一个较小的IN条件,我们可以设置它来查找我们实际需要的记录上的所有数据。

但这似乎仍然不完全可靠。我看到一个查询只能返回2000行,并且只有一个偏移量高达2000.如果我们已经导入了2000条记录,那么第一个查询可能没有我们想要导入的任何必要行,但是我们无法将其偏移以获得由于这些限制,相关的行。

由于这些限制,我无法找到一种可靠的方法来查找要导入的相关记录,因为我们已经导入的记录数量增加了。我觉得这将是Salesforce集成的常见用法,但我找不到任何相关内容。如果我们达到高音量而不必担心问题,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

不确定您的所有要求是什么,或者解决方案是否需要通用,但您可以做一些事情。

  1. 标记已导入的记录,但这意味着要回拨给salesforce以更新记录,但这可以批量化以减少调用次数并修改查询以排除标记
  2. 反转您推送数据而非拉取数据的方式,因此只要记录符合工作流程和出站邮件的条件,salesforce就会将符合条件的记录推送到应用程序
  3. 使用流式API设置您可以订阅的推送主题,以便在记录符合条件时收到通知