1.应用场景:
创建一张报表,报表上有一个接收用户名的参数,根据用户名参数,筛选出该用户所能查看的数据。
现通过计划任务,动态设置用户名参数,并将该用户名参数的报表数据批量发送邮件给指定用户。(需要发送邮件的用户名保存在数据库表中,用户的邮箱保存在用户的扩展属性中。)
面板 | ||||||
---|---|---|---|---|---|---|
| ||||||
|
2.配置发件箱:
3.实现主要步骤及关键代码:
3.1.通过SQL查询出需要发送邮件的用户名称:
var dsId = "DS.user";//数据源ID
var sql = "SELECT userName FROM t_user";
var gridDataGroup = datasrcService.executeNoCacheable(dsId, sql);
for (var i = 0; i < gridDataGroup.getRowsCount(); i++) {
var userName = gridDataGroup.get(i, 0).getValue();
......
}
3.2.根据用户名称获取用户属性:email:
//根据用户名获取用户对象
var user = usrManagerService.getUserByName(userName);
//根据key值获取用户扩展属性,此处获取用户的email地址
var email = usrManagerService.getUserAttribute(user.getId(), "email").getValue();
3.3.通过设置用户名参数:
//设置格式:{id:"OutputParameter.数据集ID.参数名称",value:参数真实值,displayValue:参数显示值}
var reportParamSetting = [{id:"OutputParameter.I2c9019810158fc12fc1224c00158fc2e21c50069.当前用户",value:userName,displayValue:userName}]
//参数值也可以设置为固定值,变量,或者默认值,其中默认值写法:"$默认值$"
如:{id:"OutputParameter.I2c9019810158fc12fc1224c00158fc2e21c50069.测试",value:"$默认值$",displayValue:"$默认值$"}
3.4.打开报表:
//打开报表的方法基本固定,无需作出更改。
var openReportOutput = execute('openResource', {
connector: connector,
reportId: reportID
});
3.5. 执行导出:
var exportReportOutput = execute('exportResource', {
connector: connector,
resourceHandle: openReportOutput.resourceHandle,
paramSettingIterator: enumerateParamValuesOutput.getParamValues(),
exportSetting: {"delimiter":"","pathId":"","fileNameSufParams":false},
taskName: taskName,
exportType: "EXCEL2007"
});
3.6.发送邮件:
var title = "%TASKNAME_%DATE%TIME";//邮件标题,默认为:任务名称_日期时间 var text = "这是一个系统自动发送的邮件,所含附件是您订阅的报表";//邮件正文内容 var doZip = true;//是否需要压缩,默认:是。 var picInMail = false;//是否将图片作为正文内容,默认:否
var sendToMailOutput = execute('sendToMail', {
connector: connector,
taskName: taskName,
paramValueMap: null,
files: [outputFile],
//设置邮件
sendSetting: {"mailList":email,"doZip":doZip,"title":title,"text":text,"picInMail":picInMail}
});
3.7.批量发送邮件:
通过遍历第1步获取到的用户名称,重复执行第2、3、4、5、6步即可完成批量发送邮件。
4.附完整的定制任务代码
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
/** * 以下代码需要根据实际使用场景进行设置。设置的地方主要有两个: * 一、数据源与SQL,此处设置是为了获取邮件发送的对象,即工号。 * 二、报表参数信息,此处是设置准备发送报表的参数信息。 */ importPackage(Packages.java.io); importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.smartbi.usermanager); importPackage(Packages.smartbi.sdk); importPackage(Packages.smartbi.sdk.service.user); importPackage(Packages.smartbi.sdk.service.datasource); var usrManagerService = new UserManagerService(connector); var datasrcService = new DataSourceService(connector); //设置报表ID var reportID = 'I2c9019810158fc12fc1224c00158fc2e7937006d'; //开始设置数据源与SQL------------------------------------------------- var sql = "SELECT JRYH FROM dyxx"; // 该SQL语句获取需要邮件推送的用户名称 var dsId = "DS.邮件推送"; //上一句SQL运行的数据源ID //结束设置数据源与SQL------------------------------------------------- var title = "%TASKNAME_%DATE%TIME";//邮件标题,默认为:任务名称_日期时间 var text = "这是一个系统自动发送的邮件,所含附件是您订阅的报表";//邮件正文内容 var doZip = true;//是否需要压缩,默认:是。 var picInMail = false;//是否将图片作为正文内容,默认:否 var gridDataGroup = datasrcService.executeNoCacheable(dsId, sql); for (var i = 0; i < gridDataGroup.getRowsCount(); i++) { var userName = gridDataGroup.get(i, 0).getValue(); //根据用户名获取用户对象 var user = usrManagerService.getUserByName(userName); //根据key值获取用户扩展属性,此处获取用户的email地址 var email = usrManagerService.getUserAttribute(user.getId(), "email").getValue(); //开始设置报表参数信息--------------------------------------------- //设置格式:{id:"OutputParameter.数据集ID.参数名称",value:参数真实值,displayValue:参数显示值},参数值可 //以设置为固定值,变量,或者默认值,默认值写法:"$默认值$" var reportParamSetting = [ {id:"OutputParameter.I2c9019810158fc12fc1224c00158fc2e21c50069.当前用户",value:userName,displayValue:userName},//多个参数之间以逗号分隔 {id:"OutputParameter.I2c9019810158fc12fc1224c00158fc2e21c50069.测试",value:"$默认值$",displayValue:"$默认值$"} ]; //结束设置报表参数信息---------------------------------------------- //以下代码无需修改-------------------------------------------------- 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":false}, taskName: taskName, exportType: "EXCEL2007" }); openReportOutput.resourceHandle.close(); var outputFile = exportReportOutput.file; var sendToMailOutput = execute('sendToMail', { connector: connector, taskName: taskName, paramValueMap: null, files: [outputFile], //设置邮件 sendSetting: {"mailList":email,"doZip":doZip,"title":title,"text":text,"picInMail":picInMail} }); } |
锚 | ||||
---|---|---|---|---|
|