页面树结构
转至元数据结尾
转至元数据起始

 场景: 通常我们可过计划任务把电子表格导出图片以邮件的正文,并且以excel为附件发送

 实现思路:通过计划中的【定展】写JAVA代码实现。

 效果如下:

操作步骤:

1、在【定制】-》【展现定制】中创建电子表格报表。

2、在【定制】-》【计划任务】-》【任务】创建任务,【任务类型】选择:“定制”

  JAVA代码如下:

自定义任务
importPackage(Packages.smartbi.sdk.service.spreadsheetreport);
importPackage(Packages.smartbi.scheduletask.task);
importPackage(Packages.smartbi.sdk.service.systemconfig);
importPackage(Packages.java.lang);
importPackage(Packages.java.util);
importPackage(Packages.java.text);
importPackage(Packages.java.io);
importPackage(Packages.org.apache.commons.lang);
importPackage(Packages.org.apache.commons.mail);
importPackage(Packages.javax.mail.internet);
importPackage(Packages.smartbi.scheduletask.component);
var report = null;
var reportID = 'I4028818a0162847d847d04570162a8598ee91515'; //报表资源ID
//var reportParamSetting = [];
//如果报表需设置参数,需在reportParamSetting中添加
var reportParamSetting = [
    //{id:"OutputParameter.I0b015ec701596d4d6d4df0f801598dcbf9902a8f.Email",value:"306584671@qq.COM",displayValue:"306584671@qq.COM"}
];
//定义email对象,初始化参数
var multiPartEmail = new SmartbiMultiPartEmail();
var systemConfigService = new SystemConfigService(connector);
var configList = systemConfigService.getSystemConfigs();
var mailServer = null;
var fromAddress = null;
var userName = null;
var password = null;
var emailSSLEnabled = null;
var emailTLSEnabled = null;
var port = "";
for (var i = 0; i < configList.size(); i++) {
    var config = configList.get(i);
    if (config!=null) {
        if (config.getKey().equals("EMAIL_SMTP_SERVER")) {
             mailServer = config.getValue();
        } else if (config.getKey().equals("EMAIL_USER_NAME")) {
             userName = config.getValue();
        } else if (config.getKey().equals("EMAIL_USER_ADDRESS")) {
             fromAddress = config.getValue();
        } else if (config.getKey().equals("EMAIL_USER_PASSWORD")) {
             password= config.getValue();
        } else if (config.getKey().equals("EMAIL_SSL_ENABLED")) {
             if (config.getValue().equals("true")) {
                 emailSSLEnabled = true;
             }
        } else if (config.getKey().equals("EMAIL_TLS_ENABLED")) {
             if (config.getValue().equals("true")) {
                 emailTLSEnabled = true;
             }
        }else if (config.getKey().equals("EMAIL_SMTP_PORT")) { 	//端口
			 port = config.getValue().trim();
		}
    }
}
System.out.println(mailServer);
System.out.println(fromAddress);
System.out.println(password);
multiPartEmail.setHostName(mailServer);
multiPartEmail.setAuthentication(userName, password);
multiPartEmail.setFrom(fromAddress);
if(emailSSLEnabled){
    multiPartEmail.setSSL(true);
    if(port != ""){
         multiPartEmail.setSslSmtpPort(port);
     }
}
if(emailTLSEnabled){
    multiPartEmail.setTLS(true);
}
if(port != "" && !emailSSLEnabled){
    multiPartEmail.setSmtpPort(port);
}
//multiPartEmail.addTo("liangzhiheng@smartbi.com.cn");//接收邮箱地址
multiPartEmail.addTo("zhouyan@smartbi.com.cn"); //多个收件人就加多次
multiPartEmail.setCharset("GBK");//邮件内容字符集
multiPartEmail.setSubject("测试邮件PNG-Excel");//邮件标题
report = new SSReport(connector);
report.open(reportID); 
//报表默认参数设置
//report.setParamValue(String id, String value, String displayValue);//设置报表的参数默认值
//report.setParamValue("OutputParameter.I0b015ec701596d4d6d4df0f801598dcbf9902a8f.Email","306584671@qq.COM","306584671@qq.COM");
//生成html的效果比PNG的要好很多
//--------生成 html begin-----------
//var os = new ByteArrayOutputStream();
//report.doExport("HTML","","",os,"","","");
//var html = os.toString("utf8");
//---------html  end ----------
//------生成PNG图片  begin------------------
var pngFile = File.createTempFile("emailtask",".png");
var os = new FileOutputStream(pngFile);
report.doExport("PNG","","",os,"","","");
os.flush();
os.close();
report.close();
var fileLen = pngFile.length();
var cid = multiPartEmail.embed(pngFile);
var sb = new StringBuffer();
sb.append("<html><body><img src=\"cid:"+cid+"\"><br/><br/></body></html>");
sb.append("\n");       
var html = sb.toString();
//---------------------------  png end --------------------
report.close();
//添加正文
multiPartEmail.setHtmlMsg(html);
//添加邮件附件
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 attachment = new EmailAttachment();
attachment.setPath(outputFile.getPath());
attachment.setName(MimeUtility.encodeText(outputFile.getName()));
multiPartEmail.attach(attachment);
//发送邮件
multiPartEmail.send();
  • 无标签