API修改润乾报表sql

本文介绍如何在报表计算前通过API动态修改报表数据集的SQL语句,实现自定义业务逻辑。通过示例展示了整个过程,包括修改SQL、计算报表及发布。


客户希望在报表计算之前修改报表数据集的sql语句,然后在计算报表的时候让报表的数据集执行这个新的sql语句,从而实现客户自己的业务逻辑。下面就用一个例子实现上面的需求。

实现思路:可以直接在jsp中解决,用API读入报表模板,再得到数据集的sql语句,让客户根据自己的需要对sql进行修改,然后再让报表重新读取这个数据集,然后计算报表,最后用bean的方式发布。

第一步,制作一张报表,连接demo数据源。

首先制作一张连接demo数据源的报表,报表的数据集ds1的sql为:SELECT 订单.订单ID,订单.货主名称,订单.货主国家,订单.货主地区 FROM 订单的报表

将这个报表保存为test.raq。

第二步,编写jsp,实现修改报表sql和发布报表。

修改报表数据集sql的API和内容的注释如下:

String report = request.getParameter(”report”);
System.out.println(”取得的报表名是:”+report);
//传入报表为空的情况下,赋于默认报表。
if(report==null) report = “test.raq”;
String path = application.getRealPath(”/reportFiles/”+report);
System.out.println(”获取的报表路径:”+path);
//从报表文件中构造一个报表定义对象
ReportDefine rd = (ReportDefine)ReportUtils.read(path);
DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象
SQLDataSetConfig sdsc = (SQLDataSetConfig)dsmd.getDataSetConfig(”ds1″); //取到需要修改的数据集对象
String sql =sdsc.getSQL(); //取得数据集对象中的SQL
System.out.println(”报表对象的SQL:”+sql);
//修改sql
sql= sql + “where CAST(订单.订单ID AS INTEGER) <=10260″
System.out.println(”加上参数的SQL:”+sql);
//将修改后的SQL设置到数据集对象中
sdsc.setSQL( sql );
dsmd.setDataSetConfig(sdsc);
rd.setDataSetMetaData(dsmd);

用如上的代码可以实现修改报表数据集的sql,修改好sql后可以用如下的方式计算报表,然后采用bean的方式发布:

Context ctx = new Context();
Engine engine = new Engine(rd,ctx);
IReport ireport = Engine. calc ();

这样报表就计算好了,然后用bean的方式发布报表,jsp的内容如下:

<%@ page contentType=”text/html;charset=GBK”%>
<%@page import=”com.zhengzhong.practise.ConnectDemo”%>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>
<%@ page import=”com.runqian.report4.model.*”%>
<%@ page import=”com.runqian.report4.usermodel.*”%>
<%@ page import=”com.runqian.report4.util.*”%>
<%@ page import=”java.util.*”%>
<html>
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
String report = request.getParameter(”report”);
System.out.println(”取得的报表名是:”+report);
//传入报表为空的情况下,赋于默认报表。
if(report==null) report = “test.raq”;
String path = application.getRealPath(”/reportFiles/”+report);
System.out.println(”获取的报表路径:”+path);
//从报表文件中构造一个报表定义对象
ReportDefine rd = (ReportDefine)ReportUtils.read(path);
DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象
SQLDataSetConfig sdsc = (SQLDataSetConfig)dsmd.getDataSetConfig(”ds1″); //取到需要修改的数据集对象
String sql =sdsc.getSQL(); //取得数据集对象中的SQL
System.out.println(”报表对象的SQL:”+sql);
//修改sql
sql= sql + “where CAST(订单.订单ID AS INTEGER) <=10260″ ;
System.out.println(”加上参数的SQL:”+sql);
//将修改后的SQL设置到数据集对象中
sdsc.setSQL( sql );
dsmd.setDataSetConfig(sdsc);
rd.setDataSetMetaData(dsmd);
Context ctx = new Context();
IReport ireport = Engine. calc ();
%>
<table align=left>
<tr><td>
<!– 发布报表的tag标签,与struts标签使用类似,其中name为必填项,reportFileName与beanName根据发布的报表源类型选择性填写一个 –>
<!– 这里主要讲解了报表源为bean的使用,并在exceptionPage属性里指定了发生错误时,展现错误信息的页面 –>
<report:html name=”report1″
srcType=”defineBean”
beanName=”ireport”
funcBarLocation=”top”
exceptionPage=”/jsp/myError.jsp”
/>
</td></tr>
</table>
</body>
</html>

第三步:发布报表。

用上面编写的jsp发布报表,在浏览器中浏览就可以看到下面的效果,数据被按照自己设定的方式过滤了,也就是设置的过滤条件起作用了。

这样,用API 实现修改数据集 sql 的功能就实现了。

### 如何在Java项目中集成润干报表 #### 1. 启动润干报表服务 为了在Java项目中成功集成润干报表,首先需要确保已经正确安装并启动了润干报表的服务端。通常情况下,可以通过访问特定的URL地址来确认服务是否正常运行。例如,如果本地部署了润干报表服务器,则可通过浏览器访问 `http://localhost:8090` 来进入润干报表的工作台界面[^1]。 #### 2. 设计报表模板 在润干报表的工作台中,可以创建各种类型的报表模板,包括但不限于表格型报表、图形化报表以及打印样式的设计等。利用其内置的功能模块(如报表设计器),能够快速完成所需的数据可视化布局和逻辑定义。此过程涉及的主要操作包括拖拽组件至画布区域、绑定数据源字段到单元格位置以及调整显示效果参数等内容。 #### 3. 配置系统级变量 为了让最终生成的报告更加贴合实际业务场景需求,在设计阶段还需要合理规划好一系列全局可用或者局部限定范围内的动态替换标记——即所谓的“系统变量”。比如当前登录用户的账号名称(`${USER_NAME}`)、所属部门编号(`${DEPT_CODE}`)等等信息都可以作为此类特殊占位符被嵌入到SQL查询语句或者其他表达式计算当中去使用[^1]。 #### 4. 实现前后端交互机制 当完成了基础架构搭建之后就需要考虑如何让前端页面请求后端接口从而获取最新的渲染结果返回给客户端呈现出来。这里推荐采用基于HTML iframe标签的方式加载远程资源链接形式实现跨域调用目的;当然也可以借助RESTful API风格的标准HTTP协议交换JSON格式化的消息体来进行更为灵活高效的通信方式处理[^3]。 以下是通过iframe嵌套外部url的一个简单例子: ```html <iframe src="http://your-server-address/report?param=value" width="100%" height="600px"></iframe> ``` 另外一种常见做法则是编写专门用于封装调用细节逻辑的服务类代码片段如下所示: ```java @RequestMapping("/getReport") public String getReport(@RequestParam Map<String,Object> params){ // 构造完整的请求路径加上必要的query string部分 StringBuilder urlBuilder = new StringBuilder(); urlBuilder.append("http://your-report-server/"); for(Map.Entry<String, Object> entry : params.entrySet()){ urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } return "redirect:" + urlBuilder.toString().substring(0,urlBuilder.length()-1); } ``` #### 5. 定期更新维护依赖库版本号 随着时间推移官方团队会持续发布新的补丁包或者是完全重构后的升级版软件产品因此建议定期检查是否有最新可使用的发行版本可供下载安装并且及时同步修改自己工程内部涉及到的所有关联文件夹结构以保持兼容性和稳定性[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值