我正在编写一个API,将非技术用户执行的操作转换为Salesforce.com SOQL 'SELECT'
,'UPSERT'
和'DELETE'
语句。是否有任何资源,库等可以验证生成的SOQL的语法?我是我公司唯一一个有SOQL经验的人,因此我很乐意将其置于一系列自动化测试中,以便其他开发人员增强(或修复)SOQL生成算法,知道它是否仍能正常运行。 / p>
我知道这里的一个解决方案就是进行这些集成测试。但是,我宁愿避免这种情况有三个原因:
答案 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中我现在只有一个想法可能不起作用),但我可以想到两个可能有帮助的建议:
通过运行查询来验证查询,但使用自定义Web服务批量执行查询。即在Apex中编写一个Web服务,一次最多可以接受100个查询字符串,让它运行并返回结果。这将大大减少API调用的数量,但如果您期望在UI中进行试错法类型设置,它当然不会起作用。
使用元数据API提取有关所有对象及其字段的信息,并使用这些信息验证至少查询中的字段是否正确。验证其他查询语法应该相对简单,虽然条件可能会有点棘手。
答案 3 :(得分:0)
您可以使用利用SOAP API的salesforce develop nuget包