12. 参数与系统变量
12.1 参数
参数是在报表设计器中定义的,定义参数后在Web浏览器端查看报表时会自动生成参数页面,由用户输入或选择参数值。
12.1.1 参数定义
在报表设计器右下角“参数管理”菜单项右侧,点击“+”按钮,新建参数,如下图所示:
弹出参数窗口,如下图所示:
属性说明:
在参数窗口中包含3个部分:参数、控件、校验。各部分的说明如下:
- 参数
- 参数标识
参数引用的名称,即在报表定义中引用参数时使用的名称,只能使用英文定义。 - 参数标签
参数页面中参数显示的名称。 - 参数值类型
参数值的数据类型。 - 必须输入
参数是否必须输入,若非必须输入的情况下,在参数页面中没有输入参数值,则该参数对当前报表不起作用。 - 默认值
提供参数的默认值。
- 参数标识
- 控件
- 控件类型
参数在页面显示时的控件类型。 - 是否可见
参数控件在报表查看时,是否可见。 - 下拉项-数据集
选择参数来源的数据集。 - 下拉项-值
选择参数实际值来源数据集中哪个字段 - 下拉项-显示
选择参数显示值来源数据集中哪个字段
- 控件类型
- 检验
- 正则表达式
参数实际值符合的规则; - JavaScript
参数实际值符合的规则,书写JS代码校验; - 提示
参数不符合校验给出的提示;
- 正则表达式
12.1.2 参数中取系统时间
往往需要在参数中默认显示当前系统日期、年份等等,具体定义方法如下。
- 取系统日期
在参数定义的“默认值”属性中输入:calendar.date。 - 取当前系统日期的年份
在参数定义的“默认值”属性中输入:calendar.year。 - 取得当前系统日期的月份
在参数定义的“默认值”属性中输入:calendar.month。 - 取得当前系统日期的天
在参数定义的“默认值”属性中输入:calendar.day。
12.1.3 参数布局
为满足业务需求,UniEAP Report支持定义参数布局,用户可以在参数布局中自由拖拽参数控件,自由摆放控件,调节参数页面的宽高,如下图所示
定义一个参数后,参数布局中会增加两个控件,该参数的标题控件和该参数的数据选择框控件,用户可以删除标题控件,但是不能删除参数的数据选择框控件 用户也可以拖拽参数布局上方的标签控件和按钮控件到参数布局区域,随意摆放。如下图所示
标签控件可编辑值、文字颜色、水平位置、垂直位置、高度、宽度等属性;按钮控件可编辑值、文字颜色、背景色、背景图、事件类型、关联JS方法、水平位置、垂直位置、高度、宽度等属性,如下图所示
12.2 系统变量
系统变量是用于支持不需要用户在创建报表时输入、但对创建报表有限定作用的信息。典型的系统变量如用户ID、报表创建时间。
系统变量是参数的扩展,通过实现变量接口返回变量值。
12.2.1 系统变量的定义
实现com.neusoft.report.engine.formula.variable.Variant接口并修改report-system-vairable.xml文件。
Variant接口定义
public interface Variant {
public static final String CONTEXT_UID = "UID";
public static final String CONTEXT_RID = "RID";
public static final String CONTEXT_HTTP_REQUEST = "HTTP_REQUEST";
public DataValue getValue(Map context);
}
接口说明:
- 参数context
传入的上下文参数,包括当前用户id、报表模板id,数据类型为字符串(String)。 - 返回值
如果是简单类型的数据值,返回AbstractDataValue派生出来的几个DataValue的类型;如果是集合类型,返回CollectionDataValue类型。 - 常量
CONTEXT_UID:当前用户id。
CONTEXT_RID:报表模板id。
CONTEXT_HTTP_REQUEST:javax.servlet.http.HttpServletRequest对象。
例子:一个Variant接口实现的例子,获取报表的id。 ``` import java.util.Map; import com.neusoft.report.engine.util.DataValue; import com.neusoft.report.engine.util.datavalue.StringDataValue;
- 参数context
public class RID implements Variant { public DataValue getValue(Map context) { Object rid = context.get(Variant.CONTEXT_UID); return new StringDataValue((String)rid); } }
report-system-vairable.xml文件
</system_variable>
增加一个变量,只需要在system_variable元素下增加一个variable元素
- Variable下节点说明
- Name
表示这个系统变量名称,即引用该系统变量的名称,用英文字母表示; - Caption
表示这个系统变量的描述信息,可以是中文; - className
表示变量接口的实现类; - dataType
表示返回值的数据类型,编码参见JAVADOC参考文档;
- Name
文件中name为currentTime、UID、RID为报表默认提供的系统变量。
- Variable下节点说明
12.2.2 系统变量的使用
系统变量使用时:
- 变量名不区分大小写;
- 变量使用名称作为标识,且不允许重名;
- 变量的引用采用$xx的方式,例如变量名为var,则对变量的引用是:$var。参数和系统变量的引用方式相同。
12.3 参数与系统变量的区别
参数与系统变量的区别如下:
- 相对于参数获取值的方式,系统变量利用编写代码获取任意数据;
- 系统变量是作用于整个报表系统的,定制任意报表时都可以使用;
- 系统变量不与用户交互,直接应用到报表中,不生成参数页面,在生成报表时进行替换;
- 参数和系统变量的定义方式不同,但使用的方式相同。