1.场景描述编辑

FineReport中提供了各种发送邮件的方法,比如报表工具栏手动点击发送邮件,控件点击或编辑后发送邮件,决策系统中定时任务发送邮件等等;

但是在某些场景下,比如填报完某个页面后,判断填报中出现了某个关键字,此时需要发送邮件给某个领导,而使用定时任务可能不及时,也会以占用服务器资源,使用手动发送则比较麻烦,需要填写收件人,抄送人,内容等等,比如我们需要在填报成功后通过JS判断,符合某个条件时,需要发送邮件,而且发送指定的内容,这时就需要用到JS发送邮件功能了。

需求:模板中选择了一批数据中发生了中止,填报成功后立即通过邮件告知,并发送中止的内容信息。

2.解决思路编辑

在JS中,FineReport提供了_g().emailReport()这个方法来启动发送邮件功能,但是仍然弹出的是手动发发邮件的功能,我们可以使用FR.sendMail()方法来实现更加灵活的发送邮件功能

3.解决方案编辑

要求填报成功后检测到中止列中有勾选中止时,发送邮件,并提示哪些信息发生了中止

打开模板%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\LineForm\LineForm1.cpt,添加一个填报成功事件,如下图:

js代码如下:

  1. function encode(s) //对符号进行转义
  2. {
  3. s=s.replace(/</g,'&lt;');
  4. s=s.replace(/>/g,'&gt;');
  5. s=s.replace(/"/g,'&quot;');
  6. return s;
  7. }
  8. var v=false;
  9. var content='';
  10. content+='<html><body>以下产品发生了中止:<br /><br /><table cellspacing="0" border="1">';
  11. var row=0;
  12. content+='<tr><th>产品名称</th><th>供应商</th><th>类别</th><th>成本价</th><th>单价</th><th>库存量</th><th>订购量</th><th>再订购量</th></tr>';
  13. $('td[id^="K"]').each(function(i,e){    //K表示第K列遍历数据源,i为索引值,e为值
  14. if($(e).attr('cv')=='true' || $(e).attr('cv')=='真' )
  15. {
  16. v=true;//判断是否选择了中止
  17. row=$(e).attr('row');
  18. content+='<tr><td>'+$('.x-table td[col=2][row='+row+']').text()+'</td>';//添加该行第3列内容
  19. content+='<td>'+$('.x-table td[col=3][row='+row+']').text()+'</td>';//添加该行第4列内容
  20. content+='<td>'+$('.x-table td[col=4][row='+row+']').text()+'</td>';//添加该行第5列内容
  21. content+='<td>'+$('.x-table td[col=5][row='+row+']').text()+'</td>';//添加该行第6列内容
  22. content+='<td>'+$('.x-table td[col=6][row='+row+']').text()+'</td>';//添加该行第7列内容
  23. content+='<td>'+$('.x-table td[col=7][row='+row+']').text()+'</td>';//添加该行第8列内容
  24. content+='<td>'+$('.x-table td[col=8][row='+row+']').text()+'</td>';//添加该行第9列内容
  25. content+='<td>'+$('.x-table td[col=9][row='+row+']').text()+'</tr>';//添加该行第10列内容
  26. }
  27. });
  28. content+='</table></body></html>';
  29. //如果选择了中止,就发送邮件
  30. if(v){
  31. FR.sentMail({xmlconf:"<?xml version=\"1.0\" encoding=\"UTF-8\"?><R xmlVersion=\"20151125\" releaseVersion=\"8.0.0\" class=\"com.fr.js.EmailJavaScript\"><Parameters/><EmailJS mailTo=\"susie@finereport.com\" cc=\"\" bcc=\"\" title=\"邮件标题\" mainText=\""+encode(content)+"\" showTplContent=\"false\"/><\/R>"})
  32. }

其中,发送邮件里面的参数有几个需要在实际实用中修改

  参数 描述  
  mailTo   收件人邮箱地址,可以是多个
  cc   抄送邮箱地址
  bcc   密件抄送邮箱地址
  tittle   邮件主题
  mainText   邮件主要内容
 showTplContent   是否显示报表内容

注:发送邮件需要设置发件人账户,点击管理系统>系统管理>邮件,进行配置,详细请查看系统管理中的邮箱配置;

另:如果在邮箱配置中邮件总是发送失败,请查看邮箱配置失败

填报成功后,如果选了中止,就会发送邮件,并且显示发送结果,最终效果如上图。

JS实现静默发送邮件功能(选择填报提交后发送、数据查询后发送参考前者)相关推荐

  1. 【_ 記 】发送邮件功能和MimeMessageHelper 对象下的To Cc Bcc(发送,抄送,密送)

    MimeMessageHelper 对象下的To Cc Bcc(发送,抄送,密送) MimeMailService config.properties 配置文件,把邮件发送的host port use ...

  2. node.js mysql 不退出,mysql - 错误:使用NodeJS在MySQL中调用退出后无法排队查询 - SO中文参考 - www.soinside.com...

    我正在尝试运行此NodeJs代码以在Mysql DB中添加数据:app.post("/taxi",(req,res)=>{ let model=req.body.model; ...

  3. C#使用 System.Net.Mail发送邮件功能

    C#使用 System.Net.Mail发送邮件功能 .NET 里包含了很多很丰富的邮件发送与接受的API在 System.Net.Mail命名空间里,使得我们开发发送和接受邮件相关功能变得简单,下面 ...

  4. Excel技能培训之六-定位功能,隔行插入删除空行,分组插入空行,高亮行列间差异,复制筛选后的数据

    1. 在每一行后面插入一个新行 使用2格辅助列,间隔输入1 选中辅助列的内容,将值向下填充到最后,选择复制单元格,结果如下: 结果如下: 按ctrl +G 或者F5 选择定位条件: 选择空值,确定 右 ...

  5. Vue.js示例:GitHub提交(watch数据,created钩子,filters过滤); 网格组件(功能:1.检索,2排序);...

    GitHub提交 codePen:   https://codepen.io/chentianwei411/pen/wEVPZo 注意:频繁看案例,可能会被限制. 重点: 表单输入绑定, 单选按钮的使 ...

  6. html怎么写点击后弹出提示框 是否确认,基于JS+HTML实现弹窗提示是否确认提交功能...

    需求:当点击input按钮时候,弹出确认框,确认后提交到指定url,效果如下 分析:这里面要,引入三个库文件,如下是下载地址 代码:下载后放入响应的项目目录,最后代码如下 console.log(1) ...

  7. php提交成功js弹窗,基于JS+HTML实现弹窗提示是否确认提交功能

    需求:当点击input按钮时候,弹出确认框,确认后提交到指定url,效果如下 分析:这里面要,引入三个库文件,如下是下载地址 代码:下载后放入响应的项目目录,最后代码如下 console.log(1) ...

  8. android h5 多图上传源码,JS移动端/H5同时选择多张图片上传并使用canvas压缩图片...

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...

  9. 为什么我们从Angular 2迁移到Vue.js(为什么我们没有选择React)

    在Rever(www.reverscore.com),我们刚刚使用Vue.js发布了我们的Web客户端的新版本.经过641次提交和16周的紧张开发,我们非常自豪之前做出的决定. 8个月前,我们的前端在 ...

  10. D3.js系列——初步使用、选择元素与绑定数据

    D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档.听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可 ...

最新文章

  1. Django博客系统(首页用户名展示)
  2. 企业OKR实施失败一定要小心这三大杀手
  3. BAPI_PO_CHANGE修改NETPRICE
  4. CSS改变插入光标颜色
  5. html5的文档申明为什么是!DOCTYPE html?
  6. 构造方法的调用顺序和成员变量的初始化时机以及动态绑定
  7. java 审批流_一文读懂工作流
  8. iphone查看删除的短信_苹果删除的短信
  9. linux 文件名加粗,linux – 具有粗体字体的显示目录 – 如何启用?用.bash_profile?...
  10. MYSQL互为主从同步(Windows)
  11. arcgis分隔图层重复出文件_【干货】ArcGIS不可或缺的制图技巧,处理好细节才能让图更专业!...
  12. python高通滤波_图像处理之高通滤波及低通滤波
  13. 【BZOJ2115】Xor(线性基---求无向图1-n路径上最大的边权异或值--可出现环)
  14. 你确定你真的懂Nginx与PHP的交互?
  15. 支付宝小程序使用阿里图标
  16. ajax status code 415,Ajax向后台传json格式的数据出现415错误的原因分析及解决方法...
  17. 听云SDK影响其他项目报Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/networkbench/agent
  18. Qt 之 QSS(黑色炫酷)
  19. [VB.NET源码]学习教程(PDF)
  20. 西门子plc语句表是c语言吗,新手学习西门子PLC语句表的几点建议

热门文章

  1. 个人项目之电商秒杀系统总结
  2. 使用 vsftpd 服务传输文件
  3. 04_zookeeper客户端使用及常用命令
  4. 向设计师分享30个免费的扁平化风格设计素材
  5. 【学堂在线数据挖掘:理论方法笔记】第l六天(3.31)
  6. 如何在win10 64位下搭载汇编环境(包含汇编dosbox和masm文件)
  7. 第十三次CCF CSP认证(2018年3月)真题URL映射
  8. pandas 入门(详看注释)
  9. java 设置系统参数_Java设置系统参数和运行参数
  10. adnroid中LayoutParams的简单总结