# EBI的创建的步骤
- 创建Query,Query用来直接从数据库中获取数据
- 创建QuerySet,QuerySet将多个Query获取的数据链接在一起, 输出为EBI / Combined Set所需要的结果集。
- 创建Combined Set, 将多个QuerySet的结果汇集在一起,输出为EBI的所需要的结果集。
- 创建EBI,通过EBIBuilder创建EBI。EbiBuilder的结果集来源可以是QuerySet,也可以是Combined Set。
- 导出EBI
# 创建Query
Query脚本由标准的SQL+参数组成
select a.*, now() as testTimeStamp, '12:08:34' as testTime
from employee a
where ${[lookupCond('a.dept', @D_deptFilter)]}
and ${[lookupCond('a.position', @D_posFilter)]}
and ${[criteriaForMySQL('a.sex', @D_sexFilter)]}
and ${[criteriaForMySQL('a.createDate', @D_createDateFilter)]}
and ${[lookupCond('a.id', @D_idFilter)]}
and ${[lookupCond('a.expired', @D_expiredFilter)]}
and (?{[@D_empCode]} = '' or a.code = ?{[@D_empCode]})
以上的脚本经过渲染之后,最后到数据执行的执行如下所示
select a.*, now() as testTimeStamp, '12:08:34' as testTime
from employee a
where a.dept in (SELECT `id` FROM t_qt_IBSWTCIQGG WHERE id !=0)
and a.position in (SELECT `id` FROM t_qt_HBDTYCMZAC WHERE id !=0)
and a.sex = ?
and a.createDate < ?
and a.id in (SELECT `id` FROM t_qt_GUAEMVFIDM WHERE id !=0)
and 1 = 1
and (? = '' or a.code = ?)
{'male', 2019-09-11 10:50:49.549, '', ''}
SQL中使用参数的语法为@D_XXXX,XXXX 为Input Parameter的Code。总共有三种类型的参数
- Lookup(模块条件)
- Criteria(筛选条件)
- Primitive
这些参数可以在EBI Builder中用于配置生成的EBI界面
# Lookup Parameter(模块条件)
一个Lookup类型的Input Parameter对应界面上的一个Turbo Filter,使用的语法为
${[lookupCond('a.dept', @D_deptFilter)]}
最终生成如下的脚本, 用户在Turbo Filter设置的条件,会被加到括号内 id != 0
后面
a.dept in (SELECT `id` FROM t_qt_IBSWTCIQGG WHERE id !=0)
# Criteria Parameter(筛选条件)
筛选条件需要进一步选择筛选条件类型 (Text-文本、Integer-整数、Decimal-分数、Logical\Boolean-布尔、Date-日期、Datetime-时间),使用的语法如为
${[criteriaForMySQL('a.createDate', @D_createDateFilter)]}
最终生成如下脚本,?
表示sql script占位符,<
是用户在界面选择的操作符
a.createDate < ?
筛选条件出现在Report Option中,它的类型决定了界面上可以使用的操作符,比如对于日期类型,可以用的操作符如下
# Primitive Parameter(原型参数条件)
支持 Text-文本、Integer-整数、Decimal-分数、Logical\Boolean-布尔、Date-日期、Datetime-时间,
Primitive Parameter也同样出现在Report Option中,它的操作符固定为=
引用参数的语法为
?{[@D_empCode]}
# Data Handler(数据处理函数)
该功能用于对Query的结果进行Java层级的过滤和处理,可以在Java中逐行对Query结果进行复杂计算。
使用时只需要指定class名称即可(内部类需要使用$符号指定),该Class必须实现QueryRowHandler接口
public abstract class QueryRowHandler{
protected abstract void init();
protected abstract boolean pass(SqlTable rowData);
}
# 创建QuerySet
将多个Query通过水平链接进行扩展
# 创建Combined QuerySet
将多个QuerySet进行集合操作
# 创建EBI
通过【EBI Builder】创建EBI,目前的Query Source Type 只有QuerySet和 Combined QuerySet
创建之后的EBI可以通过UDF Menu添加到Menu中作为入口
开发者也可以通过xml的方式进行修改,注意Menu code= EBI Builder创建的EBI的Code
<menu code="raindrop_test" messCode="empbi.hr" src="view/module/ebi/ebi" mType="EBI" apDebug="true">
<inherit name="ebi_module_fc"></inherit>
</menu>
# 导出EBI
通过【EBI XML Console】可以导入/导出 EBI