2012-01-29 38 views
4

我正在編寫一個API,將非技術用戶執行的操作轉換爲Salesforce.com SOQL 'SELECT''UPSERT''DELETE'語句。有沒有可以驗證生成的SOQL的語法的資源,庫等?我是我公司中唯一擁有SOQL經驗的人,所以我很樂意將其放入一系列自動化測試中,以便其他開發人員增強(或修復)SOQL生成算法,以瞭解它是否仍能正常運行。有沒有辦法驗證Salesforce.com的SOQL查詢的語法而不執行它?

我知道一個解決方案就是做這些集成測試。但是,我寧願避免這種情況,原因有三:

  1. 我需要維護另一個Salesforce.com帳戶才能進行測試,因此我們不會檢查我們的API請求上限。
  2. 無論什麼時候Salesforce.com存在連接問題,我們最終都會追查誤報。
  3. 那些沒有經驗的其他開發人員可能需要弄清楚如何在DML操作測試失敗後清理測試Salesforce.com實例(這實際上意味着我會需要在發生這種情況時清理實例)。

回答

2

你可以通過使用SoqlBuilder library來解決你的問題。它爲您生成SOQL,並且能夠生成SOQL語句,而這些語句很容易出錯,無法手動創建。語法很簡單,我已經在很少的問題中廣泛使用它。

+0

不幸的是,我沒有使用Apex(*首先在C#*上抖動),所以我不能使用這個解決方案,但我認爲這是我的問題的正確答案。事實上,這個庫不會使用驗證SOQL的工具,而只會讓您構建有效的SOQL。雖然在更新庫以瞭解它們之前,您不能使用新的SOQL過程,但在嚴格的脫機驗證程序中也會存在此限制。 – Technetium 2012-02-16 17:54:49

1

我想不出從Salesforce以外的方式來做到這一點(甚至在Apex中,我現在只有一個想法可能無法正常工作),但我可以考慮兩個可能的建議有幫助:

  1. 通過運行驗證查詢,但使用自定義Web服務批量執行它們。即在Apex中編寫Web服務,最多可以接受100個查詢字符串,讓它運行並返回結果。這將大大減少API調用的數量,但如果您期待UI中的試用錯誤類型設置,它當然不起作用。

  2. 使用元數據API來下拉有關所有對象及其字段的信息,並使用它們來驗證查詢中的字段是否正確。驗證其他查詢語法應該相對簡單,但條件可能會有點棘手。

+0

無論哪種方式,我們都在談論集成測試,不幸的。你的第一個建議絕對解決了我的首要問題。至於第二個建議,我不太關心列名的有效性,因爲列在各個賬戶之間會有所不同 - 這是重要的語法。 – Technetium 2012-01-30 18:51:08

+0

是的,我認爲唯一的出路將是編寫你自己的解析器和驗證器(或者看看別人是否做到了這一點)。 – 2012-01-30 23:42:01

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無效。

0

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

相關問題