在 MFP V8.0 中调用 Java Script Adapter 过程时出错
Posted
技术标签:
【中文标题】在 MFP V8.0 中调用 Java Script Adapter 过程时出错【英文标题】:Error while calling the Java Script Adapter procedure in MFP V8.0 【发布时间】:2016-08-03 20:12:38 【问题描述】:我正在将我的应用程序从 MFP V 7.1 迁移到 MFP V 8.0。我有以下场景,其中我正在构建一个数据对象并使用以下代码将请求从我的客户端发送到 MFP 适配器:
function SearchData(username,name,city)
this.username = username;
this.name = name;
this.city = city;
searchData()
var searchData = new SearchData(getUserId(),name,city);
var dataRequest = new WLResourceRequest('/adapters/MyAdapterName/searchEmployer', WLResourceRequest.GET);
alert('there');
dataRequest.send(searchData).then(
function(response)
console.log('response --> ' + response);
,
function()
console.log('error response --> ' );
);
以下是用我的 java 脚本适配器编写的代码:
function searchData(searchData)
try
WL.Logger.info("Inside searchData() method.");
var input =
method : 'post',
returnedContentType : 'json',
path : 'rest/search',
body :
contentType : 'application/json;charset=utf-8',
content : JSON.stringify(searchData)
;
var response = MFP.Server.invokeHttp(input);
return response;
catch(exception)
WL.Logger.error("Inside searchData() method :: " + exception.message);
throw exception;
每次调用此方法时,都会调用失败函数。我也尝试使用sendFormParameters 方法发送请求,但它返回打印以下错误:
worklight.js:9342 Uncaught Error: Invalid invocation of method WLResourceRequest.sendFormParameters; Form value must be a simple type.
logAndThrowError @ worklight.js:9342
encodeFormParameters @ worklight.js:9727
WLResourceRequest.sendFormParameters @
worklight.js:9685searchEmployer @ VM79:47
onclick @ index.html:1
【问题讨论】:
【参考方案1】:当您传递的对象包含嵌套对象或函数类型时,就会出现该问题。
在您的情况下,您有多个具有相同名称的变量/函数searchData
、SearchData
。我建议您将名称更改为更具描述性。
我已经尝试了以下,它运行成功
function SearchData(username,name,city)
this.username = username;
this.name = name;
this.city = city;
function search()
var data = new SearchData(getUserId(), name, city);
var request = new WLResourceRequest('/adapters/MyAdapterName/searchEmployer', WLResourceRequest.GET);
request.send(searchData).then(function(response)
console.log('response --> ', response);
, function(error)
console.log('error response --> ', error);
);
如果运行上述代码后仍然有问题,请与您的项目共享链接或添加更多代码 sn-ps。
UDPATE:
对于 javascript 适配器,通过 GET 变量params
接收其参数,params
是一个参数数组。
所以你需要在客户端更新你的代码如下:
function search()
var data = new SearchData(getUserId(), name, city);
var request = new WLResourceRequest('/adapters/MyAdapterName/searchEmployer', WLResourceRequest.GET);
request.setQueryParameter("params", [JSON.stringify(data)]);
request.send().then(function(response)
console.log('response --> ', response);
, function(error)
console.log('error response --> ', error);
);
由于传递给适配器的数据是一个问题,因此您需要更新适配器过程以反映这一点,即删除 JSON.stringify
function searchData(payload)
try
WL.Logger.info("Inside searchData() method.");
var input =
method : 'post',
returnedContentType : 'json',
path : 'rest/search',
body :
contentType : 'application/json;charset=utf-8',
content : payload
;
var response = MFP.Server.invokeHttp(input);
return response;
catch(exception)
WL.Logger.error("Inside searchData() method :: " + exception.message);
throw exception;
【讨论】:
适配器方法现在被调用。但是,我所做的更改是我在params
查询参数作为数组传递,这就是您需要方括号的唯一原因。 ibm.com/support/knowledgecenter/SSHS8R_7.1.0/…以上是关于在 MFP V8.0 中调用 Java Script Adapter 过程时出错的主要内容,如果未能解决你的问题,请参考以下文章
来自 MobileApplication 的 IBM MobileFirst Platform v8.0 Https 连接
如何从 MFP 8.0 中的 java 适配器异步调用 javascript 适配器?
从独立的 IBM MFP 客户端应用程序调用 MFP 适配器