adapter是worklight的交换层,是连接终端应用于远端数据源的工具,那么重要作用就是执行逻辑,返回信息
adapter主要有三种类型,SQL Adapter,http Adapter,Cast Iron® adapter。
本篇仅以SQLAdapter为实例介绍。
1、建立适配器,project中右键新建或者在工具栏中,new worklight Adapter,选择对应的project Name,选择adapter type,输入适配器名称
2、编辑内容,系统自动生成{Adapter Name}.xml和{AdapterName-imp}.js文件,默认连接mysql,我机器只有oracle,所以,更改为连接oracle的驱动串
<dataSourceDefinition>
<driverClass>oracle.jdbc.driver.OracleDriver </driverClass>
<url>jdbc:oracle:thin:@10.66.0.17:1521:testdb</url>
<user>qmystest</user>
<password>qmystest</password>
</dataSourceDefinition>
此外,配置文件中还有个参数:
<procedure name="procedure1"/>
<procedure name="proceRename"/>
是Adapter执行方法的名称,具体内容在{AdapterName-imp}.js中定义,二者名称保持一致即可,如下:
var procedure1Statement = WL.Server.
createSQLStatement("select dept_code,dept_name from a03");
function procedure1(param) {
return WL.Server.invokeSQLStatement({
preparedStatement : procedure1Statement,
parameters : [param]
});
}
function proceRename(param) {
return WL.Server.invokeSQLStoredProcedure({
procedure : "ap2",
parameters : [param]
});
}
3、修改执行内容:SQL Adapter可以执行一条sql语句,也可以调用数据库对应的过程,执行sql语句时,定义一个相应的语法变量,即
var procedure1Statement = WL.Server.
createSQLStatement("select dept_code,dept_name from a03");
4、测试Adapter:保存上述内容后,对创建的的Adpater,右键,先部署,deploy worklight,再测试:invoke worklight procedure,无参数情况下,直接run,返回结果,成功。
{
"isSuccessful": true,
"resultSet": [
{
"DEPT_CODE": "1",
"DEPT_NAME": "销售部"
},
{
"DEPT_CODE": "2",
"DEPT_NAME": "供应部"
},
{
"DEPT_CODE": "3",
"DEPT_NAME": "市场部"
}
]
}
5、客户端调用:以上,在服务端的SQL Adapter创建完成,需要在客户端调用了。在客户端的hello.html中,增加一个按钮,增加一个下拉框来存储从服务端接收来的信息:
<div>
<input type="button" value="SQLAdapter" οnclick="getFromA03()" /><br />
</div>
<div id="wrapper">
<label for="citiesList">请选择部门: </label>
<select id="deptsList"></select>
<div id="info"></div>
</div>
在hello.js中,定义相关脚本,主方法及相关回调方法:
function getFromA03(){
var invocationData = {
adapter : 'ORA17Adapter',
procedure : 'procedure1',
parameters : []
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : loadSuccess,
onFailure : loadFailure,
});
}
function loadSuccess(result){
WL.Logger.debug("Feed retrieve success");
if (result.invocationResult.resultSet.length>0)
{
deptsList = result.invocationResult.resultSet;
fillDeptName();
}
}
function loadFailure(result){
WL.Logger.error("Feed retrieve failure");
}
getFromA03是主方法,里面通过worklight提供的内置方法,调用适配器内容invocation,然后是成功回调的方法loadSuccess,失败回调的方法loadFailure,我在这里曾经犯了个错,失败回调参数onFailure中的on我弄了个大写的On,找了近一个小时才发现。
成功后,调用fillDeptName,把部门信息添加到页面的下拉列表中,还要注意返回结果集result中的数据格式及调用方式:
result.invocationResult.resultSet
function fillDeptName(){
$('#deptsList').empty();
for (var i = 0; i < deptsList.length; i++) {
var elem = $("<option/>").html(deptsList[i].DEPT_NAME);
$('#deptsList').append(elem);
}
// deptSelectChanged();
}
6、查看结果:最终运行效果: