Синхронно выполняйте SOQL-запросы SalesForce с помощью iOS MobileSDK - PullRequest
0 голосов
/ 17 ноября 2018

Я использую последний Salesforce Mobile SDK для разработки приложения для iOS для взаимодействия с CRM.

У меня есть 2 SOQL-запроса для синхронного выполнения, чтобы данные, полученные из первого запроса, можно было использовать во втором запросе.,В Salesforce Mobile 6.1 была опция, похожая на:

    let restApi  = SFRestAPI.sharedInstance()
 restApi.Promises.query(soql: "SELECT Id,FirstName,LastName FROM User")
 .then { request in
    restApi.Promises.send(request: request)
 }
 .done { sfRestResponse in
    restResponse = sfRestResponse.asJsonDictionary()
    ...
 }
 .catch { error in
   //handle error
 }

Но в последнем SDK обещания были объявлены устаревшими.Какой лучший способ выполнять запросы SOQL синхронно, используя последний SalesForce Mobile SDK.

1 Ответ

0 голосов
/ 10 декабря 2018

Версия 6.2 SDK Salesforce iOS использует PromiseKit для синхронной синхронизации асинхронных задач (таких как веб-запросы). Даже несмотря на то, что он не поддерживается "из коробки" в их 7.0 SDK, вы все равно можете импортировать его для использования в своем проекте: PromiseKit

Если вы хотите реализовать ту же функциональность изначально с помощью нового 7.0 SDK, самый простой способ - создать цепочку обратных вызовов:

let queryRequestOne = RestClient.sharedInstance().buildQueryRequest(soql:"SELECT ... FROM ...")

RestClient.sharedInstance().send(request: queryRequestOne, onFailure: { (error, urlResponse) in
    SFSDKLogger.sharedInstance().log(type(of:self), level:.debug, message:"Error invoking: \(queryRequestOne)")
}) { [weak self] (response, urlResponse) in

    //Parse data from web response
    //..

    let queryRequestTwo = RestClient.sharedInstance().buildQueryRequest(soql:"SELECT ... FROM ...")

    RestClient.sharedInstance().send(request: queryRequestTwo, onFailure: { (error, urlResponse) in
        SFSDKLogger.sharedInstance().log(type(of:self), level:.debug, message:"Error invoking: \(queryRequestTwo)")
    }) { [weak self] (response, urlResponse) in

        //Parse data from web response and update UI on main thread

    }
}
...