我正在尝试使用Salesforce SDK创建父对象及其子代。据我所知,在一个操作中无法做到这一点,所以我需要先创建父对象,然后逐个创建每个子对象。
我的问题是我不确定如何获取新创建的父对象的id,我需要创建它的子对象。我知道SFRestDelegate
方法request:didLoadResponse:
中返回的响应包含id,但我不确定如何在我的create函数中捕获它。
let api = SFRestAPI.sharedInstance()
var parent = [NSObject : AnyObject]()
parent["Field1__c"] = "Test"
parent["Field2__c"] = "Test"
let createRequest = api.requestForCreateWithObjectType("Parent_Object__c", fields: parent)
api.send(createRequest, delegate: self)
// Need wait for response before continuing...???
// id = ??
for var i = 0; i < 3; ++i {
let child = ["Test_Object__c": id, "Name": "Child1\(i)"]
let createRequest = api.requestForCreateWithObjectType("Parent_Object__c", fields: child)
api.send(createRequest, delegate: self)
}
我认为必须有一种更有效的方法来做到这一点,但如果有的话,我还没有在文档中找到它。
任何帮助将不胜感激!
答案 0 :(得分:0)
您已将委托设置为self
,因此您现在需要做的就是实际提供这意味着的方法(即请求的处理程序)。在此对象内部实现以下四种方法:
func request(request: SFRestRequest?, didLoadResponse jsonResponse: AnyObject) {
var records = jsonResponse.objectForKey("records") as! NSArray
//do stuff with your records
//call createChildRecords method here. You can extract the id from the records object above.
}
func request(request: SFRestRequest?, didFailLoadWithError error:NSError) {
println("In Error: \(error)")
}
func requestDidCancelLoad(request: SFRestRequest) {
println("In requestDidCancelLoad \(request)")
}
func requestDidTimeout(request: SFRestRequest) {
println("In requestDidTimeout \(request)")
}
请求后面的for
循环应该是另一种方法,您可以从作为委托协议一部分实现的成功加载方法调用。