一月初新内容速递丨数据管控、图表应用与函数启航

新年伊始,学习继续!一月上旬更新聚焦数据安全、图表实战、函数入门与场景深化,助你在数据智能的旅程中稳健开年!

一、技术经验分享

精细化管控数据导出,让敏感数据无处泄露!→加强数据安全管理,有效防止敏感信息外泄,提升企业数据合规性。

二、任务持续上线

【图表应用】散点图精准洞察分布→学习散点图制作与分析,掌握数据分布洞察技巧。
【函数】新手村试炼:计算度量入门挑战→函数入门实战,轻松攻克计算度量基础。
【图表应用】热力地图:看透市场浓度的战略眼→掌握热力地图绘制,直观识别市场热度分布。
BI知识闯关】精细化管控数据导出,让敏感数据无处泄露!》→巩固数据安全知识,提升管控实战能力。
【新年活动】年货采购数据侦探→结合新年主题,锻炼数据筛选与分析能力。

三、场景应用精选

价值引擎:汽车制造财务分析主题课程→延续财务数据分析实战,助力企业决策与价值挖掘。
【地图】散点地图:精确落位,洞察分布→学习散点地图应用,实现地理位置数据的可视化呈现。
【地图】热力地图:一眼识别业务“高地”与“洼地”》→掌握热力地图在业务分析中的实战应用。

四、二次开发视频更新

Excel导入模板扩展校验类》→深入学习Excel导入功能的扩展校验技术,提升数据导入的准确性与规范性。

五、活动进行中

新年第①弹|年货采购数据挑战:你能答对几题?》→趣味数据挑战赛,检验你的数据分析能力,赢取开年好礼。

六、官方通知发布

2025年度任务排行榜大揭晓!》→回顾2025年度学习成果,揭晓任务完成排行榜,激励持续学习。

七、函数应用入门

【函数课堂】函数总览篇:告别“不会用计算度量”的焦虑》→系统讲解函数使用,帮助你轻松入门计算度量,摆脱使用困惑。

麦粉社区
>
帖子详情

计划任务通过指标预警将报表当做邮件正文发送邮件

其它 发表于 2023-7-20 15:26
发表于 2023-7-20 15:26:13

https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=92094317


以上案例不能完全满足当前需求


当满足条件时希望将某张报表当做邮件正文发送


因为涉及多家分公司,所以查询条件里需要加上参数,发送的报表也需要加上参数,如果有实现相似的案例,希望可以分享一下,谢谢

发表于 2023-7-20 15:26:14
本帖最后由 君茗 于 2023-7-20 15:36 编辑

这不满足?你的需求描述的这么清楚。


设置告警规则那 在获取字段后 加if else判断下


当然前面的邮件收件人也可以做个指标循环过滤出来应该给谁发 或者多写几个if


中间的sql可以拼接过滤


再参考这个https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=44499313 把后面的发送内容改改


公司随便找个java工程师写就行。再不行找售后提需求

回复

使用道具 1 举报

发表于 2023-7-26 15:32:18
本帖最后由 chen 于 2023-7-26 15:35 编辑

以下实现代码供参考





  1. importPackage(Packages.smartbi.sdk.service.spreadsheetreport);

  2. importPackage(Packages.smartbi.scheduletask.task);

  3. importPackage(Packages.smartbi.sdk.service.systemconfig);

  4. importPackage(Packages.java.lang);

  5. importPackage(Packages.java.util);

  6. importPackage(Packages.java.text);

  7. importPackage(Packages.java.io);

  8. importPackage(Packages.org.apache.commons.lang);

  9. importPackage(Packages.org.apache.commons.mail);

  10. importPackage(Packages.smartbi.scheduletask.component);

  11. importPackage(Packages.smartbi.util);

  12. importPackage(Packages.smartbi.freequery.querydata);

  13. importPackage(Packages.smartbi.sdk.service.datasource);

  14. var report = null;

  15. //定义email对象,初始化参数

  16. var systemConfigService = new SystemConfigService(connector);

  17. var configList = systemConfigService.getSystemConfigs();

  18. var dsService = new DataSourceService(connector);

  19. var mailServer = null;

  20. var fromAddress = null;

  21. var userName = null;

  22. var password = null;

  23. var encryptPassword = null;

  24. var emailSSLEnabled = null;

  25. var emailTLSEnabled = null;

  26. var mailAlias = null;

  27. var port = "";

  28. var ds = "DS.这里是数据库名";var configSql = "select mail_type,cus_id,cus_name,email,sql_param,outputparam1_type,outputparam1,outputparam2_type,outputparam2,ccemail from conf_email ";

  29. // 发送邮件

  30. var sendMail = function(userEmail, erji, jigou, qudao, qudaoparam, ccemail) {

  31.     var multiPartEmail = new SmartbiMultiPartEmail();

  32.         for (var i = 0; i < configList.size(); i++) {

  33.                 var config = configList.get(i);

  34.                 if (config!=null) {

  35.                         if (config.getKey().equals("EMAIL_SMTP_SERVER")) {

  36.                                  mailServer = config.getValue();

  37.                         } else if (config.getKey().equals("EMAIL_USER_NAME")) {

  38.                                  userName = config.getValue();

  39.                         } else if (config.getKey().equals("EMAIL_USER_ALIAS")){

  40.                                 mailAlias = config.getValue();

  41.                         } else if (config.getKey().equals("EMAIL_USER_ADDRESS")) {

  42.                                  fromAddress = config.getValue();

  43.                         } else if (config.getKey().equals("EMAIL_USER_PASSWORD")) {

  44.                                  password= config.getValue();

  45.                         } else if (config.getKey().equals("EMAIL_USER_PASSWORD_ENCRYPT")) {

  46.                                 encryptPassword = config.getValue();

  47.                         } else if (config.getKey().equals("EMAIL_SSL_ENABLED")) {

  48.                                 if (config.getValue().equals("true")) {

  49.                                         emailSSLEnabled = true;

  50.                                 }

  51.                         } else if (config.getKey().equals("EMAIL_TLS_ENABLED")) {

  52.                                 if (config.getValue().equals("true")) {

  53.                                         emailTLSEnabled = true;

  54.                                 }

  55.                         }else if (config.getKey().equals("EMAIL_SMTP_PORT")) {  //端口

  56.                                 port = config.getValue().trim();

  57.                         }

  58.                 }

  59.         }

  60.         if (StringUtil.equals(encryptPassword, "true")) {

  61.                 password = AESCryption.decrypt(password);

  62.         }

  63.         System.out.println(mailServer);

  64.         System.out.println(fromAddress);

  65.         System.out.println(password);

  66.         multiPartEmail.setHostName(mailServer);

  67.         if (!StringUtil.isNullOrEmpty(password)) {

  68.                 multiPartEmail.setAuthentication(userName, password);

  69.         }

  70.         if(mailAlias){

  71.                  multiPartEmail.setFrom(fromAddress, mailAlias);

  72.         } else{

  73.                  multiPartEmail.setFrom(fromAddress);

  74.         }

  75.         if(emailSSLEnabled){

  76.                 multiPartEmail.setSSL(true);

  77.                 if(port != ""){

  78.                         multiPartEmail.setSslSmtpPort(port);

  79.                 }

  80.         }

  81.         if(emailTLSEnabled){

  82.                 multiPartEmail.setTLS(true);

  83.         }

  84.         if(port != "" && !emailSSLEnabled){

  85.                 multiPartEmail.setSmtpPort(port);

  86.         }

  87.     var array = userEmail.split(";");

  88.         for (var i = 0; i < array.length; i++) {

  89.                 multiPartEmail.addTo(array);//接收邮箱地址

  90.         }

  91.         // multiPartEmail.addTo(userEmail);//接收邮箱地址

  92.     if (!StringUtil.isNullOrEmpty(ccemail)) {

  93.         var array = ccemail.split(";");

  94.             for (var i = 0; i < array.length; i++) {

  95.                     multiPartEmail.addCc(array);//抄送邮箱地址

  96.             }

  97.         }

  98.         multiPartEmail.setCharset("GBK");//邮件内容字符集

  99.         multiPartEmail.setSubject("预警通知测试");//邮件标题

  100. //    var sb = new StringBuffer();

  101. //    sb.append("

    这是一个系统自动发送的邮件,请勿回复。


    ");

  102. //    sb.append("\n");

  103.         report = new SSReport(connector);

  104.         report.open("这里是报表资源ID"); //报表资源ID

  105.     report.setParamValue("这里是数据集中参数"+erji, jigou, jigou);

  106.     if (!StringUtil.isNullOrEmpty(qudaoparam) && !StringUtil.isNullOrEmpty(qudao)) {

  107.         report.setParamValue("这里是数据集中参数"+qudao, qudaoparam, qudaoparam);

  108.     }

  109.     var os = new ByteArrayOutputStream();

  110.         report.doExport("HTML","","",os,"","","");

  111.         var html = os.toString("utf8");

  112.         //logger.info(html);

  113.         report.close();

  114.         // 业务库数据源

  115.         //发送邮件

  116.         multiPartEmail.setHtmlMsg(html);

  117.         multiPartEmail.send();

  118. }

  119. // 告警规则

  120. var rule = function(row, userEmail, erji, jigou, qudao, qudaoparam, ccemail) {

  121.     var cnt = row.get(0).getDoubleValue();

  122.     var target = 0;

  123.     if (cnt > target) {

  124.         // 发送邮件

  125.                 sendMail(userEmail, erji, jigou, qudao, qudaoparam, ccemail);

  126.     }

  127. }

  128. // 查询报表数据

  129. var dataQuery = function(userEmail, sqlWhere, erji, jigou, qudao, qudaoparam, ccemail) {

  130.         // 监控sql

  131.         var sql = "select count(1) as cnt from table1 a join table2 b on a.org_id=b.org_id " + sqlWhere;

  132.         var gridData = dsService.executeNoCacheable(ds, sql);

  133.         var data = gridData.getData();

  134.         for (var i = 0; i < data.size(); i++) {

  135.                 var row = data.get(i);

  136.                 // 调用告警规则

  137.                 rule(row, userEmail, erji, jigou, qudao, qudaoparam, ccemail);

  138.         }

  139. }

  140. // 查询配置表

  141. var gridDataGroup = dsService.executeNoCacheable(ds, configSql);

  142. for (var i = 0; i < gridDataGroup.getRowsCount(); i++) {

  143.     var userEmail = gridDataGroup.get(i, 3).getValue();

  144.         var sqlWhere = gridDataGroup.get(i, 4).getValue();

  145.         var erji = gridDataGroup.get(i, 5).getValue();

  146.         var jigou = gridDataGroup.get(i, 6).getValue();

  147.         var qudao = gridDataGroup.get(i, 7).getValue();

  148.         var qudaoparam = gridDataGroup.get(i, 8).getValue();

  149.         var ccemail = gridDataGroup.get(i, 9).getValue();

  150.        

  151.         // 调用保表数据

  152.         dataQuery(userEmail, sqlWhere, erji, jigou, qudao, qudaoparam, ccemail);

  153. }



复制代码

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

3回帖数 0关注人数 2332浏览人数
最后回复于:2023-7-26 15:32
快速回复 返回顶部 返回列表