EOS
报表集成开发应用
【概述】
在EOS中开发一个报表应用的流程为:
1. 新建项目。
创建一个引用EOS报表构件包的项目。引用该构件包后,即可在此项目上创建报表模板,以及调用报表运算逻辑。用户也可以现有项目上添加引用报表构件包。
2. 创建报表模板。
o 确定数据库的连接方式。
o 在报表模板中定制数据的汇总、统计。
o 确定最终显示样式。
3. 开发JSP,展现逻辑,业务逻辑。
实现数据的提取、显示、打印、导出等功能。
4. 调试发布。
【开发报表的分类】
1. 根据调用位置的不同,调用EOS报表的方式有两种:
o 在JSP页面上调用tag。
o 在业务逻辑中调用EOS报表的运算逻辑。
2. 根据数据库的连接方式分为:
o JDBC/XML数据源。
o EOS数据源。
【示例】
一般情况下,报表都是一组有条件的查询结果,下面将用四个示例分别介绍针对同一需求的四种不同开发方式。
用户需求如下:
查询现有系统中的用户角色和用户信息,以报表的形式展示出某些角色所对应的用户名和用户ID。既可以查询某一角色对应的用户信息,也可以查询所有角色对应的用户信息,并可以将查询结果打印或导出到EXCEL中。
案例分析:
1. 查询要求
o 要求实现条件查询,条件为角色。
o 分组显示,按角色分组。
o 可以以html,applet,excel格式返回结果集。
2. 实现要点
o 需要创建条件查询页面,做为用户查看报表的入口,在该页面需要实现:选择角色、选择结果的显示格式。
o 需要实现分组显示,该功能在报表模板中实现。
o 需要设定显示格式,该功能在结果页面完成。
o 数据的提取可以由结果页面直接调用报表模板实现,也可以由后台调用“展现逻辑+业务逻辑”的方式实现。
3. 表结构和数据显示
以下关联的三个表均为eos的系统表。
查询SQL语句如下:
select
o.userid,o.operatorname,r.rolename
from
EOSOPERATOR o,
EOSOPERATORROLE eor,
EOSROLE r
where
o.operatorid=eor.operatorid and
eor.roleid=r.roleid and
r.rolename like '%'
order by r.rolename
[图-查询SQL]
4. 实现结果展示
o 查询条件页面
[图-查询条件页面]
o 查询结果页面
[图-查询结果页面]
EOS报表应用开发示例一
【实现方式】
在JSP页面上调用Tag运行报表,数据源采用EOS数据源方式。
【实现概述】
1. 按照需求设计报表模板。
o 路径和名称:demo.report.eosRoleUser.erd
o 功能:设置数据源、数据显示方式和样式。
2. 编写查询条件页面。
o 路径和名称:/demo/page/tagEosInput.jsp
o 功能:设置查询条件。
3. 编写查询展现逻辑。
o 路径和名称:demo.pr.tagEos
o 功能:调用查询数据的业务逻辑,并控制结果返回页面。
4. 编写查询业务逻辑。
o 路径和名称:demo.biz.tagEos
o 功能:根据查询页面传入的查询条件,取出查询结果,并返回到展现逻辑。
5. 编写查询结果页面。
o 路径和名称:/demo/page/tagEosOutput.jsp
o 功能:得到展现逻辑传入的结果数据,按查询条件页面设定的显示格式显示数据。
【实现步骤】
1. 创建项目
参见联机帮助中的“创建EOS基础项目”。项目创建完成后,新建“demo”构件包,参见“创建EOS构件包”。
设置引用构件包时,必须引用EOS报表引用构件包。
项目名称应根据项目的定义确定,特别是在多人协作开发模式下,统一命名是协作成功的关键。
2. 设计报表模板
demo.report.eosRoleUser
3. 编写查询条件页面
tagEosInput.jsp文件内容如下:
1 <%@include file="/internet/hciHead.jsp"%>
2 <table border="0" cellspacing="1" cellpadding="1" class="query" align="center">
3
4 <form name="queryForm" action="demo.pr.tagEos.do">
5 <input type="hidden" name ="RoleUser/ROLENAME/criteria/operator" value="like"/>
6
7 <table border="0" cellspacing="1" cellpadding="1" class="query" align="center">
8 <tr>
9 <TD>显示格式:</TD>
10 <TD><SELECT name="reportFormat">
11 <OPTION value="html">html</OPTION>
12 <OPTION value="eosrdf">Applet</OPTION>
13 <OPTION value="xls">Excel</OPTION>
14 </SELECT>
15
16 </TD>
17 <TD>查询角色:
18 <input name="RoleUser/ROLENAME/criteria/value" value="" size=30 />
19 </TD>
20 <TD align="center"><input type="submit" value="查询"></TD>
21 </tr>
22 </table>
24 </form>
25 <%@include file="/internet/hciTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第5行的“RoleUser/ROLENAME/criteria/operator”为隐含域,查询条件ROLENAME字段的数据库操作方式,当前值为like。参见“EOS 构件库参考手册”中的“EOS Data Service基本概念”。
第10行的“reportFormat”控制选择结果的展现形式,可选项包括html、Applet、Excel。
第18行的“RoleUser/ROLENAME/criteria/value”为文本框,查询条件ROLENAME字段的条件值。
4. 编写查询展现逻辑
创建展现逻辑demo.pr.tagEos,如下图所示。
[图-编写展现逻辑]
调用的业务逻辑“显示名称”为“查询”,“BizLogic名称”为“demo.biz.tagEos”,如下图所示。
[图-展现逻辑调用业务逻辑基本信息]
调用的业务逻辑参数定义中,“节点路径”为“RoleUser”,“输入输出”为“输入路径”,“节点类型”为“EOS Entity”,如下图所示。
[图-展现逻辑调用业务逻辑参数定义]
调用的JSP页面“显示名称”为“返回结果集”,“返回页面名称”为“/demo/page/tagEosOutput.jsp”,如下图所示。
[图-展现逻辑调用JSP页面]
5. 编写查询业务逻辑
创建业务逻辑demo.biz.tagEos,如下图所示。
[图-编写业务逻辑]
调用的运算逻辑“显示名称”为“查询角色列表”,“Bizlet方法名称”为“com.primeton.eos.bizlets.database.DataQueryExt.BL_queryEntityAllExt”,如下图所示。
[图-业务逻辑调用运算逻辑基本信息]
调用的运算逻辑参数定义如下图所示。
[图-业务逻辑调用运算逻辑参数定义]
开始图元的接口定义如下图所示。
[图-业务逻辑开始图元接口定义]
6. 编写查询结果页面
tagEosOutput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <%@ taglib uri="/WEB-INF/report.tld" prefix="report" %>
3 <link rel="stylesheet" href="/pageComponent/resources/theme/style.css" type="text/css">
4
5 <%
6 String format = request.getParameter("reportFormat");
7 if ( format==null || format.trim().length() == 0 )
8 format = "html";
9 %>
10
11 <table align="center" width="100%" height="100%">
12 <tr>
13 <td align="center" >
14
15 <report:generateAndShow reportQualifiedName="demo.report.eosRoleUser" reportFormat="<%=format%>"/>
16
17 </td>
18 </tr>
19 </table>
20
21 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第2行在JSP文件中使用report标签库,必须在jsp文件起始部分加上声明。
第5行至第9行:从HTTP请求中获取用户选择的报表显示格式。
第15行 调用报表标签report:generateAndShow 运行报表、并在客户端显示报表,reportQualifiedName指定要运行的报表是“demo.report.eosRoleUser”,reportFormat指定报表的显示格式是从“format”变量中获取,客户端显示报表的方式与报表的显示格式相关。关于generateAndShow标签的详细说明参见Tag使用说明。
【运行示例】
以sysadmin身份登录http://localhost:8080/,然后在地址栏输入http://localhost:8080/forward.do?nextPage=/demo/page/tagEosInput.jsp,即可测试报表。
【参数传递】
1. 查询条件页面提交时传出的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<requestPackage>demo</requestPackage>
<requestAction>pr.tagEos</requestAction>
<serverName>localhost</serverName>
<serverPort>8080</serverPort>
<requestURI>/demo.pr.tagEos.do</requestURI>
<queryString>RoleUser%2FROLENAME%2Fcriteria%2Foperator=like&reportFormat=html&RoleUser%2FROLENAME%2Fcriteria%2Fvalue=%BD%C7%C9%AB</queryString>
<reportFormat>html</reportFormat>
<RoleUser>
<ROLENAME>
<criteria>
<value>角色</value>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
</data>
</root>
以上XML文件中,reportFormat节点和RoleUser节点为页面提交时,输入的数据。
reportFormat节点,控制显示样式。
RoleUser/ROLENAME/criteria/value节点为查询条件值。
RoleUser/ROLENAME/criteria/operator节点为查询条件的查询方式。
2. 展现逻辑传给业务逻辑的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<RoleUser>
<ROLENAME>
<criteria>
<value>角色</value>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
</data>
</root>
以上XML文件中,展现逻辑只将RoleUser节点下的数据传入了业务逻辑,作为从数据库取值的条件。
3. 经过业务逻辑运算后输出的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<requestPackage>demo</requestPackage>
<requestAction>pr.tagEos</requestAction>
<serverName>localhost</serverName>
<serverPort>8080</serverPort>
<requestURI>/demo.pr.tagEos.do</requestURI>
<queryString>RoleUser%2FROLENAME%2Fcriteria%2Foperator=like&reportFormat=html&RoleUser%2FROLENAME%2Fcriteria%2Fvalue=%BD%C7%C9%AB</queryString>
<reportFormat>html</reportFormat>
<RoleUser>
<ROLENAME>
<criteria>
<value>角色</value>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
<return>
<code>1</code>
</return>
<list type="RoleUser" rowNum="9">
<RoleUser rowNum="0">
<ROLENAME>角色A</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="1">
<ROLENAME>角色B</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="2">
<ROLENAME>角色B</ROLENAME>
<USERID>goose</USERID>
<OPERATORNAME>goose</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="3">
<ROLENAME>角色B</ROLENAME>
<USERID>fish</USERID>
<OPERATORNAME>fish</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="4">
<ROLENAME>角色C</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="5">
<ROLENAME>角色C</ROLENAME>
<USERID>fish</USERID>
<OPERATORNAME>fish</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="6">
<ROLENAME>角色C</ROLENAME>
<USERID>snoppy</USERID>
<OPERATORNAME>snoppy</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="7">
<ROLENAME>角色C</ROLENAME>
<USERID>micky</USERID>
<OPERATORNAME>micky</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="8">
<ROLENAME>角色C</ROLENAME>
<USERID>kitty</USERID>
<OPERATORNAME>kitty</OPERATORNAME>
</RoleUser>
</list>
</data>
</root>
以上XML文件中,list节点下的数据即业务逻辑计算后返回的数据,也就是最终传给报表模板的eos数据源数据。报表引擎会从该节点下获取数据、运行报表eosRoleUser.erd。
EOS报表应用开发示例二
【实现方式】
在JSP页面上调用Tag运行报表,数据源采用JDBC数据源方式。
【实现概述】
1. 按照需求设计报表模板。
o 路径和名称:demo.report.JDBCRoleUser.erd
o 功能:设置数据源、数据显示方式和样式。模板里需要加入报表参数作为查询条件。
2. 编写查询条件页面。
o 路径和名称:/demo/page/tagJdbcInput.jsp
o 功能:确定显示类型和查询条件。
3. 编写查询结果页面。
o 路径和名称:/demo/page/tagJdbcOutput.jsp
o 功能:显示或输出结果集。
【实现步骤】
1. 创建项目
参见联机帮助中的“创建EOS基础项目”。项目创建完成后,新建“demo”构件包,参见“创建EOS构件包”。
设置引用构件包时,必须引用EOS报表引用构件包。
项目名称应根据项目的定义确定,特别是在多人协作开发模式下,统一命名是协作成功的关键。
2. 设计报表模板
demo.report.JDBCRoleUser
3. 编写查询条件页面
tagJdbcInput.jsp文件内容如下:
1<%@include file="/internet/hciHead.jsp"%>
2<form action="forward.do?nextPage=/demo/page/tagJdbcOutput.jsp" name="queryForm" method="post">
3 <table border="0" cellspacing="1" cellpadding="1" class="query" align="center">
4 <tr>
5 <TD>显示类型:
6 <SELECT name="reportFormat">
7 <OPTION value="html">html</OPTION>
8 <OPTION value="eosrdf">Applet</OPTION>
9 <OPTION value="xls">Excel</OPTION>
10 </SELECT>
11 </TD>
12 <TD>查询角色:
13 <input name="roleName" value="" size=30 /></TD>
14 <TD align="center"><input type="submit" value="查询"></TD>
15 </tr>
16 </table>
17</form>
18<%@include file="/internet/hciTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第2行form属性action="forward.do?nextPage=/demo/page/tagJdbcOutput.jsp" method="post",作用是在form提交时,直接跳转到tagJdbcOutput.jsp页面。
4. 编写查询结果页面
tagJdbcOutput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <%@ taglib uri="/WEB-INF/report.tld" prefix="report" %>
3 <link rel="stylesheet" href="/pageComponent/resources/theme/style.css" type="text/css">
4 <%
5 String format = request.getParameter("reportFormat");
6 String roleName = request.getParameter("roleName")+"%"; //为用户的角色名称增加"%",使该报表参数支持模糊查询. 7 if ( format==null || format.trim().length() == 0 )
8 format = "html";
9 %>
10 <table align="center" width="100%" height="100%">
11 <tr>
12 <td align="center" >
13 <report:generateAndShow reportQualifiedName="demo.report.JDBCRoleUser" reportFormat="<%=format%>">
14 <report:parameter name="rolename" value="<%=roleName %>" />
15 </report:generateAndShow>
16 </td>
17 </tr>
18 </table>
19 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第5行 获取用户选择的报表显示方式。
第6行 获取用户输入的查询角色名称。
第13行 调用报表标签report:generateAndShow运行报表“demo.report.JDBCRoleUser”,需要的报表显示格式从变量“format”中获取。当报表设计文件中定义了报表参数时,需要嵌入report:parameter来为报表参数赋值。
第14行 当报表设计文件中定义了报表参数时,通过嵌入的report:parameter标签来报表参数赋值,有多个报表参数时,就使用多个report:parameter标签。name为报表参数名称,需要与报表设计文件中的报表参数名称一致;value为报表参数的值,此例中从变量“roleName”中获取。
【运行示例】
以sysadmin身份登录http://localhost:8080/,然后在地址栏输入http://localhost:8080/forward.do?nextPage=/demo/page/tagJdbcInput.jsp,即可测试报表。
【参数传递】
查询条件页面提交时传出的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<requestPackage>demo</requestPackage>
<requestAction>pr.tagEos</requestAction>
<serverName>localhost</serverName>
<serverPort>8080</serverPort>
<requestURI>/demo.pr.tagEos.do</requestURI>
<queryString>RoleUser%2FROLENAME%2Fcriteria%2Foperator=like&reportFormat=html&RoleUser%2FROLENAME%2Fcriteria%2Fvalue=%BD%C7%C9%AB</queryString>
<reportFormat>html</reportFormat>
<roleName>角色</roleName>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
</data>
</root>
以上XML文件提交给了/demo/page/tagJdbcOutput.jsp页面。而/demo/page/tagJdbcOutput.jsp接收到该数据后,从HTTP请求中获取查询条件和显示格式,运行报表、并显示报表。
EOS报表应用开发示例三
【实现方式】
在业务逻辑中调用报表的运算逻辑运行报表,数据源采用EOS数据源方式。
【实现概述】
1. 按照需求设计报表模板。
o 路径和名称:demo.report.eosRoleUser.erd
o 功能:设置数据源、数据显示方式和样式。
2. 编写查询条件页面。
o 路径和名称:/demo/page/bizlitEosInput.jsp
o 功能:确定显示类型和查询条件。
3. 编写查询展现逻辑。
o 路径和名称:demo.pr.bizlitEos
o 功能:通过调用业务逻辑,获得报表数据,并返回给结果页面。
4. 编写查询业务逻辑。
o 路径和名称:demo.biz.bizlitEos
o 功能:根据查询页面传入的查询条件,取出查询结果,并返回到展现逻辑。
5. 编写查询结果页面。
o 路径和名称:/demo/page/bizlitOutput.jsp
o 功能:得到展现逻辑传入的结果数据,按查询条件页面设定的显示格式显示数据。
【实现步骤】
1. 创建项目
参见联机帮助中的“创建EOS基础项目”。项目创建完成后,新建“demo”构件包,参见“创建EOS构件包”。
设置引用构件包时,必须引用EOS报表引用构件包。
项目名称应根据项目的定义确定,特别是在多人协作开发模式下,统一命名是协作成功的关键。
2. 设计报表模板
demo.report.eosRoleUser
3. 编写查询条件页面
bizlitEosInput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <form action="demo.pr.bizletEos.do" name="queryForm">
3 <input type="hidden" name="RoleUser/ROLENAME/criteria/operator" value="like"/>
4 <input type="hidden" name="report/reportQualifiedName" value="demo.report.eosRoleUser"/>
5 <table border="0" cellspacing="1" cellpadding="1" class="query" align="center">
6 <tr>
7 <TD>显示类型:
8 <SELECT name="report/reportFormat">
9 <OPTION value="html">html</OPTION>
10 <OPTION value="eosrdf">Applet</OPTION>
11 <OPTION value="xls">Excel</OPTION>
12 </SELECT>
13 </TD>
14 <td>查询角色:
15 <input name="RoleUser/ROLENAME/criteria/value" value="" size=30 />
16 </td>
17 <td align="center"><input type="submit" value="查询"></td>
18 </tr>
19 </table>
20 </form>
21 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第2行 表单提交至demo.pr.bizletEos.do。
第3行 隐含域,BL_queryEntityAllExt要使用的查询操作符。
第4行 隐含域,要运行的报表全名为demo.report.eosRoleUser。
第8行 用户选择列表,报表的显示格式。
第15行 用户输入域,要查询的角色名称。
4. 编写查询展现逻辑
创建展现逻辑demo.pr.bizlitEos,如下图所示。
[图-编写展现逻辑]
调用的业务逻辑“显示名称”为“查询报表结果集”,“BizLogic名称”为“demo.biz.bizlitEos”,如下图所示。
[图-展现逻辑调用业务逻辑基本信息]
调用的业务逻辑参数定义如下图所示。
[图-展现逻辑调用业务逻辑参数定义]
调用的JSP页面“显示名称”为“显示结果页面”,“返回页面名称”为“/demo/page/bizlitOutput.jsp”,如下图所示。
[图-展现逻辑调用JSP页面]
5. 编写查询业务逻辑
创建业务逻辑demo.biz.bizlitEos,如下图所示。
[图-编写业务逻辑]
调用的运算逻辑“显示名称”为“查询角色列表”,“Bizlet方法名称”为“com.primeton.eos.bizlets.database.DataQueryExt.BL_queryEntityAllExt”,如下图所示。
[图-业务逻辑调用运算逻辑基本信息]
调用的运算逻辑参数定义如下图所示。
[图-业务逻辑调用运算逻辑参数定义]
调用的第2个运算逻辑“显示名称”为“从EOS数据总路线获取数据,运行报表”,“Bizlet方法名称”为“com.primeton.report.bizlet.ReportBizlets.BL_generateReport”,如下图所示。
[图-业务逻辑调用运算逻辑基本信息]
调用的运算逻辑参数定义如下图所示。
[图-业务逻辑调用运算逻辑参数定义]
开始图元的接口定义如下图所示。
[图-业务逻辑开始图元接口定义]
6. 编写查询结果页面
bizlitOutput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <%@ taglib uri="/WEB-INF/report.tld" prefix="report" %>
3 <link rel="stylesheet" href="/pageComponent/resources/theme/style.css" type="text/css">
4 <table align="center" width="100%" height="100%">
5 <tr>
6 <td align="center" >
7 <report:show domTaskInfo="taskInfo" closeTaskAndClear="true"/>
8 </td>
9 </tr>
10 </table>
11 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第7行 在用BL方法运行报表后,这里调用报表标签report:show在客户端显示报表。其中,参数domTaskInfo的值必须要与运行报表的BL_generateReport中的“taskInfo”参数的值一致,参数closeTaskAndClear="true"表明在显示报表后关闭报表会话。
【运行示例】
以sysadmin身份登录http://localhost:8080/,然后在地址栏输入http://localhost:8080/forward.do?nextPage=/demo/page/bizlitEosInput.jsp,即可测试报表。
【参数传递】
1. 查询条件页面提交时传出的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<requestPackage>demo</requestPackage>
<requestAction>pr.bizletEos</requestAction>
<serverName>localhost</serverName>
<serverPort>8080</serverPort>
<requestURI>/demo/page/demo.pr.bizletEos.do</requestURI>
<queryString>RoleUser%2FROLENAME%2Fcriteria%2Foperator=like&report%2FreportQualifiedName=demo.report.eosRoleUser&report%2FreportFormat=html&RoleUser%2FROLENAME%2Fcriteria%2Fvalue=</queryString>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.eosRoleUser</reportQualifiedName>
</report>
<RoleUser>
<ROLENAME>
<criteria>
<value/>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<refNum>0</refNum>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<userID>sysadmin</userID>
<operatorID>1</operatorID>
</SessionEntity>
</data>
</root>
以上XML文件中,report节点、reportFormat节点和RoleUser节点为页面提交数据。
1.report/reportQualifiedName:报表设计文件的全名。
2.report/reportFormat:报表的显示格式。
3.RoleUser/ROLENAME/criteria/value节点为查询条件值。
4.RoleUser/ROLENAME/criteria/operator 节点查询条件的查询方式。
2. 展现逻辑传给业务逻辑的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<RoleUser>
<ROLENAME>
<criteria>
<value/>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.eosRoleUser</reportQualifiedName>
</report>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
</data>
</root>
以上XML文件中,RoleUser节点和report节点为页面提交数据。
RoleUser节点下的数据为查询数据的输入信息。
report作为调用com.primeton.report.bizlet.ReportBizlets.BL_generateReport运算逻辑的参数。
3. 业务逻辑调用完com.primeton.report.bizlet.ReportBizlets.bl_execcuteReport运算逻辑后的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<RoleUser>
<ROLENAME>
<criteria>
<value/>
<operator>like</operator>
</criteria>
</ROLENAME>
</RoleUser>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.eosRoleUser</reportQualifiedName>
</report>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
<list type="RoleUser" rowNum="14">
<RoleUser rowNum="0">
<ROLENAME>嘉宾</ROLENAME>
<USERID>guest</USERID>
<OPERATORNAME>嘉宾</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="1">
<ROLENAME>角色A</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="2">
<ROLENAME>角色B</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="3">
<ROLENAME>角色B</ROLENAME>
<USERID>goose</USERID>
<OPERATORNAME>goose</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="4">
<ROLENAME>角色B</ROLENAME>
<USERID>fish</USERID>
<OPERATORNAME>fish</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="5">
<ROLENAME>角色C</ROLENAME>
<USERID>tiger</USERID>
<OPERATORNAME>tiger</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="6">
<ROLENAME>角色C</ROLENAME>
<USERID>kitty</USERID>
<OPERATORNAME>kitty</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="7">
<ROLENAME>角色C</ROLENAME>
<USERID>fish</USERID>
<OPERATORNAME>fish</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="8">
<ROLENAME>角色C</ROLENAME>
<USERID>snoppy</USERID>
<OPERATORNAME>snoppy</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="9">
<ROLENAME>角色C</ROLENAME>
<USERID>micky</USERID>
<OPERATORNAME>micky</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="10">
<ROLENAME>票据管理</ROLENAME>
<USERID>hh</USERID>
<OPERATORNAME>黄浩</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="11">
<ROLENAME>票据管理</ROLENAME>
<USERID>dm</USERID>
<OPERATORNAME>戴明</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="12">
<ROLENAME>票据管理</ROLENAME>
<USERID>ljd</USERID>
<OPERATORNAME>李坚定</OPERATORNAME>
</RoleUser>
<RoleUser rowNum="13">
<ROLENAME>系统管理员</ROLENAME>
<USERID>sysadmin</USERID>
<OPERATORNAME>系统管理员</OPERATORNAME>
</RoleUser>
</list>
<params/>
<taskInfo>
<reportQualifiedName>demo.report.eosRoleUser</reportQualifiedName>
<reportFormat>html</reportFormat>
<sessionName/>
<sessionId>66ba96e7-1f97-4ae8-a8e9-ee708a743743</sessionId>
<outputPath>C:\EOS_530\eosserver\reportServer\output</outputPath>
<outputName>66ba96e7-1f97-4ae8-a8e9-ee708a743743</outputName>
<totalPage>1</totalPage>
<isPaged>false</isPaged>
<outputCanonicalPath>C:\EOS_530\eosserver\reportServer\output\66ba96e7-1f97-4ae8-a8e9-ee708a743743_1.html</outputCanonicalPath>
<taskSucceeded>true</taskSucceeded>
</taskInfo>
</data>
</root>
以上XML文件中,list节点下的数据为BL_queryEntityAllExt查询数据库的结果。
taskInfo节点是BL_generateReport运行报表后生成的报表任务信息。后续显示报表结果时需要用到这个节点下的数据。
EOS报表应用开发示例四
【实现方式】
在业务逻辑中调用报表的运算逻辑运行报表,数据源采用JDBC数据源方式。
【实现概述】
1. 按照需求设计报表模板。
o 路径和名称:demo.report.JDBCRoleUser.erd
o 功能:设置数据源、数据显示方式和样式。模板里需要加入报表参数作为查询条件。
2. 编写查询条件页面。
o 路径和名称:/demo/page/bizlitJDBCInput.jsp
o 功能:确定显示类型和查询条件。
3. 编写查询展现逻辑。
o 路径和名称:demo.pr.bizlitJDBC
o 功能:通过调用业务逻辑,获得报表数据,并返回给结果页面。
4. 编写查询业务逻辑。
o 路径和名称:demo.biz.bizlitJDBC
o 功能:根据查询条件,返回结果集。
5. 编写查询结果页面。
o 路径和名称:/demo/page/bizlitJDBCOutput.jsp
o 功能:得到展现逻辑传入的结果数据,按查询条件页面设定的显示格式显示数据。
【实现步骤】
1. 创建项目
参见联机帮助中的“创建EOS基础项目”。项目创建完成后,新建“demo”构件包,参见“创建EOS构件包”。
设置引用构件包时,必须引用EOS报表引用构件包。
项目名称应根据项目的定义确定,特别是在多人协作开发模式下,统一命名是协作成功的关键。
2. 设计报表模板
demo.report.JDBCRoleUser
3. 编写查询条件页面
bizlitJDBCInput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <form action="demo.pr.bizletJDBC.do" name="queryForm">
3 <input type="hidden" name="report/reportQualifiedName" value="demo.report.JDBCRoleUser"/>
4 <table border="0" cellspacing="1" cellpadding="1" class="query" align="center">
5 <tr>
6 <td>显示类型:
7 <SELECT name="report/reportFormat">
8 <OPTION value="html">html</OPTION>
9 <OPTION value="eosrdf">Applet</OPTION>
10 <OPTION value="xls">Excel</OPTION>
11 </SELECT>
12 </td>
13 <td>查询角色:
14 <input name="report/reportParameters/rolename" value="" size=30 />
15 </td>
16 <td align="center"><input type="submit" value="查询"></td>
17 </tr>
18 </table>
19 </form>
20 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第2行 表单提交至demo.pr.bizletEos.do。
第4行 隐含域,要运行的报表全名为demo.report.JDBCRoleUser。
第7行 用户选择列表,报表的显示格式。
第14行 用户输入域,要查询的角色名称。
4. 编写查询展现逻辑
创建展现逻辑demo.pr.bizlitJDBC,如下图所示。
[图-编写展现逻辑]
调用的业务逻辑“显示名称”为“bizlitJDBC”,“BizLogic名称”为“demo.biz.bizlitJDBC”,如下图所示。
[图-展现逻辑调用业务逻辑基本信息]
调用的业务逻辑参数定义中,“节点路径”为“report”,“输入输出”为“输入路径”,“节点类型”为“EOS Entity”;“节点路径”为“taskInfo”,“输入输出”为“输出路径”,“节点类型”为“EOS Entity”,如下图所示。
[图-展现逻辑调用业务逻辑参数定义]
调用的JSP页面“显示名称”为“bizlitJDBCOutput.jsp”,“返回页面名称”为“/demo/page/bizlitJDBCOutput.jsp”,如下图所示。
[图-展现逻辑调用JSP页面]
5. 编写查询业务逻辑
创建业务逻辑demo.biz.bizlitJDBC,如下图所示。
[图-编写业务逻辑]
调用的运算逻辑“显示名称”为“BL_joinStrings”,“Bizlet方法名称”为“com.primeton.eos.bizlets.string.BNString.BL_joinStrings”,如下图所示。
[图-业务逻辑调用运算逻辑基本信息]
调用的运算逻辑参数定义如下图所示。
[图-业务逻辑调用运算逻辑参数定义]
调用的第2个运算逻辑“显示名称”为“bl_generateReport”,“Bizlet方法名称”为“com.primeton.report.bizlet.ReportBizlets.bl_generateReport”,如下图所示。
[图-业务逻辑调用运算逻辑基本信息]
调用的运算逻辑参数定义如下图所示。
[图-业务逻辑调用运算逻辑参数定义]
开始图元的接口定义如下图所示。
[图-业务逻辑开始图元接口定义]
6. 编写查询结果页面
bizlitJDBCOutput.jsp文件内容如下:
1 <%@include file="/internet/common.jsp"%>
2 <%@ taglib uri="/WEB-INF/report.tld" prefix="report" %>
3 <link rel="stylesheet" href="/pageComponent/resources/theme/style.css" type="text/css">
4 <table align="center" width="100%" height="100%">
5 <tr>
6 <td align="center" >
7 <report:show domTaskInfo="taskInfo" closeTaskAndClear="true"/>
8 </td>
9 </tr>
10 </table>
11 <%@include file="/internet/commonTail.jsp" %>
为了便于说明,每行代码都加了行号。实际编写代码时,请去除行号。
第7行 在用BL方法运行报表后,这里调用报表标签report:show在客户端显示报表。其中,参数domTaskInfo的值必须要与运行报表的BL_generateReport中的“taskInfo”参数的值一致,参数closeTaskAndClear="true"表明在显示报表后关闭报表会话。
【运行示例】
以sysadmin身份登录http://localhost:8080/,然后在地址栏输入http://localhost:8080/forward.do?nextPage=/demo/page/bizlitJDBCInput.jsp,即可测试报表。
【参数传递】
1. 查询条件页面提交时传出的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<requestPackage>demo</requestPackage>
<requestAction>pr.bizlitJDBC</requestAction>
<serverName>localhost</serverName>
<serverPort>8080</serverPort>
<requestURI>/demo.pr.bizlitJDBC.do</requestURI>
<queryString>report%2Flist%2Froleparam%2Fname=rolename&report%2FsessionName=bizJDBC&report%2FreportQualifiedName=demo.report.JDBCRoleUser&reportFormat=html&report%2Flist%2Froleparam%2Fvalue=%BD%C7%C9%AB</queryString>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.JDBCRoleUser</reportQualifiedName>
<reportParameters>
<rolename/>
</reportParameters>
</report>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<empCode/>
<orgName/>
<operatorID>1</operatorID>
<operatorName>系统管理员</operatorName>
<orgID/>
<orgSEQ/>
<menuType/>
<userID>sysadmin</userID>
</SessionEntity>
</data>
</root>
以上XML文件中,reportFormat节点和report节点为页面提交数据。
1.report/reportQualifiedName:报表设计文件的全名。
2.report/reportFormat:报表的显示格式。
3.report/reportParameters:该节点下为报表参数列表,参数名为“rolename”,参数值为空。
2. 业务逻辑中调用com.primeton.eos.bizlets.string.BNString.BL_joinStrings 运算逻辑后的xml:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.JDBCRoleUser</reportQualifiedName>
<reportParameters>
<rolename>%</rolename>
</reportParameters>
</report>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<refNum>0</refNum>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<userID>sysadmin</userID>
<operatorID>1</operatorID>
</SessionEntity>
</data>
</root>
report/reportParameters/roleparam:将该报表模板的参数rolename的值上追加“%”使之支持模糊查询。
3. 业务逻辑调用com.primeton.report.bizlet.ReportBizlets.ReportBizlets.BL_generateReport运算逻辑后的xml如下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<root>
<data>
<report>
<reportFormat>html</reportFormat>
<reportQualifiedName>demo.report.JDBCRoleUser</reportQualifiedName>
<reportParameters>
<rolename>%</rolename>
</reportParameters>
</report>
<SessionEntity>
<remoteAddr>127.0.0.1</remoteAddr>
<uploadRoot>upload</uploadRoot>
<rolelist rowNum="1">
<EOSOperatorRole rowNum="0">
<operatorID>1</operatorID>
<refNum>0</refNum>
<roleID>eosadmin</roleID>
</EOSOperatorRole>
</rolelist>
<userID>sysadmin</userID>
<operatorID>1</operatorID>
</SessionEntity>
<taskInfo>
<reportQualifiedName>demo.report.JDBCRoleUser</reportQualifiedName>
<reportFormat>html</reportFormat>
<sessionName/>
<sessionId>f2ed5977-55d5-4852-a1ca-bb5c50e24361</sessionId>
<outputPath>C:\EOS_530\eosserver\reportServer\output</outputPath>
<outputName>f2ed5977-55d5-4852-a1ca-bb5c50e24361</outputName>
<totalPage>1</totalPage>
<isPaged>false</isPaged>
<outputCanonicalPath>C:\EOS_530\eosserver\reportServer\output\f2ed5977-55d5-4852-a1ca-bb5c50e24361_1.html</outputCanonicalPath>
<taskSucceeded>true</taskSucceeded>
</taskInfo>
</data>
</root>
taskInfo节点是BL_generateReport运行报表后生成的报表任务信息。后续显示报表结果时需要用到这个节点下的数据。
)

