worklight,建立适配器

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、查看结果:最终运行效果:





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值