activiti實戰七(通過監聽器發郵件)
1、使用spring的郵件封裝類
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>xxxcom</value>
</property>
<property name="port">
<value>25</value>
</property>
<property name="protocol" value="smtp"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="username">
<value>xxx</value> <!-- 傳送者使用者名稱 -->
</property>
<property name="password">
<value>xxx</value> <!-- 傳送者密碼 -->
</property>
</bean>
2、在<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">中新增屬性
<property name="eventListeners">
<list>
<bean
class="xxx.activitimgmt.activitideploy.listeners.MyEventListener">
</bean>
</list>
</property>
3、建立監聽器,實現ActivitiEventListener介面
public class MyEventListener implements ActivitiEventListener {
@Autowired
private MailWrapper mailWrapper;//用於發郵件的類
@Override
public void onEvent(ActivitiEvent event) {
// System.out.println("Event received: " + event.getType());
if (event.getType() == ActivitiEventType.TASK_CREATED) {// 任務建立,當流程走到一個任務節點時,會進入這個條件
ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event;
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();
// taskEntity.getAssignee(),它是ID
Set<IdentityLink> candidates = taskEntity.getCandidates();//這個是獲取候選的
for (IdentityLink identityLink : candidates) {
System.out.println(identityLink.getGroupId());// 根據identityLink.getGroupId(),這個GroupId就是流程圖中activiti:candidateGroups對應的值。用它可以查詢該組的所有使用者,然後發郵件,讓其去審批。
}
}
if (event.getType() == ActivitiEventType.TASK_ASSIGNED) {// 任務認領,按照誰先登入誰先認領的原則,認領後會給該認領的使用者發郵件
ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event;
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();//認領後我們主要用taskEntity.getAssignee()來查詢當前使用者資訊,併發郵件
mailWrapper.sendTaskMail(taskEntity.getOwner(), taskEntity.getAssignee(), taskEntity.getName(),
event.getType());
}
if (event.getType() == ActivitiEventType.TASK_COMPLETED) {//審批完成,首先會進入下一節點,並給下一節點的使用者發郵件,之後會通過歷史流程去找到流程發起者,並將審批資訊通過郵件傳送給發起者。這裡要注意,該類不能注入historyService,因為它先於historyService存在,必須通過entityEvent.getEngineServices();去獲取。
ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event;
TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity();// 這個任務是當前做完的任務,可以理解為歷史任務了
EngineServices engineServices = entityEvent.getEngineServices();
HistoryService historyService = engineServices.getHistoryService();
TaskService taskService = engineServices.getTaskService();
ProcessInstance processInstance = taskEntity.getProcessInstance();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstance.getId()).singleResult();//根據流程ID獲取歷史流程
String startUserId = historicProcessInstance.getStartUserId();//獲取流程的發起人
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstance.getId()).list();//獲取歷史歷史流程的所有任務,包括下一節點的任務,不包括下下節點的任務
String message = "";
String userId = "";
for (HistoricTaskInstance historicTaskInstance : list) {
if (historicTaskInstance.getId().equals(taskEntity.getId())) {//找出和當前完成任務ID一致的歷史任務,並從中獲取審批資訊
List<Comment> taskComments = taskService.getTaskComments(historicTaskInstance.getId());
for (Comment comment : taskComments) {
message = comment.getFullMessage();// 審批資訊
userId = comment.getUserId();// 審批人
}
}
}
mailWrapper.sendTaskMail(message, startUserId, userId, event.getType());//不要太在意這個方法,隨便寫的
}
}
@Override
public boolean isFailOnException() {
return true;//true表示列印錯誤資訊,並拋異常,否則任務會往下執行
}
}
MailWrapper中主要還是
@Autowired
private MailSender mailSender;
public void sendTaskMail(String xxx, String assignee, String xxx, ActivitiEventType eventType) {
SimpleMailMessage msg = new SimpleMailMessage();
String toEmailAddress = "xxx@xxx.com";
msg.setSubject("hello world");
msg.setTo(toEmailAddress);
msg.setText(userName + "," + xxx+ ",來自" + userName2 + "的審批");
msg.setFrom("[email protected]");
try {
mailSender.send(msg);
} catch (MailException e) {
e.printStackTrace();
}
}
當然我們可以使用郵件模板velocity來做
相關推薦
activiti實戰七(通過監聽器發郵件)
1、使用spring的郵件封裝類 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host"><
工具類-發送郵件(通過JavaMail發送)
final string SM ttr nal support ket 實體 nts 前段時間在工作中用到了郵件發送監控的報警信息,今天在這個記錄一下JavaMail的郵件工具類。 下邊為用到的JavaMail的jar包的pom依賴。這裏用的是JavaMail的1.
Android開發——免Root監聽微信的聊天記錄(後臺祕密發郵件)
1. 首先先展示一下效果圖:2. Accessibility機制Accessibility機制之前已經介紹過了,具體可以檢視Accessibility機制實現模擬點選,需要簡單的配置(如設定被監聽的物件為微信)和實現。此文中介紹瞭如何通過Accessibility自動搶紅包,
Activiti的簡單配置與開發(通過Idea設計流程圖)
原文地址:https://blog.csdn.net/c1225992531/article/details/81181017 使用idea進行activiti工作流開發 emmm.......因為工作需要,所以要學習activiti工作流,初次學習,寫個部落格記錄一下,下次再用就知道大概流程了
機器學習筆記(十五):TensorFlow實戰七(經典卷積神經網路:VGG)
1 - 引言 之前我們介紹了LeNet-5和AlexNet,在AlexNet發明之後,卷積神經網路的層數開始越來越複雜,VGG-16就是一個相對前面2個經典卷積神經網路模型層數明顯更多了。 VGGNet是牛津大學計算機視覺組(Visual Geometry Group)和Google
帶著新人學springboot的應用10(springboot+定時任務+發郵件)
接上一節,環境一樣,這次來說另外兩個任務,一個是定時任務,一個是發郵件。 1.定時任務 定時任務可以設定精確到秒的準確時間去自動執行方法。 我要一個程式每一秒鐘說一句:java小新人最帥 於是,我就寫了一個方法,註解裡cron裡面的很多星星意思是:每個月、週一到週日
linux學習-mail傳送郵件(mail不能發郵件)
主機:centos 7 , 安裝sendmail,啟動sendmail,一般就可以了,但是有些同學為什麼不行,就是啟不動出現如下的情況!那現在如何解決。 yum install sendmailsystemctl start sendmail.service system
python學習筆記23(利用python發郵件和簡訊)
利用python發郵件和簡訊 發郵件: 以163郵箱為例,要利用SMTP伺服器 #發郵件的庫 import smtplib #郵件文字 from email.mime.text import MIMEText #建立基礎物件 #SMTP伺服器 SMTPServer = "smtp.
Swift IOS中的常用操作(開啟網頁、發簡訊、打電話、發郵件)
// // ViewController.swift // Other // // Created by 顧傑 on 15/11/26. // Copyright © 2015年 GuJie. All rights reserved. // import UIKit <span style="
【計算機網路】:SMTP協議詳解(如何在控制檯發郵件)
SMTP的連線和傳送過程 (a)建立TCP連線 (b)客戶端傳送HELO命令以標識發件人自己的身份,然後客戶端傳送MAIL命令; 伺服器端正希望以OK作為響應,表明準備接收 (c)客戶端傳送RCPT命令,以標識該電子郵件的計劃接收人,可以有多
javax.mail.AhenticationFailedException: 535 Err / A secure connection is requiered(java發郵件)
Java發郵件的幾種方式: JavaMail Commons Email Spring Mail 實驗場景: Spring Mail、Web Project 具體描述: 郵件伺服器: s
java傳送郵件(javaMail通過SMTP傳送郵件)
java傳送郵件一般使用在註冊賬號時、或其他通知資訊時,網站會使用郵件定時傳送、或觸發傳送郵件通知使用者; 1、我是用的是maven開發,所以需要在pom檔案中定義jar包: <dependency> <groupId>javax.
C#郵件驗證(用指定郵箱給另外的郵箱發郵件)
private void button1_Click(object sender, EventArgs e) { //發信人和收信人以及內容 MailMessage msg = new MailMessage
SpringMVC詳細示例實戰教程(較全開發教程)
服務 出現 匹配 internal int 頁面 pty ava 代碼 SpringMVC學習筆記---- 一、SpringMVC基礎入門,創建一個HelloWorld程序 1.首先,導入SpringMVC需要的jar包。 2.添加Web.xml配置文件中關於Spring
python筆記七(遞歸函數)
介紹 特征 就是 while ret 過多 class 運算 筆記 在介紹遞歸函數之前,我們先介紹以下遞歸函數的使用有以下特征: 1.遞歸函數就是函數在函數體內部調用本身 2.遞歸函數的運算規模要不斷減小,這樣才是可以運算的 3.遞歸的層數不要超過999,因為函數調用是通過
[Python] 動態函數調用(通過函數名)
context compile function icm 字符串函數 real state for 輸出結果 2018-04-09 update 利用python中的內置函數 eval() ,函數說明: def eval(*args, **kwargs): # re
SpringMVC+RestFul詳細示例實戰教程(實現跨域訪問)
java springmvc restful 跨域 一、理解 REST REST(Representational State Transfer),中文翻譯叫“表述性狀態轉移”。是 Roy Thomas Fielding 在他2000年的博士論文中提出的。它與傳統的 SOAP Web 服務區別
Python 3網絡爬蟲開發實戰.pdf(崔慶才著)
god 百萬 mitmproxy 2.2.3 協議 filter 分布式部署 基本 適合 內容簡介 · · · · · · 本書介紹了如何利用Python 3開發網絡爬蟲,書中首先介紹了環境配置和基礎知識,然後討論了urllib、requests、正則表達式、Bea
ElasticSearch實戰三(分詞和對映)
ElasticSearch的文件對映機制(mapping)用於進行欄位的型別確認,將每一個欄位匹配為一種確定的資料型別。 1 ES欄位型別 ① 基本欄位型別 字串:te
機器學習筆記(十一): TensorFlow實戰三(MNIST數字識別問題)
1 - MNIST數字識別問題 前面介紹了這樣用TensorFlow訓練一個神經網路模型和主要考慮的問題及解決這些問題的常用方法。下面我們用一個實際的問題來驗證之前的解決方法。 我們使用的是MNIST手寫數字識別資料集。在很多深度學習教程中,這個資料集都會被當做一個案例。 1.1