我们可以通过计划任务中的自定义功能,写代码实现修改导出文件的名称,此示例效果是在导出的附件文件名上添加当前日期和一个固定值
注:示例脚本仅供参考。
实现操作
1、在原始报表上添加一个日期参数,用于导出的时候可以获取到。
2、在计划任务中添加脚本,操作入口计划任务】-> 【任务】新建任务->定制
importPackage(Packages.smartbi.email.module); importPackage(Packages.java.io); //报表ID var reportID = 'I4028818a015d62bd62bd9475015d97c4ee9b40d9'; //报表参数设置:日期参数 默认值是今天 var reportParamSetting = [ {id:"OutputParameter.I4028818a015d62bd62bd9475015d97c4d00040d5.开始日期2",value:getNowFormatDate(),displayValue:getNowFormatDate()} ]; //收件人邮箱,多个时,用英文分号隔开(;) var mailList = "zhangxueqiong@smartbi.com.cn;zhangmeiting@smartbi.com.cn"; //邮件的内容 var mailText = "这是一个系统自动发送的邮件,所含附件是您订阅的报表"; //报表名称的固定值 var seperatorFix = "_V01"; //服务器临时文件目录 var tmpPath = "c:/"; //获取当前日期:YYYY-MM-DD function getNowFormatDate() { var date = new Date(); var seperator1 = ""; var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } //YYYY-MM-DD var currentdate_date = date.getFullYear() + seperator1 + month + seperator1 + strDate; return currentdate_date; }var openReportOutput = execute('openResource', { connector: connector, reportId: reportID }); var enumerateParamValuesOutput = execute('enumerateParamValues', { resourceHandle: openReportOutput.resourceHandle, byEveryParam: false, paramsSetting: reportParamSetting }); var exportReportOutput = execute('exportResource', { connector: connector, resourceHandle: openReportOutput.resourceHandle, paramSettingIterator: enumerateParamValuesOutput.getParamValues(), exportSetting: {"delimiter":"","pathId":"","fileNameSufParams":true}, taskName: taskName, exportType: "EXCEL2007" }); openReportOutput.resourceHandle.close(); var outputFile = exportReportOutput.file; //文件重命名 var fileName = outputFile.getName(); var index = fileName.lastIndexOf("."); var newName = fileName.substring(0, index)+seperatorFix+"."+fileName.substring(index+1);//新建一个重命名的文件 var destFile = new File(tmpPath+newName); //文件若存在,则删掉 if(destFile.exists()){ destFile.delete(); } var flag = outputFile.renameTo(destFile); outputFile = destFile; var sendToMailOutput = execute('sendToMail', { connector: connector, taskName: taskName, paramValueMap: null, files: [outputFile], sendSetting: {"mailList":mailList,"doZip":false,"title":"%TASKNAME_%DATE%TIME","text":mailText,"picInMail":false} }); |
关键点说明
1、临时目录配置:tmpPath ,这个路径请配置为系统的临时目录,方便以后删除。
2、报表ID获取:参数ID获取:有两种方法
方法一:通过【报表导出】任务类型,然后在【查看运行脚本】中找到该参数的ID
方法二:这种方法只适用于有数据集的报表,通过数据集那里的输出参数查看参数的ID