2012-07-31 67 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);