# EBI的创建的步骤

  1. 创建Query,Query用来直接从数据库中获取数据
  2. 创建QuerySet,QuerySet将多个Query获取的数据链接在一起, 输出为EBI / Combined Set所需要的结果集。
  3. 创建Combined Set, 将多个QuerySet的结果汇集在一起,输出为EBI的所需要的结果集。
  4. 创建EBI,通过EBIBuilder创建EBI。EbiBuilder的结果集来源可以是QuerySet,也可以是Combined Set。
  5. 导出EBI

# 创建Query

Query脚本由标准的SQL+参数组成

ebi1

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。总共有三种类型的参数

  1. Lookup(模块条件)
  2. Criteria(筛选条件)
  3. Primitive

ebi1

这些参数可以在EBI Builder中用于配置生成的EBI界面

ebi5

# 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中,它的类型决定了界面上可以使用的操作符,比如对于日期类型,可以用的操作符如下

ebi6

# Primitive Parameter(原型参数条件)

支持 Text-文本、Integer-整数、Decimal-分数、Logical\Boolean-布尔、Date-日期、Datetime-时间,

Primitive Parameter也同样出现在Report Option中,它的操作符固定为=

引用参数的语法为

?{[@D_empCode]}

# Data Handler(数据处理函数)

ebi4

该功能用于对Query的结果进行Java层级的过滤和处理,可以在Java中逐行对Query结果进行复杂计算。

使用时只需要指定class名称即可(内部类需要使用$符号指定),该Class必须实现QueryRowHandler接口

public abstract class QueryRowHandler{
    
    protected abstract void init();
    
    protected abstract boolean pass(SqlTable rowData);
}

# 创建QuerySet

将多个Query通过水平链接进行扩展

ebi7

# 创建Combined QuerySet

将多个QuerySet进行集合操作

ebi8

# 创建EBI

通过【EBI Builder】创建EBI,目前的Query Source Type 只有QuerySet和 Combined QuerySet

ebi9

创建之后的EBI可以通过UDF Menu添加到Menu中作为入口

ebi10

开发者也可以通过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