报表编辑过程
报表的部署过程
1.首先,如果是第一次部署报表,首先拷贝报表引擎所需的文件:
? 从%安装路径%\\Deployment\\JSP下拷贝Ming.tld到Web应用程序的WEB-INF目录下
? 从%安装路径%\\Deployment\\JSP下拷贝mr.jar(文件名可能不同,可能如mr_Trial.jar等)到
Web应用程序的WEB-INF/lib目录下,如果lib目录不存在则创建。
? 选择一个目录作为报表根目录(RootPath),如/YourApp/Reports/,从%安装路
径%\\Deployment\\JSP\\下拷贝ReportCenter.jsp到报表根目录/YourApp/Reports/。
? 从%安装路径%\\Deployment\\JSP\\下拷贝文件MREngine.prop到目录/YourApp/WEB-INF/下。
MREngine.prop文件中包含一个MRViewerVersion参数,类似MRViewerVersion=2,1,1,0 ,
“2,1,1,0”描述的是报表浏览器的版本号码,浏览器升级之后,需要在此指定新版本的版本号,这样客户端才可以自动下载新版本的浏览器插件。关于配置文件MREngine.prop中参数的详细说明请参考配置文件里面注释。
? 从%安装路径%\\Deployment下拷贝Viewer文件夹到报表根目录/YourApp/Reports/下,Viewer
文件夹中有MRViewer.cab文件,这就是报表浏览器插件。 2.拷贝已经用报表设计器设计好的报表模板到报表根目录或者根目录下的子文件夹下面
注意:如果你的应用程序是YourApp,那么你可以指定这个应用程序YourApp下的目录“/Reports/”作为你的报表的根目录。即:“/Reports/”。 3. 创建JSP页面,嵌入报表浏览器、为报表准备数据:
新建一个JSP文件,用于显示报表,如FirstReport.jsp,加入下面代码: ? 引用Tag Library
<%@ taglib uri=\ ? 引用需要的包
<%@ page import=\ ? 创建MREngine对象
MREngine engine = new MREngine(pageContext); ? 设置报表根路径
engine.setRootPath(\
注意此处不应该包含应用程序的虚拟目录“YourApp”,而是从虚拟目录的根开始,应该是“/Reports/”。
? 添加数据集
在数据组件中添加一个数据集,其中\用来指定数据集名称,这个名称与用报表设计器设计报表模板时指定的数据集名称对应;rs可以是一个com.ming.webReport.DataRecord和com.ming.webReport.MRDataSet,或者java.sql.ResultSet,包含了报表所需数据:
engine.addMRDataSet(\
1. 可以将其他类型的数据转换成MRDataSet对象,然后使用addMRDataSet添加数据集,下面的代码展示如何将一个java.sql.ResultSet转换为com.ming.webReport.MRDataSet(addMRDataSet方法可以直接使用ResultSet,以下代码仅作为演示): ArrayList ary = new ArrayList();
while(rs.next()) //rs为一个现有非空的ResultSet对象 {
DataRecord rec = new DataRecord();
for(int i=1;i<=rs.getMetaData().getColumnCount();i++){ Object val = rs.getObject(i);
rec.setValue(rs.getMetaData().getColumnName(i),val); }
ary.add(rec); }
MRDataSet mrds =new MRDataSet(); mrds.addRows(mrds);
engine.addMRDataSet(\
如果报表用到的数据集超过一个,则可以继续加入这些数据集: engine.addMRDataSet(\
如果数据集之间存在关联,用下面代码设置数据集之间的关联,其中\是主数据集的名称,\是子数据集的名称,而\是两个数据集之间的关联表达式,表示使用各自表中的title_id字段对应关联。如果关联字段超过一组时用分号(;)分隔:
engine.addRelation(\
2. 如果从数据库从数据库查询出来的数据被封装成了一个对象,并返回。报表并不支持对象显示数据,以下方法可以将对象转换成DataRecord数据集: //o为需要转换成DataRecord数据集的对象 //c为o对象运行时类
public MRDataSet objcetToDataRecord(HttpServletRequest request, Object o,Class c) throws Exception { DataRecord rec = new DataRecord(); MRDataSet mrds = new MRDataSet(); BeanInfo beanInfo = Introspector.getBeanInfo(c); PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor descriptor : descriptors) { Method method = descriptor.getReadMethod(); Object obj = method.invoke(o, new Object[] {});
rec.setValue(descriptor.getName().toUpperCase(), obj); } mrds.addRow(rec); return mrds; }
3. 如果从数据库从数据库查询出来的数据被封装成了一个对象集合,并返回。报表并不支持集合
显示数据,以下方法可以将该集合转换成含有DataRecord数据集的集合:
//list为需要转换的集合 // 为o对象运行时类
public List
obj); }
Object obj = method.invoke(o, new Object[] {}); rec.setValue(descriptor.getName().toUpperCase(),
} ary.add(rec); }
return ary;
4. 有时候我们需要一些空记录,以下方法是创建一个包含n条空记录的数据集: public ArrayList createEmptyDataRecord(int n){ ArrayList ary = new ArrayList();
try{ DataRecord recs = new DataRecord(); for(int j=0;j } ary.add(recs); } }catch(Exception e){ e.printStackTrace(); } return ary; } 5. 如果从数据库取出来的记录中包含图片,那么我们需要将该图片转换成MRDataSet然后 才能在表报中显示出来,以下方法可以转换: public MRDataSet getBlobDataFromFiles(XMLGraph xmlGraph) throws Exception { MRDataSet mrds = new MRDataSet(); DataRecord[] recs = new DataRecord[1]; recs[0] = new DataRecord(); recs[0].setValue(\, xmlGraph.getGraph()); return mrds; } 注:在编辑报表的时候要使用图片控件 报表设计器的使用 数据源操作 新增数据源 添加一个数据源。执行该操作后,左侧树列表中会增加一个数据源节点,并在该节点下增加一个“数据集”节点。数据源包括两个属性:数据源名称和连接串。添加数据源后,数据源的名称缺省为空,必须为该数据源命名后才能正确保存。连接串的设置参见设置连接串。 ? 菜单项【数据?新建数据源】; ? 【项目树中数据节点上按右键快捷菜单?新建数据源】; 连接数据源 按定义的连接串连接到数据库。可视化控制:未指定连接串时不可用;已连接后不可用;其他可用。 ? 菜单项【数据?连接数据源】; ? 【项目树中对应数据源节点上按右键快捷菜单?连接数据源】; 断开数据源连接。 断开数据源连接。 属于该数据源的所有数据集都会被关闭。可视化控制:已连接后可用;其他不可用。 ? 菜单项【数据?断开数据源】; ? 【项目树中对应数据源节点上按右键快捷菜单?断开数据源】; 数据集操作 新建数据集 添加新的数据集。执行该操作后,左侧项目树列表中会在当前数据源下增加一个数据集节点。数据集包括以下属性: 数据源名称:指示数据集所属数据源,只读; 数据集名称:名称缺省为空,必须为该数据集命名后才能正确保存; 类型:可选择表、SQL、存储过程、XML ①“表”:从单个数据库表中获取数据,参见选择数据表; ②“SQL”:使用SQL查询语句获取数据,参见设置SQL语句; ③“存储过程”:使用存储过程以及参数来获取数据,参见设置存储过程; ④“XML”:从XML文件获取数据,参见设置XML文件。 注意:数据集的名称只能包含字符(A-z,0-9),且必须以英文字母开头,长度不超过255。 ? 菜单项【数据?新建数据集】; ? 【项目树中数据(集)节点上按右键快捷菜单?新建数据集】 打开数据集 打开数据集,从数据源获取数据;如果数据源未连接会自动连接。执行此操作会自动切换到数据标签,用来查看数据。数据是只读的,不能被修改。 ? 菜单项【数据?打开数据集】; ? 【项目树中数据集节点上按右键快捷菜单?打开数据集】 刷新数据集 当前数据集打开时,刷新当前数据集的数据。 菜单【项目树中数据集节点上按右键快捷菜单?刷新数据集】 关闭数据集 当前数据集打开时,关闭当前数据集。 ? 菜单项【数据?关闭数据集】 ? 【项目树中数据集节点上按右键快捷菜单?关闭数据集】 选择数据集 当数据集类型是“表”时,数据集的属性列表中会出现“表”属性,可使用鼠标或Alt+↓打开下拉列表,该列表中会显示当前数据源所连数据库中可访问的表和视图,选择其中一个作为当前数据集所对应的数据表,数据集的名称会自动改为所选择的数据表或视图的名称。 设置SQL语句 当数据集类型是“SQL”时,数据集的属性列表中会出现“SQL”属性,可使用鼠标双击或点击…按钮打开“SQL编辑器”,在SQL编辑器中可以输入或者粘贴SQL查询脚本。 “语法检查”按钮可用来对当前的SQL脚本进行语法检查;点击“确认”按钮,返回主界面。 设置存储过程 当数据集类型是“存储过程”时,数据集的属性列表中会出现“存储过程”属性,可使用鼠标双击或点击…按钮打开“存储过程参数”对话框,在该对话框左侧的列表中列出了当前数据源连接的数据库中所有可访问的存储过程,在列表中选择一个存储过程时,右侧列表会列出这个存储过程的所有输入参数,在这里必须为每个参数填写适当的值,该存储过程才能够被正确打开。点击“确定”保存当前设置并返回主界面;“取消”放弃并返回主界面。 设置XML文件 当数据集类型是“XML”时,数据集的属性列表中会出现“XML”属性,可使用鼠标双击或点击 “…”按钮打开“打开”文件对话框,在该对话框选择一个XML文件作为当前数据集的数据。 注意:这个XML文件必须是使用设计器的导出XML文件数据功能导出的XML文件,其他格式的XML文件将不能被识别。 选择关系主表 选择与当前数据集有主/从关系的主表。当数据之间存在主/从关系时,如类似“单据”和“明细”这样数据,可以通过选择关联主表和设置关联字段来在数据集之间建立主/从关联关系。主从关系建立好后,从表中就只显示和主表当前记录相关的数据。在数据集“主表”编辑区使用鼠标或Alt+↓可以打开下拉列表,在该列表中列出了可以作为当前数据集的主表的数据集名称,选择其中一个作为当前数据集的关联主表。设置好主表后,必须同时设置关联字段,主从关联关系才能被正确建立。 设置关键字段 设置主/从关系的对应字段。如果为当前数据集指定了关联主表,可使用鼠标双击或点击…按钮打开“关联”对话框,在该对话框的“主表字段”列表中,列出了主表的所有字段;“从表字段”列这中列出了当前数据集的所有字段。分别系从这两个列表中选择适当的字段,然后点击“联接”按钮,在这两个字段之间建立联接关系,这个关系将会已FieldA=FieldB的形式被添加到对话框下方的“连接字段”列表中;如果多于一对字段需要建立联结,再次选择字段,并点击“联接”按钮,直到所有关联字段均已处理。点击“重置”会清除已经定义的联接;点击“确认”保存当前设置并返回主界面;点击“取消”放弃设置并返回主界面。 设置索引字段 设置当前数据集的索引排序字段。可以使用分号“;”分隔的字段名称来指定当前数据集的排序字段。排序优先顺序按字段名称在当前设置中的出现的位置先后为准。排序缺省为升序排序,设置降序排序需要在排序字段后面加\和字段间用空格隔开。 注意:当设置了主从关联后,对这个属性将使用关联设置的结果,对该属性的修改都将无效。 导入XML数据集 从磁盘上的XML数据文件创建数据集。该功能会打开一个“打开”文件对话框,在对话框内可以选择一个或多个XML文件,点击该对话框的“打开”按钮后,会在当前数据源下建立以XML文件名命名的数据集,该数据集的数据来自对应XML数据文件。如果同名的数据集已经存在,则该文件的导入不会成功,系统会弹出消息对话框显示未成功的文件名称。 导出XML数据集 将选中数据集的数据导出至磁盘XML文件。该功能会打开一个“浏览文件夹”对话框,使用该对话框选择一个目录用来存放导出的XML文件。可以对多个数据集同时执行该操作,在左侧对象树列表中选择“数据集”节点,在右侧的列表中可以使用鼠标拖动、Shift+鼠标点击、Ctrl++鼠标点击来选择多个数据集。导出的文件名称使用数据集名称加.xml文件后缀名,这些XML文件可以用于在设置XML文件功能中指定数据集的XML数据文件,或用来导入XML文件数据集。 转换为XML数据集 如果当前数据集是数据库的表、视图、SQL语句或存储过程等非XML文件格式的数据集,那么可以通过这个功能直接将当前的数据集转换为XML格式的数据集。 创建和编辑报表 新建报表文件夹 新建一个报表文件夹,文件夹的含义与文件系统文件夹的含义类似。项目树列表的“报表”节点代表根目录“/”。可以选中项目树的“报表”节点在根目录下新建文件夹;也可以选中某一文件夹节点在文件夹下面新建文件夹,文件夹对象只有一个报表名称属性,文件夹对象的命名规范应符合文件系统的文件夹命名约束; ? 菜单项【报表?新建文件夹】