请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
jy210355(uid:56792)
职业资格认证:尚未取得认证
自定义批量导出实现全过程
本帖最后由 jy210355 于 2015-12-22 17:15 编辑 前言:在做项目的时候,需要用到批量导出报表的功能,虽然帮助文档中有例子,但自己要做出来还是会花费点时间的。最想吐槽的是,当要导出的模板有多个,参数值也很多的时候,例子中的方法就不奏效啦。那我该怎么去实现用户的这个需求呢,笔者将制作自定义导出功能的全过程分享出来,希望对有相同需求的帆薯们能有所帮助。第一回:有一张带参数的模板需要导出所有参数值的报表,并且输出格式为WORD。我找了帮助文档,查到了一篇《自定义批量导出》,仔细研读了一番,发现这正是我想要的。用下面的句式:url=http://localhost:8075/WebReport/ReportServer?reportlets=({reportlet:/doc/reportname.cpt,paraname1:paravalue1,paraname2:paravalue2,...},{reportlet:/doc/reportname.cpt,paraname1:paravalue1,paraname2:paravalue2,...},{...})&format=XX;再加上一句window.open(url);就可以批量导出报表啦。第二回:但是我的参数值有几十个,我不能一个一个都写进去啊,于是我参照了在线培训课程《1.15FineReport打印专题》(22分50秒)中,有一段程序可以将多个模板拼接起来:P.push('{reportlet:/主变压器输出表.cpt,ProCode:'+procodevalue+',SubName:'+encodeURIComponent(FR.cjkEncode(subnamevalue))+'}');//将参数值组成的数组转化为字符串 var rp=P.join(",");但是这里面的subnamevalue,也就是多个参数值该如何获得呢?我又参考了帮助文档中的《下拉复选框默认选中全部值》中的方法,例子里是这么写的:“在属性表>基本属性>控件值中选择公式,并在公式中输入:sql("FRDemo","select distinct(雇员ID) from 雇员",1)//通过sql从数据库中取出雇员ID即下拉框的实际值”按照上述方法完善程序后,就可以实现批量导出啦! 第三回:但是,后来用户又增加表了,这下需求变成了三张带参数的模板批量导出到一个WORD中。好在,这三张模板的参数是共用的。于是,我就按照上面的方法,把另外两张模板添加进去。心想改起来挺容易的么。可是,结果却发现无法打开页面,导不出来了。我开始一个模板一个模板的测试,发现语法上是没有问题的。后来我就改循环次数,从1开始循环,结果发现当循环次数增大到某一个值后就无法导出了。后来,我在QQ上找了技术支持,他解释说,url的长度是受浏览器限制的,因为拼接的url太长了,所以导不出了。他建议我用POST方法,也就是上面培训视频中批量打印的两种方法之一POST传参方法,这个是不会影响URL的长度的。但,后来经技术支持本人测试后发现,这个POST方法没法用在批量导出上,具体原因不清楚。最后他建议我采用表单的方法,并给了我一个例子。var form =$(""); //定义一个form表单 form.attr('style','display:none'); //在form表单中添加查询参数 form.attr('target', ''); form.attr('method', 'post'); form.attr('action',"http://localhost:8075/WebReport/ReportServer"); var input1 = $(''); input1.attr('type', 'hidden'); input1.attr('name', 'reportlets'); input1.attr('value',FR.cjkEncode("({reportlet:GettingStarted.cpt,地区:华东},{reportlet:GettingStarted.cpt,地区:华北},{reportlet:GettingStarted.cpt,地区:华北},{reportlet:GettingStarted.cpt,地区:华北},{reportlet:GettingStarted.cpt,地区:华北},{reportlet:GettingStarted.cpt,地区:华北},{reportlet:GettingStarted.cpt,地区:华北})")); var input2 = $(''); input2.attr('type', 'hidden'); input2.attr('name', 'op'); input2.attr('value', 'export'); var input3 = $(''); input3.attr('type', 'hidden'); input3.attr('name', 'format'); input3.attr('value', 'word'); var input4 = $(''); input4.attr('type', 'hidden'); input4.attr('name','__filename__'); input4.attr('value', 'aaa'); $('body').append(form); form.append(input1); form.append(input2); form.append(input3); form.append(input4); form.submit();我照着例子修改了我的JS,经过大半天的调试,终于可以实现批量导出了!内容较多,就不贴源码了,有需要的帆薯可以回复我,发模板给你们。最后非常感谢技术支持对我的指导和帮助!
填报应用>>典型应用>>自由式填报表设置隐藏显示行
本帖最后由 加菲喵 于 2015-9-10 16:38 编辑 1、问题描述 进行填报时,当填报内容较多时,需要通过滚动条上下拖动才能完成。而有些填报内容为选填,用户希望隐藏所有选填的内容。当用户需要填该部分内容的时候,再显示该部分内容。 2、实现思路 添加下拉框控件,为下拉框控件添加编辑后事件,通过JS语句来实现行的隐藏和显示。
写在植树节--“种”豆
今天是植树节,没机会去植树,却一不小心“种”了100个豆! 一直以为摇出100以上只是传说,却没曾想到我竟然看到首位稳稳得停在了壹!非常激动!再看后边09、08、07.......最终00..虽然没有突破100,但这个结果完全没有意料到! 本周手气比较差,一直在50以下,昨天也因各种原因没有时间去摇摇,心里还耿耿于怀。现在我突然有一点儿开心~要继续努力噢~大家一起来摇摇乐
个人成就
内容被浏览32,485
加入社区10年28天
返回顶部