# 多数据源
当不同类型系统之间(例如MES和ERP)需要传递数据时,同一个页面中可能存在多个Grid,并且数据源来自多个不同的数据库,可以使用SQL语句+第三方数据源的方式绑定数据源。
# 添加第三方数据源
在界面中为组件绑定第三方数据源之前,首先要在二次开发模块下的数据源界面中添加第三方数据
各部分说明:
- 名称:自定义名称
- 数据库驱动:不同数据库对应的驱动如下
- MySql:com.mysql.jdbc.Driver
- SqlServer:com.microsoft.sqlserver.jdbc.SQLServerDriver
- Oracle:oracle.jdbc.OracleDriver
- 数据库方言:不同数据库对应的数据库方言如下
- MySql:org.hibernate.dialect.MySQL5InnoDBDialect
- SqlServer:org.hibernate.dialect.SQLServer2008Dialect
- Oracle:org.hibernate.dialect.Oracle10gDialect
- URL:数据库的连接地址;
- 用户名/密码:数据库的用户名和密码;
- 最大/最小连接数:允许连接的最大/最小用户数;
数据源添加完成后,查看状态是否是已激活,只有激活的数据源才可以在配置数据源时显示
# 设置数据源
# 选择数据库
# 输入SQL语句
如果SQL语句正确,Grid下的Column组件的数据源选项中可以选到查询的字段
# SQL语句说明
通过SQL语句为组件绑定数据源时,如果使用一般的SQL语句,是没有过滤属性的, <#if></#if>语句的作用是为该数据源添加过滤属性和过滤条件
select * from ut_material
<#if matDesc?? && matDesc!=''>where MT_DESC=:matDesc</#if>
以上面例子中的SQL语句为例,各部分含义如下:
- matDesc 数据源过滤属性
- matDesc?? 表示matDesc不为空时,才执行<#if></#if>之间的语句
- MT_DESC 表示数据库中与过滤属性绑定的字段名
- =: 将运算符两边的变量绑定,在执行过滤时判断两边是否相等
其他判断条件语法格式如下:
- 左匹配
select * from ut_material where 1=1
<#if matDesc?? && matDesc!=''>and MT_DESC like:matDesc%</#if>
- 右匹配
select * from ut_material where 1=1
<#if matDesc?? && matDesc!=''>and MT_DESC like%:matDesc</#if>
- 包含
select * from ut_material where 1=1
<#if matDesc?? && matDesc!=''>and MT_DESC like%:matDesc%</#if>
matDesc!=''判空语句,这里写 空字符串 '' 是因为数据库中的MT_DESC字段是字符串类型,其他数据类型写法可能不同,long类型写法如下;
select * from ut_material
<#if matId?? && matId!=-1>where MT_ID=:matId</#if>
# 过滤功能
# 使用输入框+按钮的方式过滤数据
在按钮的点击事件中设置流程,首先获取输入框的输入值,然后添加过滤器, 过滤目标设置成上面绑定好数据源的Grid,在过滤属性下拉框中出现的matDesc就是上面SQL语句中写的过滤属性,表达式直接填入在"获取组件值"中取的别名即可。
# 多个表之间的过滤功能
要实现的效果如下图所示,当选中表A一行数据后,自动使用版本号过滤表B:
# 为表A绑定数据源
# 为表B绑定数据源
# 添加过滤器
在表A的选中事件中添加流程,首先获取表A的值,然后添加过滤器,输入表达式:
获取Grid某个列的值表达式写法和TextField不同,因为对Grid使用获取组件值功能,拿到的是当前选中的一整条记录(未选择数据则为null),如果想拿到特定字段的值,需要使用平台定义好的get方法,为Grid绑定不同类型的数据源时,获取到值的类型和写法也略有不同,当使用SQL设置数据源时, 获取类型是java中的HashMap类型,以字段名为键,字段值作为值,具体类型和写法如下:
- SYSTEM_OBJECT 平台为每个系统表都提供了对应的原生类,类中为每个字段封装了get和set方法 完整类型名一般为驼峰命名法的数据库表名称,例如用户User表对应的完整类名如下。
com.ags.meperframework.suites.appbase.sdk.base.domain.User
示例
edition.getEdition()
- CUSTOMIZED_TABLE 平台为所有自定义表统一定义了一个CustomizedObjectSupport类,公共字段的获取方法和系统表写法相同,自定义字段写法getValue("字段名") 完整类型名
com.ags.meperframework.suites.appbase.sdk.base.domain.CustomizedObjectSupport
示例
edition.getValue("Edition")
- SQL
获取到的数据类型是HashMap,使用HashMap提供的get(“字段名”)方法;
- key:字段名(全大写);
- value:字段值;
java.util.HashMap
示例
edition.get("Edition")
数据源类型 | “获取组件值”的类型名 | 获取字段值表达式 | 示例 |
---|---|---|---|
SYSTEM_OBJECT | com.ags.meperframework.suites.appbase.sdk.base.domain.表名称 | getXxx(); Xxx-字段名 | edition.getEdition() |
CUSTOMIZED_TABLE | com.ags.meperframework.suites.appbase.sdk.base.domain.CustomizedObjectSupport | 公共字段同上;自定义字段getValue("字段名"); | edition.getValue("Edition") |
SQL+第三方数据源 | java.util.HashMap | get("字段名"); | edition.get("EDITION") |