在 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】:

当您传递的对象包含嵌套对象或函数类型时,就会出现该问题。

在您的情况下,您有多个具有相同名称的变量/函数searchDataSearchData。我建议您将名称更改为更具描述性。

我已经尝试了以下,它运行成功

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;
    

【讨论】:

适配器方法现在被调用。但是,我所做的更改是我在 中有 audit="true" ,这导致了一些问题。但是我仍然进行了您建议的更改,一旦调用到达适配器方法,我将函数参数设为“未定义”。知道为什么会这样吗? @Prera​​kTiwari 阅读了答案的更新,我在那里解决了这个问题 @Yoel ...它对我有用...我在发布评论之前尝试使用 setQueryParameter 方法,但问题是我在方法参数中传递的数据没有括号([])。这就是为什么它对我不起作用。 @Prera​​kTiwari 很高兴我能提供帮助 @Prera​​kTiwari for JS 参数通过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 适配器?

MFP 8.0 适配器缓存

从独立的 IBM MFP 客户端应用程序调用 MFP 适配器

无法在 MobileFirst V8.0 Consumer Edition 中调用适配器过程

无法在 MFP v7 中使用适配器生成器任务 (ANT) 编译 Java 适配器