4

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

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

  1. 我需要维护另一个 Salesforce.com 帐户只是为了进行测试,这样我们就不会超过我们的 API 请求上限。
  2. 每当 Salesforce.com 出现连接问题时,我们都会追查误报。
  3. 那些没有经验的其他开发人员可能需要弄清楚如何在 DML 操作测试失败后清理测试 Salesforce.com 实例(这实际上意味着每当发生这种情况时我都需要清理实例)。
4

4 回答 4

2

您可以通过使用SoqlBuilder 库来解决您的问题。它为您生成 SOQL,并且能够生成手动创建很容易出错的 SOQL 语句。语法很简单,我已经广泛使用它,几乎没有问题。

于 2012-02-08T11:48:38.800 回答
2

我找到了另一种方法来做到这一点。

Salesforce.com 在此处以Backus-Noir 形式(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 无效。

于 2012-09-05T22:03:23.860 回答
1

我想不出一种从 Salesforce 外部执行此操作的方法(即使在 Apex 中,我现在也只有一个可能行不通的想法),但我可以想到两个可能有帮助的建议:

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

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

于 2012-01-29T22:28:37.397 回答
0

您可以利用 salesforce 开发利用 SOAP API 的 nuget 包

于 2016-10-25T15:24:57.407 回答