第1章 概述
用于实现系统报表在运行期加入查询条件的功能,提供了添加条件的方法,满足客户的二次开发的需求。
【注意】添加的条件,只作用在第一个数据集(主数据集)上。
第2章 使用方法
2.1 通过报表ID读取数据集元数据方法
String reportId=”xxx”; //报表id
DefineLoader loader = new DefineLoader();
DefineReport reportDefine = loader.loadDefineReport(reportId);
List list = reportDefine.getDataSetEntities();
DataSetDef datasetDef=(DataSetDef)list.get(0);//获取首个数据集
List datasetDefList = datasetDef.getColumns();//获取字段信息
for (int j = 0; j < datasetDefList.size(); j++) {
DataSetColumnDef dataSetColumnDef = (DataSetColumnDef) datasetDefList.get(j);
dataSetColumnDef.getCaption();//获取字段名称
dataSetColumnDef.getType();//获取字段数据类型
}
【注意】获取的字段类型与2.2.1中的valueType相对应,为报表中使用的DataValue类型。
2.2 页面将条件拼接成json串作为参数传给报表
2.2.1 条件的JSON串的书写规则
举例
String unireport_biz_params_sysreport="{\"type\":0,\"logic\":1,\"child\":[
{\"type\":1,\"colName\":\"product_id\",\"operator\":\"GT\",\"value\":\"1\",\"valueType\":\"4\"},
{\"type\":1,\"colName\":\"product_id\",\"operator\":\"LT\",\"value\":\"10\",\"valueType\":\"4\"}]
} "
以上json串可转换为报表定义的条件树,其中树的节点类型type有:
type=0:逻辑and/or节点。logic=0为or逻辑节点;logic=1为and逻辑节点。child标识节点的子节点。
type=1:关系表达式节点。colName字段名,为关系比较的第一个参数值。operator为关系比较符。Value为关系比较的第二个参数值。valueType为参数值的类型。
其中operator关系比较符有如下几种:0到5适用于整型、浮点型、日期类型;0,1,6到13适用于字符串类型。
0:"E": 等于
1:"NE": 不等于
2:"GT": 大于
3:"GE": 大于等于
4:"LT": 小于
5:"LE": 小于等于
6:"M": 匹配
7:"LM": 左匹配
8:"RM": 右匹配
9:"NM": 不匹配
10:"NLM": 左不匹配
11:"NRM": 右不匹配
12:"NIN": NOT IN
13:"IN": IN
valueType参数值的类型说明如下:
String: 1
Boolean: 2
Integer: 3
Decimal: 4
Datetime: 5
2.2.2 条件的参数名
生成好的条件json串要以” unireport_biz_params_sysreport”为参数名作为参数传递到后台。
可以将参数直接写到url上:
http://localhost:8080/report/Report-ResultAction.do?reportId=e8b2965a-2512-4006-bb98-7ed7d729a9d7&unireport_biz_params_sysreport={“type”:0,”logic”:1,”child”:[{“type”:1,”colName”:”product_id”,”operator”:”GT”,”value”:”3”,”valueType”:”3”},{“type”:1,”colName”:”product_id”,”operator”:”LT”,”value”:”10”,”valueType”:”3”}]}