4.2 系统变量扩展
系统变量的定义
实现com.neusoft.report.engine.formula.variable.Variant接口并修改report-system-variable.xml文件。
Variant接口定义
package com.neusoft.report.engine.formula.variable;
import java.util.Map;
import com.neusoft.report.engine.util.DataValue;
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。
- 参数context
import java.util.Map;
import com.neusoft.report.engine.util.DataValue;
import com.neusoft.report.engine.util.datavalue.StringDataValue;
public class RID implements Variant {
public DataValue getValue(Map context) {
Object rid = context.get(Variant.CONTEXT_UID);
return new StringDataValue((String)rid);
}
}
report-system-variable.xml文件
</system_variable>
<variable>
<name>currentTime</name>
<caption>服务器时间</caption> <className>com.neusoft.report.engine.formula.variable.CurrentTime</className>
<dataType>5</dataType>
</variable>
<variable>
<name>UID</name>
<caption>用户id</caption>
<className>com.neusoft.report.engine.formula.variable.UID</className>
<dataType>1</dataType>
</variable>
<variable>
<name>RID</name>
<caption>报表模板id</caption>
<className>com.neusoft.report.engine.formula.variable.RID</className>
<dataType>1</dataType>
</variable>
</system_variable>
增加一个变量,只需要在system_variable元素下增加一个variable元素
- Variable下节点说明
- Name
表示这个系统变量名称,即引用该系统变量的名称,用英文字母表示; - Caption
表示这个系统变量的描述信息,可以是中文; - className
表示变量接口的实现类; - dataType
表示返回值的数据类型,编码参见JAVADOC参考文档;
- Name
文件中name为currentTime、UID、RID为报表默认提供的系统变量。
- Variable下节点说明