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}
});
}
5.使用自定义定制任务小技巧
在使用可视化界面配置任务时,如果大部分都能通过配置达到需求,而只有一小部分无法配置实现,可以考虑先通过可视化配置界面配置好,然后通过查看运行脚本,将里面的脚本代码复制出来,然后即可根据里面的脚本代码作定制修改。
(1)配置好以后查看运行脚本

(2)将运行脚本复制出来

(3)新建一个任务,将上一步复制出来的脚本代码粘贴到定制代码中,然后作出定制修改即可。
