1. 概述
1.1 版本
报表服务器版本 |
---|
11.0 |
1.2 应用场景
对于一张数据量较大的模板,用户希望可以根据具体需求筛选出需要打印的数据,再进行打印。
或对于多张模板,用户可根据一张查询模板筛选出需要打印的数据,并将这些数据作为参数,动态传递给其他模板,实现一键打印所有相关报表内容。
1.3 实现思路
本文示例:
例如有一张全国销售人员的业绩报表,用户可以选择打印某个地区下的某个销售员的业绩报表,或者同时选择多个销售员的业绩报表进行打印。
实现思路如下:
示例 | 实现思路 |
---|---|
示例一:打印某个销售员的业绩报表(参数只传递一个值) | 1)新建一张查询模板,查询需要打印的数据至当前页面上 2)新建一张打印模板,用于打印过滤出的数据 3)设置点击事件:
|
示例二:打印多个销售员的业绩报表(参数可传递多个值) | 1)新建一张查询模板,选择需要打印的数据 2)新建一张打印模板,用于打印过滤出的数据 3)设置点击事件
|
2. 示例一:打印某个销售员的业绩报表
2.1 准备查询模板
需要准备一张查询模板,用于查询需要打印的数据,并在打印时将查询出的数据作为参数,传递给打印报表。
2.1.1 新建数据集
1)新建数据集 ds1 ,SQL 查询语句如下:
其中,定义了两个数据集参数 地区 和销售员,可以让用户在打印时根据具体需求筛选出需要打印的数据。
select * from 销量 where 地区='${地区}' and 销售员='${销售员}'}'
2)新建数据集 ds2,用于查询所选地区下的销售员名称,SQL 语句如下:
select 销售员 from 销量 where 地区= '${地区}'
2.1.2 设计报表
模板样式如下图所示,其中,C2 单元格为按钮控件,如下图所示:
2.1.3 参数添加控件
1)点击参数面板的「编辑」按钮,进入参数面板编辑界面。
点击「全部添加」,将参数的默认控件添加到参数面板,并设置「地区」和「销售员」参数控件类型为「下拉框控件」。如下图所示:
3)设置「地区」控件的「数据字典」为数据库表 FRDemo 中的「销量」表,实际值与显示值均为「地区」列,如下图所示:
4)设置「销售员」控件的「数据字典」为数据查询 ds2 ,实际值与显示值均为「销售员」列,如下图所示:
2.2 准备打印模板
需要准备一张打印模板,用于接收查询传入的参数,并过滤出相应数据。
2.2.1 新建数据集
新建数据集 ds1 ,SQL 查询语句如下:
其中,SQL 语句中定义了两个数据集参数地区 和销售员,用于接收传入的参数,并过滤出相应的数据。
select * from 销量 where 地区='${地区}' and 销售员='${销售员}'
2.2.2 设计报表
设计打印模板,将数据集中的字段拖到对应单元格中,如下图所示:
2.3 添加点击事件
打开 2.1 节准备的查询模板,选中 C1 单元格,添加一个点击事件。
在参数栏中添加参数 a,参数值为公式$地区
添加参数b ,参数值为公式$销售员
添加下面的 JavaScript 代码,如下图所示:
JavaScript 代码如下:
var printurl="http://localhost:8075/webroot/decision/view/report";
var reportlets ="[{reportlet: '打印模板.cpt', 地区:'"+a+"', 销售员:'"+b+"'}]";
var config = {
printUrl : printurl,
isPopUp : true,
// 是否弹出设置窗口,true为弹出,false为不弹出
data :{
// 多模板格式: [{reportlet: 'name.cpt', a: 'a1'}, {reportlet: 'name.cpt', b: 'b1'}] 同样的模板会出现多页
// 单模板格式: [{reportlet: 'name.cpt', a: 'a1', b: 'b1'}] 同样的模板只会有单页
reportlets: reportlets // 需要打印的模板列表
},
printType : 0, // 打印类型,0为零客户端打印,1为本地打印
// 以下为零客户端打印的参数,仅当 printType 为 0 时生效
//ieQuietPrint : false,// IE静默打印设置 true为静默,false为不静默
// 以下为本地打印的参数,仅当 printType 为 1 时生效
printerName : 'Microsoft Print to PDF', // 打印机名
pageType: 0, // 打印页码类型:0:所有页,1:当前页,2:指定页
//pageIndex: '1-3', // 页码范围。当 pageType 为 2 时有效
copy: 1, // 打印份数
};
debugger;
FR.doURLPrint(config)
2.4 效果预览
填报预览查询模板,查询出需要打印的数据,点击「打印」按钮,即可打印相关报表,如下图所示:
2.5 已完成模板下载
点击下载查询模板:查询模板.cpt
点击下载打印模板:打印模板.cpt
3. 示例二:打印多个销售员的业绩报表
3.1 准备查询模板
需要准备一张查询模板,用于选择需要打印的数据,并在打印时将筛选出的数据作为参数,传递给打印报表。
3.1.1 新建数据集
1)新建数据集 ds1 ,SQL 查询语句如下:
select * from 销量
2)新建数据集 ds2,用于查询所选地区下的销售员名称,SQL 语句如下:
select 销售员 from 销量 where 地区= '${地区}'
3.1.2 设计报表
1)模板样式如下图所示,其中:
设置 A2 单元格为下拉框控件
设置 B2 单元格为下拉复选框控件
设置 C1 单元格为按钮控件,如下图所示:
2)选中 A2 单元格,设置「下拉框」控件的「数据字典」为数据库表 FRDemo 中的「销量」表,实际值与显示值均为「地区」列,如下图所示:
3)选中 B2 单元格,设置「下拉复选框」控件的「数据字典」为数据查询 ds2 ,实际值与显示值均为「销售员」列。
设置返回值类型为「字符串」,且分隔符为',',如下图所示:
3.2 准备打印模板
需要准备一张打印模板,用于接收传入的参数,并过滤出相应数据。
3.2.1 新建数据集
新建数据集 ds1 ,SQL 查询语句如下:
其中,SQL 语句中定义了两个数据集参数地区 和销售员,用于接收传入的查询参数,并过滤出相应的数据。
SELECT * FROM 销量 where 地区='${地区}' and 销售员 in ('${销售员}')
3.2.2 设计报表
设计打印模板,将数据集中的字段拖到对应单元格中,如下图所示:
3.3 添加点击事件
打开 3.1 节准备的查询模板,选中 C1 单元格,添加一个点击事件,如下图所示:
JavaScript 代码如下:
contentPane.stopEditing();
var printurl = "http://localhost:8075/webroot/decision/view/report";
var reportlets = '[' + contentPane.getCellValue(0, 1, 1).split('\',\'').map(function(i) {
return '{reportlet: \'多值打印模板.cpt\', 地区:' + contentPane.getCellValue(0, 0, 1) + ',' + '销售员:' + i + '}'
}).join(',') + ']';
var config = {
url: printurl,
isPopUp: false,
data: {
reportlets: reportlets //将参数放到data里面传到指定的URL中
}
};
FR.doURLPDFPrint(config);
3.4 效果预览
填报预览查询模板,选择需要打印的数据,点击「批量打印」按钮,即可打印相关报表,如下图所示:
3.5 已完成模板下载
点击下载查询模板:多值查询模板.cpt
点击下载打印模板:多值打印模板.cpt