在IBM MobileFirst中处理SQL Adapter的结果

时间:2015-10-21 12:37:10

标签: sql ibm-mobilefirst mobilefirst-adapters

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

例如,我得到alexadrainadams作为结果,当我点击alex时,它应显示其余字段(docid,{{ 1}})来自数据库。

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

适配器

docref

适配器调用(客户端)

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);
    }
}

1 个答案:

答案 0 :(得分:1)

服务器/适配器端:

您应修改查询以返回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
}