起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 31330|回复: 33

在流程中发邮件

  [复制链接]

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
发表于 2013-11-26 09:24:37 | 显示全部楼层 |阅读模式
发的邮件是文本格式,只有标题  实现通知功能

本例子是在请假申请环节流转后向总经理发邮件 如图:
QQ截图20131127110634.png

1.用附件中的mail.jar替换runtime\BusinessServer\WEB-INF\lib里面的mail.jar
2.将附件中的MailSenderInfo.java MyAuthenticator.java SimpleMailSender.java三个文件(发邮件用)复制到流程目录下的dsrc目录下
3.在请假申请环节的onAfterAdvance事件中获取信息发邮件  代码如下:
  1. import java.text.SimpleDateFormat;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import com.justep.system.opm.api.Person;
  6. import com.justep.system.process.*;
  7. import com.justep.system.opm.api.PersonHelper;

  8. public class EmailProcess {
  9.         public static void businessActivity1AfterAdvance() {
  10.                 String email = null;
  11.                 String title = null;
  12.                 String personName = null;
  13.                 Date date = new Date();
  14.                 List exts = new ArrayList();
  15.                 exts.add("sMail");
  16.                 String personID = null;
  17.                 for (ActivityInstance ai : ProcessUtils.getAI().getAllNextAIs()) {
  18.                         if (ai.getNextAIs().isEmpty()) {
  19.                                 for (Task t : ai.getTask().getExecutorTasks()) {
  20.                                         title = t.getName();
  21.                                         Person person=PersonHelper.loadPerson(t.getExecutorPersonID(), exts);
  22.                                         personName=person.getName();
  23.                                         email=(String) person.getExtValue("sMail");
  24.                                         //这个类主要是设置邮件
  25.                                         MailSenderInfo mailInfo = new MailSenderInfo();
  26.                                         mailInfo.setMailServerHost("smtp.163.com");//发送者邮箱的host
  27.                                         mailInfo.setMailServerPort("25");
  28.                                         mailInfo.setValidate(true);
  29.                                         mailInfo.setUserName("*********@163.com");//发送者邮箱名
  30.                                         mailInfo.setPassword("*********");//发送者的邮箱密码
  31.                                         mailInfo.setFromAddress("********@163.com");// 发送者邮箱地址
  32.                                         mailInfo.setToAddress(email);//接收者的邮箱地址
  33.                                         mailInfo.setSubject(personName + "   " + title + "   " + (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(date));
  34.                                         mailInfo.setContent(" ");//这里邮件内容为空
  35.                                         //这个类主要来发送邮件
  36.                                         SimpleMailSender sms = new SimpleMailSender();
  37.                                         sms.sendTextMail(mailInfo);//发送文体格式
  38.                                 }
  39.                         }
  40.                 }
  41.         }
  42. }
复制代码
Desktop.zip (469.42 KB, 下载次数: 2968)

评分

参与人数 1威望 +2 收起 理由
lwcompany + 2 赞一个!

查看全部评分

远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-11-27 11:24:02 | 显示全部楼层

发送html格式邮件,可以通过点击链接去处理审批

本帖最后由 song_ning_ning 于 2014-1-21 09:38 编辑

这个邮件的格式是html的,接收到的邮件里面有个超链接,通过点击链接登陆到平台去处理审批
过程:点击链接,链接指向login.j文件 在login.j文件实现登陆  然后重定向到publicActivity.w文件   在publicActivity.w中的windowFrame组件上显示代办任务的页面

1.将请假申请环节的onAfterAdvance事件中的代码替换为:
  1. import java.io.UnsupportedEncodingException;
  2. import java.net.URLEncoder;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Collection;
  6. import java.util.Date;
  7. import java.util.HashSet;
  8. import java.util.List;
  9. import java.util.Set;

  10. import com.justep.model.ModelUtils;
  11. import com.justep.system.process.*;
  12. import com.justep.system.context.*;
  13. import com.justep.system.opm.*;
  14. import com.justep.system.opm.api.PersonHelper;
  15. import com.justep.util.Utils;

  16. public class EmailProcess {
  17.         public static void businessActivity1AfterAdvance() {
  18.                 String email = null;
  19.                 String title = null;
  20.                 String userName = null;
  21.                 String password = null;
  22.                 String url = null;
  23.                 String task = null;
  24.                 String eUrl = null;
  25.                 String process = null;
  26.                 String activity = null;
  27.                 String executor = null;
  28.                 String personName = ContextHelper.getPerson().getName();
  29.                 Date date = new Date();
  30.                 Collection extOrgRelations = new ArrayList();
  31.                 extOrgRelations.add("sMail");
  32.                 String personID = null;
  33.                 for (ActivityInstance ai : ProcessUtils.getAI().getAllNextAIs()) {
  34.                         if (ai.getNextAIs().isEmpty()) {
  35.                                 for (Task t : ai.getTask().getExecutorTasks()) {
  36.                                         title = t.getName();
  37.                                         task = t.getId();
  38.                                         eUrl = t.getEURL();
  39.                                         process = t.getProcess();
  40.                                         activity = t.getActivity();
  41.                                         executor = t.getExecutorFID();
  42.                                        personID=OrgUtils.getPersonIDByFID(t.getExecutorFID());
  43.                                         email = (String) PersonHelper.loadPerson(personID, extOrgRelations).getExtValue("sMail");
  44.                                         userName = PersonHelper.loadPerson(personID, extOrgRelations).getCode();
  45.                                         password = PersonHelper.loadPerson(personID, extOrgRelations).getPassword();
  46.                                         url = "http://192.168.1.58:8080/x5/UI/demo/actions/process/integration/login.j?username=" + userName + "&password=" + password
  47.                                                         + "&task=" + task + "&eUrl=" + eUrl + "&process=" + process + "&activity=" + activity + "&executor=" + executor + "";
  48.                                         //这个类主要是设置邮件
  49.                                         MailSenderInfo mailInfo = new MailSenderInfo();
  50.                                         mailInfo.setMailServerHost("smtp.126.com");//发送者邮箱的host
  51.                                         mailInfo.setMailServerPort("25");
  52.                                         mailInfo.setValidate(true);
  53.                                         mailInfo.setUserName("song_ning_ning@126.com");
  54.                                         mailInfo.setPassword("SONGNINGNING0327");//您的邮箱密码
  55.                                         mailInfo.setFromAddress("song_ning_ning@126.com");
  56.                                         mailInfo.setToAddress(email);
  57.                                         mailInfo.setSubject(personName + "   " + title + "   " + (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(date));
  58.                                         mailInfo.setContent("<a href=" + url + ">请点击此链接去处理</a>");
  59.                                         //这个类主要来发送邮件
  60.                                         SimpleMailSender sms = new SimpleMailSender();
  61.                                         sms.sendHtmlMail(mailInfo);//发送html格式
  62.                                 }
  63.                         }
  64.                 }
  65.         }
  66. }
复制代码
2.在UI/demo/actions/process/integration下新建login.j文件 实现登陆功能 代码如下:
  1. import java.io.IOException;
  2. import java.sql.Date;

  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;

  6. import org.json.JSONException;
  7. import org.json.JSONObject;

  8. import com.justep.biz.client.ActionEngine;
  9. import com.justep.biz.client.ActionResult;
  10. import com.justep.biz.client.ActionUtils;


  11. public class Login extends com.justep.ui.impl.JProcessorImpl  {

  12.         @Override
  13.         public void execute(HttpServletRequest request, HttpServletResponse response)
  14.                         throws ServletException, IOException {
  15.                 JSONObject content = null;
  16.                 String bsessionid = request.getParameter("bsessionid");
  17.                 String username = null;
  18.                 String password = null;
  19.                 String task=null;
  20.                 String eUrl=null;
  21.                 String process=null;
  22.                 String activity=null;
  23.                 String executor=null;
  24.                 ActionResult checkResult = ActionEngine.checkSession(bsessionid, ActionUtils.JSON_CONTENT_TYPE);
  25.                 if (checkResult.isSessionTimeOut()) {
  26.                         username = request.getParameter("username");
  27.                         password = request.getParameter("password");
  28.                         task=request.getParameter("task");
  29.                         eUrl=request.getParameter("eUrl");
  30.                         process=request.getParameter("process");
  31.                         activity=request.getParameter("activity");
  32.                         executor=request.getParameter("executor");
  33.                         String ip = request.getRemoteAddr();
  34.                         String language = "zh_CN";
  35.                         Date loginDate = new Date(System.currentTimeMillis());
  36.                         ActionResult actionResult = ActionEngine.login2(username, password, ip, language, loginDate, null, ActionUtils.JSON_CONTENT_TYPE, null);;
  37.                         content = (JSONObject)actionResult.getContent();
  38.                         bsessionid = actionResult.getBSessionID();
  39.                 } else {
  40.                         content = (JSONObject)checkResult.getContent();
  41.                 }

  42.                 try {
  43.                         content.put("bsessionid", bsessionid);
  44.                 } catch (JSONException e) {
  45.                         e.printStackTrace();
  46.                 }
  47.                 response.setCharacterEncoding("UTF-8");
  48.                 String url="http://192.168.1.58:8080/x5/Test/email/process/email/publicActivity.w?eUrl="+eUrl+"&task="+task+"&activity-pattern=do&process="+process+"&activity="+activity+"&$log=1&bsessionid="+bsessionid+"&executor="+executor+"&language=zh_CN";
  49.                 response.sendRedirect(url);
  50.         }
  51.         
  52. }
复制代码
3.在UI/Test/email/process/email(对于本例子的路径)下新建publicActivity.w文件 在.w文件增加组件windowFrame 并设置高和宽为100%  区别在外部打开的代办还是在平台内部打开的代办  方便注销用户
   在model的onload事件中写如下代码:
  1. publicActivity.model1Load = function(event){
  2.         var eUrl=justep.Request.URLParams['eUrl'];
  3.         var task=justep.Request.URLParams['task'];
  4.         var process=justep.Request.URLParams['process'];
  5.         var activity=justep.Request.URLParams['activity'];
  6.         var bsessionid=justep.Request.URLParams['bsessionid'];
  7.         var executor=justep.Request.URLParams['executor'];
  8.         var url="http://192.168.1.58:8080/x5"+eUrl+"?task="+task+"&activity-pattern=do&process="+process+"&activity="+activity+"&$log=1&bsessionid="+bsessionid+"&executor="+executor+"&language=zh_CN";
  9.         var windowFrame=justep.xbl('windowFrame1');
  10.         windowFrame.open("待办任务",url);
  11. };
复制代码
4.在punlicActivity.js 文件中加入以下代码:实现处理完结果后关闭页面注销当前用户
  1. window.onbeforeunload = function(){
  2.     var bsessionid=justep.Request.URLParams['bsessionid'];
  3.         var flag=justep.Request.URLParams['flag'];
  4.                 $.ajax({
  5.                                 async: false,
  6.                                 type: 'POST',
  7.                                 dataType: 'json',
  8.                                 url: 'http://192.168.1.58:8080/x5/UI/demo/actions/process/integration/x5Logout.j?bsessionid='  + bsessionid,
  9.                                 data: {},
  10.                                 error: function(error, status, text) {
  11.                                         alert('注销失败:' + text);
  12.                                 },
  13.                                 success: function(result){
  14.                                         if (result.flag) {
  15.                                                 alert("X5注销成功!");
  16.                                         } else {
  17.                                                 alert('注销失败:' + result.message);
  18.                                         };
  19.                                 }
  20.                         });
  21. }
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
发表于 2013-12-4 14:49:32 | 显示全部楼层
谢谢,很有帮助!
但有个问题,不知怎么回事,貌似loadPerson处理扩展字段有些问题,请帮看看,thx
X5 version = 5.2.4.2249

                List   exts = new ArrayList();
                exts.add("sMail");

                com.justep.system.opm.api.Person person = PersonHelper.loadPerson(t.getExecutorPersonID(), exts);
                personName=person.getName();
                email=(String) person.getExtValue("sMail");


Caused by: com.justep.model.exception.ModelException: 执行ksql:select SA_OPPerson.sMail SA_OPPerson, SA_OPPerson.version,                 SA_OPPerson.sCode, SA_OPPerson.sName,                 SA_OPPerson.sLoginName, SA_OPPerson.sPassword,                 SA_OPPerson.sValidState, SA_OPPerson.sMainOrgID, SA_OPPerson.sNumb, SA_OPPerson.sIDCard         from SA_OPPerson SA_OPPerson where ((SA_OPPerson='C5383020ACC64BDDA9B42FC3BA5D9ECB')) 时出错!
        at com.justep.system.data.impl.TableUtilsImplement.ksqlSelect(Unknown Source)
        at com.justep.system.data.impl.TableUtilsImplement.ksqlSelect(Unknown Source)
        at com.justep.system.data.impl.TableUtilsImplement.ksqlSelect(Unknown Source)
        at com.justep.system.data.KSQL.select(Unknown Source)
        at com.justep.system.opm.api.PersonHelper.loadPersons(Unknown Source)
        at com.justep.system.opm.api.PersonHelper.loadPerson(Unknown Source)
        at PurProcess.businessActivity1AfterAdvance(PurProcess.java:177)
        ... 37 more
Caused by: com.justep.system.ksql.matcher.TokenMatchException: OPPerson.sMail ^^SA_OPPerson, SA 中未找到需要的token, 位置:25 需要下列之一:FROM

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-12-5 08:43:18 | 显示全部楼层
localhost 发表于 2013-12-4 14:49
谢谢,很有帮助!
但有个问题,不知怎么回事,貌似loadPerson处理扩展字段有些问题,请帮看看,thx
X5 vers ...

那不是提示你了  OPPerson.sMail 后面缺少逗号
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
发表于 2013-12-5 13:48:43 | 显示全部楼层
这个是系统提供的方法拼接的sql哦
您是说
exts.add("sMail");  --》exts.add("sMail,");
这里要加吗?

8

主题

75

帖子

375

积分

中级会员

Rank: 3Rank: 3

积分
375
QQ
发表于 2013-12-24 10:12:44 | 显示全部楼层
Caused by: java.lang.NoClassDefFoundError: MailSenderInfo

8

主题

75

帖子

375

积分

中级会员

Rank: 3Rank: 3

积分
375
QQ
发表于 2013-12-24 14:51:40 | 显示全部楼层
求大神解答!!!!!!!!!!!!!!!!!!!!!!!!!
Caused by: java.lang.NoClassDefFoundError: MailSenderInfo

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-12-24 16:48:08 | 显示全部楼层
peacegao 发表于 2013-12-24 14:51
求大神解答!!!!!!!!!!!!!!!!!!!!!!!!!
Caused by: java.lang.NoClassDefFoundErr ...

检查下MailSenderInfo这类在哪 是否引用对了
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

8

主题

75

帖子

375

积分

中级会员

Rank: 3Rank: 3

积分
375
QQ
发表于 2013-12-24 17:19:09 | 显示全部楼层
logic/code/dsrc 目录下

8

主题

75

帖子

375

积分

中级会员

Rank: 3Rank: 3

积分
375
QQ
发表于 2013-12-24 17:21:23 | 显示全部楼层
mail.jar 只要引了就可以吧,runtime\BusinessServer\WEB-INF\lib 下也有 用哪个?
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 10:42 , Processed in 0.067017 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表