将对象参数传递给采用 javascript 对象的适配器
pass object parameter to an adapter that takes javascribt object
我正在开发与 Worklight 服务器集成的本机 iOS Swift 应用程序,我遇到的问题是其中一个适配器采用对象 "params" 作为参数,这个对象是一个 javascript 对象,但是当我试图从我的本机应用程序调用这个适配器时,服务器不断给出参数丢失的响应,这是一个代码片段:
let procedure = WLProcedureInvocationData(adapterName: adapterNameTextField.text, procedureName: procedureNameTextField.text)
procedure.parameters = ["en","firas@cloudappers.com","123123123"]
WLClient.sharedInstance().invokeProcedure(procedure, withDelegate: ProcedureDelegate(master: self))
这里是适配器的程序头:
function findCardKey(language,userId,params) {
var request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="..." xmlns:xs1="....">'
+getHeader(language,userId)
+'<soapenv:Body>'
+'<xs1:findCardKeyRequest>'
+jsonToXml(params,'', null)
+'</xs1:findCardKeyRequest>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
var result = invokeWebService(request,"findCardKey");
return result;
}
此参数是一个 javascript 对象,其中包含名为 "tagId" 的属性。
这里是在 CardEnquiryServiceModel
的混合应用程序中调用它的地方:
findCardKey: function(parameters, callback, userId)
{
var invocationData =
{
adapter: 'nolCardEnquiryv2Service',
procedure: 'findCardKey',
parameters: [GeneralUtil.getServerLanguage(), userId, parameters]
};
InvokeUtil.invokeProcedure(invocationData, null, callback);
}
这里是使用它的地方:
var parameters = {};
parameters.tagId = $("#tagIdInput").val();
CardEnquiryServiceModel.findCardKey(parameters, _this.getCardEnquiryServiceFindCardKeyResult, user_id);
在 iOS Swift 中,我应该使用什么形式或类型或方式将此对象传递给适配器?
您需要将数据放入字典中:
let myDictionary = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
然后将其添加到调用数据中:
invocationData.parameters = ["en","firas@cloudappers.com",myDictionary]
一切都在一起,例如:
let myDictionary = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
let invocationData = WLProcedureInvocationData(adapterName: "RSSReader", procedureName: "getStories")
invocationData.parameters = ["en","firas@cloudappers.com",myDictionary]
WLClient.sharedInstance().invokeProcedure(invocationData, withDelegate: invokeListener)
在适配器代码中,确保JSON.stringify它。例如:
function getStories(language, email, params) {
WL.Logger.info("language: " + language + ", " + "email: " + email + ", " + "params: " + JSON.stringify(params));
...
...
...
}
我正在开发与 Worklight 服务器集成的本机 iOS Swift 应用程序,我遇到的问题是其中一个适配器采用对象 "params" 作为参数,这个对象是一个 javascript 对象,但是当我试图从我的本机应用程序调用这个适配器时,服务器不断给出参数丢失的响应,这是一个代码片段:
let procedure = WLProcedureInvocationData(adapterName: adapterNameTextField.text, procedureName: procedureNameTextField.text)
procedure.parameters = ["en","firas@cloudappers.com","123123123"]
WLClient.sharedInstance().invokeProcedure(procedure, withDelegate: ProcedureDelegate(master: self))
这里是适配器的程序头:
function findCardKey(language,userId,params) {
var request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="..." xmlns:xs1="....">'
+getHeader(language,userId)
+'<soapenv:Body>'
+'<xs1:findCardKeyRequest>'
+jsonToXml(params,'', null)
+'</xs1:findCardKeyRequest>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
var result = invokeWebService(request,"findCardKey");
return result;
}
此参数是一个 javascript 对象,其中包含名为 "tagId" 的属性。
这里是在 CardEnquiryServiceModel
的混合应用程序中调用它的地方:
findCardKey: function(parameters, callback, userId)
{
var invocationData =
{
adapter: 'nolCardEnquiryv2Service',
procedure: 'findCardKey',
parameters: [GeneralUtil.getServerLanguage(), userId, parameters]
};
InvokeUtil.invokeProcedure(invocationData, null, callback);
}
这里是使用它的地方:
var parameters = {};
parameters.tagId = $("#tagIdInput").val();
CardEnquiryServiceModel.findCardKey(parameters, _this.getCardEnquiryServiceFindCardKeyResult, user_id);
在 iOS Swift 中,我应该使用什么形式或类型或方式将此对象传递给适配器?
您需要将数据放入字典中:
let myDictionary = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
然后将其添加到调用数据中:
invocationData.parameters = ["en","firas@cloudappers.com",myDictionary]
一切都在一起,例如:
let myDictionary = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
let invocationData = WLProcedureInvocationData(adapterName: "RSSReader", procedureName: "getStories")
invocationData.parameters = ["en","firas@cloudappers.com",myDictionary]
WLClient.sharedInstance().invokeProcedure(invocationData, withDelegate: invokeListener)
在适配器代码中,确保JSON.stringify它。例如:
function getStories(language, email, params) {
WL.Logger.info("language: " + language + ", " + "email: " + email + ", " + "params: " + JSON.stringify(params));
...
...
...
}