在 IBM MobileFirst 中处理来自 SQL 适配器的结果
Processing the results from SQL Adapter in IBM MobileFirst
我的数据库中有三个字段(docid
、docname
、docref
)。我能够成功显示以字母 a 开头的 docname
。下一步是单击结果中的任何值,它应该显示该记录的其他字段。
例如,我得到 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();" />
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
}
我的数据库中有三个字段(docid
、docname
、docref
)。我能够成功显示以字母 a 开头的 docname
。下一步是单击结果中的任何值,它应该显示该记录的其他字段。
例如,我得到 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();" />
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
}