2015-11-26 87 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