Java 如何在Salesforce中使用带WHERE子句的批量API

Java 如何在Salesforce中使用带WHERE子句的批量API,java,salesforce,soql,Java,Salesforce,Soql,我想使用Salesforce的批量API来运行这种格式的查询 Select Id from Object where field='<value>'. 从字段为“”的对象中选择Id。 我有数千个这样的字段值,希望检索这些对象的Id。另外,Salesforce的批量查询只支持一条SOQL语句作为输入 一种选择是形成如下查询 Select Id,field where field in (<all field values>) 选择Id,字段所在的字段() 但问题是S

我想使用Salesforce的批量API来运行这种格式的查询

Select Id from Object where field='<value>'.
从字段为“”的对象中选择Id。
我有数千个这样的字段值,希望检索这些对象的Id。另外,Salesforce的批量查询只支持一条SOQL语句作为输入

一种选择是形成如下查询

Select Id,field where field in (<all field values>)
选择Id,字段所在的字段()
但问题是SOQL有10000个字符的限制

有什么建议吗


多亏了

您可以将这些数据分解为200个左右的值,然后迭代查询Salesforce,在内存中建立结果集或处理数据子集


不过,您必须检查调控器限制,以获得SOQL查询的最大数量。您应该能够在运行时通过API跟踪您的使用情况,以避免超过最大值。

您似乎正在尝试执行某种搜索查询。如果是这样,您可以考虑使用查询而不是SOQL,只要您正在搜索的字段由SFDC索引

否则,我同意你的观点。您的第二种方法更好,将值列表分为若干批将有助于绕过限制


如果您更详细地描述一下您的用例,这也会有所帮助。通常,即使使用批量api,对一组动态字段和值的查询也不总是产生最佳性能。您最好将数据下载到本地数据库并以这种方式探索数据

问题是您正在达到调速器极限。Saleforce一次只能处理200条来自数据库的记录。因此,为了能够首先处理所有这些记录,您需要将所有记录添加到列表中,例如:

 List<Account> accounts= [SELECT id, name, FROM Account];
此链接可能会有所帮助:

值得用业务逻辑更新这个问题,因为出于性能原因,查询这么多字段值被认为不是一个好主意。分批中断是一个选项。我们已经在数据库中下载了数据,所以我想,这样做会更有效率。
Update accounts;