灵活报表web展现用户手册.docx
《灵活报表web展现用户手册.docx》由会员分享,可在线阅读,更多相关《灵活报表web展现用户手册.docx(18页珍藏版)》请在冰豆网上搜索。
灵活报表web展现用户手册
灵活报表web展现
用户手册
编号:
版本号:
1.0
作者:
李向阳
时间:
2003年6月27日
山东浪潮齐鲁软件产业股份有限公司
文档修订
修订历史记录
序号
版本号
作者
提交日期
变更内容
变更原因
1.
1.0
李向阳
2003-6-27
始建
2.
1.0
姚新明
2003-7-1
修改
修改部分说明
修订历史记录说明
目的
记录文档的修改记录,同时明确告诉变更的内容
作者
本次修改人
变更内容
简单的描述本次变更内容,同时用蓝色标记近期变更的内容。
变更原因
说明本次变更的原因
编码人
修改、编写程序的人员签字及时间
测试人
根据需求说明,进行测试,当前由编码人员自己指定。
发布人
测试人员签字的通过之后,发布人签字、时间。
目录
1概述4
1.1相关文档4
2界面4
1.2用户使用界面4
3报表使用说明:
5
1.3报表配置文件5
1.3.1报表配置文件说明5
1.3.2已经实现的功能8
1.4服务器配置更改9
1.5Command取数据的变化9
1.6Jsp的变化9
1.7cll文件的变化9
1.8如何开发9
1.9报表实例10
1.9.1XML配置10
1.9.2Command10
1.9.3web展现的jsp:
12
1.10事项13
1概述
灵活报表web展现主要实现报表样式的定义和报表在html中的展现,客户端采用cell控件。
报表分类:
1.动态报表
a)列固定,行不固定
b)列动态增长,行不固定
2.固定报表
c)列固定,行固定
本次只改进a类报表
1.1相关文档
灵活报表_设计_web展现.doc
2界面
1.2用户使用界面
用户所看到的a类报表如下图:
界面的主要元素为:
1.表头
2.表体
3.表尾
要实现的主要功能为:
1.数据显示
2.表头单元格合并
3.行列锁定
4.小计,合计,计算列
5.排序
3报表使用说明:
1.3报表配置文件
1.3.1报表配置文件说明
报表配置文件reports.xml默认存放在WEB-INF\conf\report目录下,其内容如下所示:
xmlversion="1.0"encoding="gb2312"?
>
同其他配置文件相同,可以将报表的格式配置存放在多个文件中,只要在reports.xml包含该文件即可,每一个文件的内容类似,见附件reportsbases.xml。
xml文件大小写敏感,是遵照java属性的命名规范,第一个字母小写,后面单词第一个字母大写。
节点说明:
名称
说明
Report
报表
ReportHead
报表头,由Row组成
Row
报表一行,由Cell组成
Cell
报表单元格
ReportDetail
报表的主体,由Col组成
Col
报表主体的一列
ReportTail
报表尾
节点属性说明:
属性
默认值
必需
类型
描述
id
true
数字
与formatNum组成报表的唯一号
formatNum
true
数字
格式编号,与id组成报表的唯一号
dataSourceType
""
字符串
暂时不使用
fileUrl
""
字符串
画报表的cll文件名,暂不使用
description
""
字符串
Report节点的中文名称,暂不使用
name
""
字符串
Report节点的名称,暂不使用
reportType
""
true
数字
报表类型,1为行动态增长列固定的报表
subTotalCol
"1"
数字
当有小计时候,第“subTotalCol“列填写“小计:
”
sumTotalCol
"1"
数字
当有合计时候,第“sumTotalCol“列填写“合计:
”
fixedCol
"0"
数字
第一列到第”fixedCol”列固定
属性
默认值
必需
类型
描述
drawLineRow
"0"
数字
报表列名的级数,表头需要画表格线的行数
Row
Row
报表头由Row组成
|
属性
默认值
必需
类型
描述
rowHeight
"20"
数字
行高
name
""
字符串
暂时不使用
Cell
Cell
报表行由Cell组成
|
属性
默认值
必需
类型
描述
name
“”
字符串
暂时不使用
modify
"false"
布尔型
该cell是否允许修改(暂未实现)
colSpan
"1"
数字
列跨度
rowSpan
"1"
数字
行跨度
type
“”
true
字符串
有label、mixed、input三种取值,label表示字符串值,字符串取属性value中存放的值。
input表示从集合键值映射中取值,键值即为Property中的值;mixed则以键值映射中的值代替value中的#从而显示出来
align
"36"
数字
单元格对齐方式
fontSize
"12"
数字
字体大小
fontStyle
"0"
数字
字体风格
color
0x000000
数字
字体颜色
value
“”
字符串
取值为mixed,则value不能为空
property
“”
字符串
取值为input,mixed,则property不能为空
属性
默认值
必需
类型
描述
ifSubTotal
"false"
布尔型
是否要小计
orderby
""
字符串
小计的分组依据
ifSumTotal
"false"
布尔型
是否要合计
sortCols
""
以逗号分割的数字
可排序的列号(“3,4,5“则表示第3,第4,第5列可排序,双击表头则会排序)
rowHeight
"20"
数字
行高
Col
Col
属性
默认值
必需
类型
描述
name
""
字符串
暂时不使用
colSeq
""
数字
列的序号(暂时不使用)
colWidth
"100"
数字
列的宽度
ifColHidden
"false"
布尔型
该列是否隐藏(暂未实现)
type
“”
true
字符串
identity表示列值自动增长、input、mixed(暂未实现)、label同cell节点、formula表示计算公式
dataType
"String"
字符串
该列的数据类型Double,Currency,String
format
""
数字#字符
如果数值类型为double型,小数点的位数和千位的分隔符;dataType为Double时,不能为空,cll只提供逗号空格两种分隔符
align
"36"
数字
该列对齐方式
fontSize
"12"
数字
字体大小
fontStyle
"0"
数字
字体风格
color
"0x000000"
数字
字体颜色
value
""
字符串
type取值为mixed,不能为空
property
""
字符串
type取值为input,mixed,不能为空
subTotalCol
"false"
布尔型
该列是否小计
sumTotalCol
"false"
布尔型
该列是否合计
sortCol
"false"
布尔型
暂时不使用
calFormula
""
字符串
在type=’formula’时的计算公式,取值为formula,不能为空
ifConVert
"false"
布尔型
该列是否可以进行单位转换(暂未实现)
enumeratation
“”
字符串
单位转换的枚举(暂未实现)
1.3.2已经实现的功能
一个报表可以定义多种格式。
可以设定报表名称、列名称、表头、表尾、表体文字的大小,设定单元格对其方式,颜色,风格。
可以设定固定行列,固定列需要指定,表头所占行固定。
可以设置每一行的行高。
能够实现小计、合计。
由于在画表格线时,表头中列名需要画线,所以要指定需要画线的行数。
可以实现表头表尾单元格的合并。
对Cell,已经实现type为label,mixed,input的功能。
对Col,已经实现type为input、identity、formula功能。
可以实现在报表展现之后按某列排序,如果某列数据类型为数值型,可以设定小数位数和千分位的分隔符。
1.4服务器配置更改
1.在services.properties文件中添加如下内容:
#报表服务
services.ReportService.classname=com.loushang.util.service.report.OurReportService
services.ReportService.earlyInit=true
2.报表配置文件的默认路径为/WEB-INF/conf/report/
默认文件名为reports.xml
如果要修改配置文件路径为/WEB-INF/conf/
修改文件名为report.xml
则在services.properties添加如下内容:
services.ReportService.reportsPath=/WEB-INF/conf/
services.ReportService.reportsFile=report.xml
1.5Command取数据的变化
以前的command都是把查询条件放入request中。
根据查询条件从数据库中取出的数据放入ArrayList或Vector,再放入request中。
,在jsp页面取得查询条件和数据库的值,通过jsp、script和Cell脚本来控制其显示格式。
现在要把表头、表体、表尾的数据均放入ReportData中,其参数为Object,List,Object。
第一个参数和第三个参数分别存放表头和表尾的数据,必须要实现Map接口,一般为HashMap或Hashtable。
第二个参数存放表体的数据,必须要实现List接口,一般为ArrayList和Vector。
ReportDatadata=newReportData(head,ret,trail);再把ReportData放入request中。
在页面从request中取到数据,以一定格式展现。
可以把报表的唯一标志号放入查询页面,在command取到后再放入request中,在展示页面获取调用。
1.6Jsp的变化
现在所有的报表共用一个Web展示的Jsp页面,该jsp页面从request中取得报表数据,通过报表id和formatNum得到一个报表对象,然后调用报表对象的getCellHTML得到报表展示的Script脚本。
通过out.println在页面上打出来。
1.7cll文件的变化
由于Cell制造商没有放开是否显示不滚动区域分割线和是否隐藏背景网格线的接口,而我们的报表一般不显示滚动区域分割线,所以需要一个cll文件,该文件不显示滚动区域分割线。
所有的报表共用这个cll文件,该文件是一个空的cll文件。
1.8如何开发
现在灵活报表只进行了Web展现的开发,Command与查询页面还没有作大的改进。
现在可以在查询页面提供查询条件和报表的唯一号,然后在Command中把表头表尾的数据和数据库的数据均放入ReportData。
如果修改了报表的xml配置,则刷新资源即可。
1.9报表实例
客户销售统计表:
1.9.1XML配置
见reportsbase.xml
报表唯一号为01003000,为列固定,行动态增长的报表。
表名为客户销售统计表,占4列。
表列名的级数为1。
查询条件为销售部门和统计日期,根据键值DPT_SALE_NAME,START_DATE,END_DATE,从Map中取得。
列名分别为客户名称、购货卡号、实销数量、实销金额,数据类型分别为String,String,Double,Double,
如果为Double类型,则保存两位小数,千分位用逗号分割。
根据键值CUST_NAME,PURCH_CARD_ID,QTY_SOLD,AMT_SOLD从List中的Map集合中取得。
表尾为制表人和制表日期,根据键值userName,date,从Map中取得。
1.9.2Command
以前的Command:
UserLoginInfouser=
(UserLoginInfo)request.getSession().getAttribute("UserLoginInfo");
StringCom_id=user.getUserDefault().getComId();
//从页面上取得查询条件
Stringstart_date=request.getParameter("BEGIN_DATE");
request.setAttribute("START_DATE",start_date);
Stringend_date=request.getParameter("END_DATE");
request.setAttribute("END_DATE",end_date);
Stringcust_id=request.getParameter("CUST_ID");
if(cust_id==null||cust_id.equals(""))
{
request.setAttribute("CUST_NAME","所有客户");
}
else
{
Stringcust_name=(String)getCustName(cust_id,Com_id);
request.setAttribute("CUST_NAME",cust_name);
}
Stringdpt_sale_id=request.getParameter("DPT_SALE_ID");
if(dpt_sale_id==null||dpt_sale_id.equals(""))
{
Stringdpt_sale_name="所有销售部门";
request.setAttribute("DPT_SALE_NAME",dpt_sale_name);
}
else
{
Stringdpt_sale_name=getDptSaleName(dpt_sale_id,Com_id);
request.setAttribute("DPT_SALE_NAME",dpt_sale_name);
}
Stringpuh_card_id=request.getParameter("PUH_CARD_ID");
//从数据库中取得结果集放入Vector,再放入request中
Vectorret=
getCondition(start_date,end_date,Com_id,dpt_sale_id,cust_id,puh_card_id,request);
request.setAttribute("TEMP",ret);
现在的Command:
UserLoginInfouser=
(UserLoginInfo)request.getSession().getAttribute("UserLoginInfo");
StringCom_id=user.getUserDefault().getComId();
//声明HashMap对象,查询条件放入HashMap;
HashMaphead=newHashMap();
Stringstart_date=request.getParameter("BEGIN_DATE");
head.put("START_DATE",start_date);
Stringend_date=request.getParameter("END_DATE");
head.put("END_DATE",end_date);
Stringcust_id=request.getParameter("CUST_ID");
if(cust_id==null||cust_id.equals(""))
{
head.put("CUST_NAME","所有客户");
}
else
{
Stringcust_name=(String)getCustName(cust_id,Com_id);
head.put("CUST_NAME",cust_name);
}
Stringdpt_sale_id=request.getParameter("DPT_SALE_ID");
if(dpt_sale_id==null||dpt_sale_id.equals(""))
{
Stringdpt_sale_name="所有销售部门";
head.put("DPT_SALE_NAME",dpt_sale_name);
}
else
{
Stringdpt_sale_name=getDptSaleName(dpt_sale_id,Com_id);
head.put("DPT_SALE_NAME",dpt_sale_name);
}
Stringpuh_card_id=request.getParameter("PUH_CARD_ID");
Vectorret=
getCondition(start_date,end_date,Com_id,dpt_sale_id,cust_id,puh_card_id,request);
//声明HashMap对象,制表人制表日期放入HashMap
HashMaptrail=newHashMap();
trail.put("userName",user.getUserName());
trail.put("date",user.getDate());
ReportDatadata=newReportData(head,ret,trail);
request.setAttribute(Contants.REPORTDATA,data);
request.setAttribute((Contants.KEY_REPORTID,”0300000”);
1.9.3web展现的jsp:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@tagliburi="/zhnt/tlds/zhnt.tld"prefix="zhnt"%>
<%@pageimport="com.lc.rpt.base.report.*"%>
useBeanid="UserLoginInfo"type="com.lc.base.permit.user.data.UserLoginInfo"scope="session"/>
if(DCellWeb1.Login("浪潮齐鲁软件","","13040257","5000-1207-7711-6004")==0)
{
alert("注册失败!
");
}
varfilename="jsppath/>";
filename=filename+"report/common.cll";
varresult=DCellWeb1.OpenFile(filename,"");
if(result!
=1){
alert("打开文件错误");
}
<%
try{
ReportInfoManagerreportInfoManager=ReportInfoManager.getInstance();
StringreportId=request.GetAttribute(Contants.KEY_REPORTID);
BaseReportreport=reportInfoManager.getReportByid(reportId);
ReportDatadata=(ReportData)request.getSession().getAttribute(Contants.KEY_REPORTDATA);
out.print(report.getCellHTML(data));
}catch(Exceptionex){
thrownewJspException(ex.getMessage());
}
%>
//设置允许自动折行,由于报表格式设置了行高,没有设置最合适行高
varheight;
for(m=1;m<=DCellWeb1.getRows(0);m++){
for(n=1;n<=DCellWeb1.getCols(0);n++){
DCellWeb1.SetCellTextStyle(n,m,0,2);
}
}
document.getElementById("Msg").style.display="none";
document.getElementByI