在 IBM MobileFirst 中处理来自 SQL 适配器的结果

Processing the results from SQL Adapter in IBM MobileFirst

我的数据库中有三个字段(dociddocnamedocref)。我能够成功显示以字母 a 开头的 docname。下一步是单击结果中的任何值,它应该显示该记录的其他字段。

例如,我得到 alexadrainadams 结果,当我单击 alex 时,它应该显示剩余字段(dociddocref) 来自数据库。

任何人都可以向我解释一下这个想法或示例或代码吗?我在下面提供了我的代码,我需要下一步的代码或帮助,我被困在这里了。

适配器

var sel = WL.Server.createSQLStatement("SELECT docname FROM docdb WHERE docname like ? ");
function getdoc(docname) {
    return WL.Server.invokeSQLStatement({
        preparedStatement : sel,
        parameters :[new String(doc + "%")]
    });
}

适配器调用(客户端)

function searchfunc(){
    var invocationData = {
        adapter : 'docdb',
        procedure : 'getdoc',
        parameters : [$('#docname').val()]
    };

    WL.Client.invokeProcedure(invocationData,{
        onSuccess : loadSQLSuccess,
        onFailure : loadSQLFailure
    });
}

function loadSQLSuccess(result){
    displayresults(result.invocationResult.resultSet);
}

function displayresults(result){
    var ul = $('#table');

    for (var i = 0; i < result.length; i++) {
        var li = $('<li/>').html(result[i].DOCNAME);

        li.append($('<hr>'));
        ul.append(li);
    }
}

搜索表单

To Search Based On DOCName <input type="text" id="docname" placeholder="name">
<input type="submit" value="Search"  onclick="searchfunc();"><br><br>
<ul id="table">  </ul>
<input type="button" id="backButtonPage2" class="backbutton" value="BACK" onclick="currentPage.back();" />

Server/Adapter 边:

您应该将查询修改为也 return docid 例如将 SQL 语句更改为

var sel = WL.Server.createSQLStatement("SELECT docid,docname FROM docdb WHERE docname like ? ");

docname 可能是唯一的,也可能不是唯一的,这取决于您如何设置数据库。其次,您应该有一个单独的查询来通过 docid 检索文档详细信息,即:

var getDetailsQuery = WL.Server.createSQLStatement("SELECT docid,docname,docref FROM docdb WHERE docid = ? ");

function getDocDetails(docid) {
    return WL.Server.invokeSQLStatement({
        preparedStatement : getDetailsQuery,
        parameters :[docid]
    });
}

确保将 getDocDetails 过程添加到适配器 xml 文件

客户端:

按如下方式更新您的 displayresults 函数:

function displayresults(result){
    var ul = $('#table');

    // clear the list
    ul.html(null);

    for (var i = 0; i < result.length; i++) {
        var doc = result[i];
        // store document details as part of the element, i.e.: data()
        var li = $('<li/>').html(doc.docname).data(doc);

        li.append($('<hr>'));
        ul.append(li);
    }
}

$(document).on('click', 'li', function(){
    var data = $(this).data();

    var invocationData = {
        adapter : 'docdb',
        procedure : 'getDocDetails',
        parameters : [data.docid]
    };

    WL.Client.invokeProcedure(invocationData, {
        onSuccess : getDocDetailsSuccess,
        onFailure : getDocDetailsFailure
    });
});

function getDocDetailsSuccess(result) {
    // do your things
}

function getDocDetailsFailure(error) {
    // handle error
}