历史版本3 :JS 实现选中内容批量打印/导出 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 问题描述编辑

有些时候在进行批量导出或者批量打印时,只想实现对勾选选中的部分行进行打印,并且选中行的内容传递给新的模板,进行打印,不同行传递的模板不一样。那么该如何实现呢?
222

2. 示例编辑

2.1 数据准备

新建一个数据查询ds1:SELECT * FROM 订单 where 1=1 ${if(len(p1) == 0,"","and 订单ID in ('" + p1 + "')")} limit 10

2.2 报表设计

主报表设计

222

C1、C2单元格设置为按钮控件,C1单元格的按钮名称为批量打印,C2单元格的按钮名称为批量导出。

B4单元格设置为复选框控件。

将ds1中的订单ID,货主名称,是否已付拖入到单元格C4、D4、E4中。

参数界面设置:

222
给下拉复选框控件绑定数据字典,类型设置为数据查询,实际值和显示值都是订单ID。

将报表另存为test.cpt

子报表设置

222

将此子报表另存为test10001.cpt,用于接收test.cpt传过来的参数。
222
将此子报表另存为test10002.cpt,用于接收test.cpt传过来的参数。

2.3 添加批量打印JS事件

右击C1单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:
222

批量打印JS代码如下:

var printurl="http://localhost:8075/WebReport/ReportServer"; var names = []; var paths = []; var singlepaths = []; var url = "ReportServer?reportlets=("; var $span = $('.fr-checkbox-checkon'); //获取选中的复选框 var $tds = $("td").has($span); //定义选中复选框的单元格 var $trs = $("tr").has($tds); var p=[]; for(var i=0; i<$trs.length;i++){ var name = $("td:eq(2)",$($trs[i])).html(); //获取选中的C4单元格的值 var a = $("td:eq(3)",$($trs[i])).html(); var b = $("td:eq(4)",$($trs[i])).html(); //names.push(name); //将选中的值放到数组中 var cptpath ="test"+ name+".cpt" var urlstring = "{reportlet:" +"'"+FR.cjkEncode(cptpath)+"'" +",p1:"+"'"+name+"'" +",p2:"+"'"+a+"'" +",p3:"+"'"+b+"'" + "}"; debugger; paths.push(urlstring); debugger; } if(paths.length>0){var rpaths=paths.join(","); var reportlets="["+rpaths+"]"; var config = { url : printurl, isPopUp : false, data : { reportlets:reportlets } }; } debugger; FR.doURLPDFPrint(config);

2.4 添加批量导出JS事件

右击C2单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:

222
批量导出JS代码如下:

var names = []; //盛放cpt名字和参数值的数组 var as=[];//盛放参数值的数组 var bs=[];//盛放参数值的数组 var paths = []; var singlepaths = []; var url = "ReportServer?reportlets=("; var $span = $('.fr-checkbox-checkon'); //获取选中的复选框 var $tds = $("td").has($span); //定义选中复选框的单元格 var $trs = $("tr").has($tds); for(var i=0; i<$trs.length;i++){ var name = $("td:eq(2)",$($trs[i])).html(); //获取选中的C3单元格的值 //names.push(name); //将选中的值放到数组中 var a = $("td:eq(3)",$($trs[i])).html(); console.log(a); //获取选中的D3单元格的值 //as.push(a); //将选中的值放到数组中 var b = $("td:eq(4)",$($trs[i])).html(); console.log(b); //获取选中的E3单元格的值 //bs.push(b); //将选中的值放到数组中 var cptpath = "/test"+name+".cpt&p1="+name+"&p2="+a+"&p3="+b; //获取选中的D3单元格的值 var urlstring = "{reportlet:" + FR.cjkEncode(cptpath) + "}"; //paths.push(urlstring); //singlepaths.push(FR.cjkEncode(cptpath)); debugger; window.open("ReportServer?reportlet=" + FR.cjkEncode(cptpath+"&format=pdf"),"name" + i); //FR.Msg.toast(i); } //alert(names + ";" + paths + ";" + singlepaths); //url = url + paths + ")" + "&format=word&__filename__=Xname"; //window.open(url);

2.5 效果预览

保存后,点击填报预览,即可对选中行的数据根据不同模板打印或导出。