有没有办法验证Salesforce.com的SOQL查询的语法而不执行它?

时间:2012-01-29 21:28:44

标签: automated-tests salesforce soql

我正在编写一个API,将非技术用户执行的操作转换为Salesforce.com SOQL 'SELECT''UPSERT''DELETE'语句。是否有任何资源,库等可以验证生成的SOQL的语法?我是我公司唯一一个有SOQL经验的人,因此我很乐意将其置于一系列自动化测试中,以便其他开发人员增强(或修复)SOQL生成算法,知道它是否仍能正常运行。 / p>

我知道这里的一个解决方案就是进行这些集成测试。但是,我宁愿避免这种情况有三个原因:

  1. 我需要维护另一个Salesforce.com帐户仅用于测试,因此我们不会检查我们的API请求上限。
  2. 每当Salesforce.com出现连接问题时,我们最终都会追逐误报。
  3. 那些没有经验的其他开发人员可能需要弄清楚如何在DML操作测试失败后清理测试Salesforce.com实例(这实际上意味着需要每次清理实例发生这种情况)。

4 个答案:

答案 0 :(得分:2)

您可以使用SoqlBuilder library解决问题。它为您生成SOQL,并且能够生成易于手动创建的SOQL语句。语法很直接,我已经广泛使用它,只有很少的问题。

答案 1 :(得分:2)

我找到了另一种方法。

Salesforce.com在Backus-Noir Form(BNF)中发布了他们的SOQL表示法: http://www.salesforce.com/us/developer/docs/api90/Content/sforce_api_calls_soql_bnf_notation.htm

这意味着您可以使用支持BNF的语言识别工具来解析SOQL。最常见的工具之一ANTLR,这是免费的。在ANTLR示例之后,将SOQL语法传递到其语法编译器中,以获得所需语言(C#,Java,Python等)的Lexer和Parser。然后,您可以将要验证的实际SOQL语句传递给Lexer,然后将Lexer令牌传递给您的Parser,以拆分SOQL语句。如果您的Lexer或Parser失败,则您的SOQL无效。

答案 2 :(得分:1)

我无法想到从Salesforce外部这样做的方法(甚至在Apex中我现在只有一个想法可能不起作用),但我可以想到两个可能有帮助的建议:

  1. 通过运行查询来验证查询,但使用自定义Web服务批量执行查询。即在Apex中编写一个Web服务,一次最多可以接受100个查询字符串,让它运行并返回结果。这将大大减少API调用的数量,但如果您期望在UI中进行试错法类型设置,它当然不会起作用。

  2. 使用元数据API提取有关所有对象及其字段的信息,并使用这些信息验证至少查询中的字段是否正确。验证其他查询语法应该相对简单,虽然条件可能会有点棘手。

答案 3 :(得分:0)

您可以使用利用SOAP API的salesforce develop nuget包