Обработка результатов адаптера SQL в IBM MobileFirst

У меня есть три поля (docid,docname,docref) в моей базе данных. Я могу успешно отобразить docname, начиная с буквы a. Следующий шаг — щелкнуть любые значения из результата, он должен отобразить другие поля для этой записи.

Например, в результате я получаю alex, adrain, adams, и когда я нажимаю alex, он должен отображать оставшиеся поля (docid, 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);
    }
}

Форма поиска

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();" />

person david    schedule 21.10.2015    source источник


Ответы (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
}
person Yoel Nunez    schedule 21.10.2015
comment
@david, в чем проблема, с которой ты сталкиваешься? Можешь поделиться своим проектом? - person Yoel Nunez; 23.10.2015
comment
его рабочий помощник, но он отображает одни и те же данные дважды или трижды, когда я возвращаюсь и снова нажимаю список любых решений, пожалуйста - person david; 26.10.2015
comment
проверьте обновление выше. в основном каждый раз, когда вызывается displayresults, мы будем очищать список - person Yoel Nunez; 26.10.2015