1.应用场景:
创建一张报表,报表上有一个接收用户名的参数,根据用户名参数,筛选出该用户所能查看的数据。 现通过计划任务,动态设置用户名参数,并将该用户名参数的报表数据批量发送邮件给指定用户。(需要发送邮件的用户名保存在数据库表中,用户的邮箱保存在用户的扩展属性中。)
2.配置发件箱:
3.实现主要步骤及关键代码:
3.1.通过SQL查询出需要发送邮件的用户名称:
var sql = "SELECT JRYH FROM dyxx";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.通过设置用户名参数:
var reportParamSetting = [{id:"OutputParameter.I2c9019810158fc12fc1224c00158fc2e21c50069.当前用户",value:userName,displayValue:userName}]
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 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.附完整的定制任务代码