2012-07-31 68 views
2

我正在使用Adobe AIR並通過REST API與force.com平臺進行集成,到目前爲止它的運行相對平穩,但我在使用DELETE方法時未能取得進展。Salesforce REST API和DELETE方法

The documentation很簡單:

刪除帳戶記錄

使用Delete方法刪除記錄。 在本例中,賬戶記錄被刪除。

實施例的使用用於刪除字段帳戶對象

捲曲https://instancename.salesforce.com/services/data/v20.0/sobjects/Account/001D000000INjVe -H 「授權:承載令牌」 -H 「X-PrettyPrint:1」 -X DELETE

實施例要求刪除帳戶記錄的機構

不需要

示例響應體用於刪除帳戶記錄

無返回

我的代碼是下面,注意,HTTPConnection.send()第二個參數是要調用的方法。

var headers:Object = new Object(); 
headers["Authorization"] = "Bearer "+ConnectionAccessToken; 
var url:String = ConnectionInstanceURL + "/services/data/v"+_apiVersionNumber+"/sobjects/"+type+"/"+id; 

var response:RESTResponse = new RESTResponse(callback); 
var httpCallback:IResponder = new mx.rpc.Responder(response.resultHandler,response.faultHandler); 

HTTPConnection.send(headers,"DELETE",url,httpCallback); 

相似的代碼完全適用於其他操作,而奇怪的是,這並沒有失敗本身,而是接收到成功的響應,但在問題得到記錄回來了它的所有領域。這樣看來,我看到[select * from Object where Id = <id>的結果,而只是爲了澄清記錄是沒有刪除。該對象沒有任何主要的細節關係,所以我不確定還有什麼可以阻止這種刪除發生 - 有沒有人遇到過這種情況,或有如何解決它的建議?

+0

HTTPConnection? donde esta?你是從哪裏得到這門課的?它是否支持「DELETE」作爲HTTP方法? – shaunhusain 2012-07-31 02:15:04

+1

+1,我先打一個TCP嗅探器(我通常會求助於http://ws.apache.org/commons/tcpmon/),然後首先驗證你發送的內容是否合法。您可能實際上並沒有發送您認爲自己的動詞,並且支持您似乎收到對GET的迴應。 – jkraybill 2012-07-31 02:36:08

+0

看起來我可能像往常一樣忽略了明顯。我做了一個危險的假設,即HTTPConnection是Adobe提供的類,它不是,它利用了Adobe的HTTPService類。 看起來我已經做了一些調查: 「或者,您可以將參數傳遞給指定的URL。當您不通過基於服務器的代理服務時,只能使用HTTP GET或POST方法。但是,將useProxy屬性設置爲true並且使用基於服務器的代理服務時,也可以使用HTTP HEAD,OPTIONS,TRACE和DELETE方法。「 – 2012-07-31 03:11:36

回答

2

由於我使用的設置(其中HttpConnection的是使用的HTTPService內部自定義類),Adobe的文檔指出,唯一可用的HTTP方法我用剛剛GET和POST:

「可選,您可以將參數傳遞給指定的URL,當您不通過基於服務器的代理服務時,只能使用HTTP GET或POST方法,但是當您將useProxy屬性設置爲true並且使用基於服務器代理服務,您還可以使用HTTP HEAD,OPTIONS,TRACE和DELETE方法。「

這就是刪除失敗的原因,因爲它必須以GET的形式發送,而不是上面的jkraybill的註釋。經過實驗後,我發現可以使用POST,並將實際方法作爲參數包含在URL中作爲參數:

HTTPConnection.send(headers,"POST",url + "?_HttpMethod=DELETE",httpCallback);