2015-11-26 48 views
1

我正尝试创建一个父对象,它是Salesforce SDK的子对象。从我可以告诉的是在一个操作中没有办法做到这一点,所以我需要先创建父对象,然后逐个创建每个子对象。从新创建的salesforce对象中检索对象ID

我的问题是,我不确定如何获得我需要创建它的孩子的新创建的父对象的id。我知道在SFRestDelegate方法request:didLoadResponse:中返回的响应包含该id,但我不确定如何在我的创建函数中捕获该响应。

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

您已将代理设置为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循环,你有以下的要求应该是,你可以从你实现为委托协议的一部分,成功的加载方法调用另一个方法。

+0

问题在于为每个孩子调用'request:didLoadResponse:'也是如此,那么我可以用什么逻辑来区分它们呢? – doovers

+0

您可以使用块响应处理程序(与内联匿名回调函数类似的不同设计模式),也可以设置一个标志来指示您现在正在创建子记录。在委托内部,你会检查这个标志,如果它是假的,请设置它。从那时起,这个标志将是真实的,你可以在你的委托中处理不同的逻辑。 –

+0

是的,我想到了标志解决方案,但我更喜欢块响应处理程序的想法。事实上,这是我想要实现的那种事情,但我不确定如何。你介意用一个例子更新你的答案吗? – doovers