worklight,建立适配器

原创 2012年09月16日 23:03:51

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





insert into select 批量加载出错解决方案

当使用insert into select 批量加载数据的时候,可能会碰到因为某些数据不符合加载条件,而导致整个insert 语句无法执行,全部rollback。这时可以使用DML 错误日志的特性,解...

WorkLight第二天

白天事太多,晚上还要陪孩子,只有等她睡了以后才有时间,所以进度缓慢,坚持就好。 书接上文,更新好worklight插件后,需要建立一个project, 这里需要注意,worklight支持jd...
  • jdsnhan
  • jdsnhan
  • 2012年09月03日 23:21
  • 6747

worklight适配器-http

因为其他事,没有更新 前一篇文章是sql适配器,与DB的交互,本章主要是http方式交互。 方式很简单,建立适配器,选择http模式,名称,http15,对应的xml文件和js文件与上面类似,一个...
  • jdsnhan
  • jdsnhan
  • 2012年11月22日 11:28
  • 5407

Worklight 6.0的App在iOS7中状态栏错位的解决方法

Worklight 6.0的App在iOS6下正常,是这样的 : 由于iOS7开始,苹果把系统状态栏和程序导航栏融合了,目的是为了App能够更大灵活的设计UI达到更好的融合效果,但...

Worklight Studio技术简介

http://www.ibm.com/developerworks/cn/mobile/mo-aim1206-working-with-worklight-1/ http://www-01.ibm....
  • Jimmy5z
  • Jimmy5z
  • 2013年02月05日 22:27
  • 1612

Worklight环境搭建

IBM® Worklight® V5 是一种领先的移动企业应用程序平台 (Mobile Enterprise Application Platform, MEAP),利用该平台,IBM 可以跨其产品组...

Invoking Adapter procedure in IBM Worklight

This tutorial will help you to understand the Adapters in IBM Worklight and Invoking Adapter procedu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:worklight,建立适配器
举报原因:
原因补充:

(最多只允许输入30个字)