5.5.任務(wù)到達(dá)提醒

2023-07-03 17:18 更新
在之前配置任務(wù)節(jié)點(diǎn)時(shí),我們提到,在配置窗口當(dāng)中有四塊內(nèi)容可供配置,其中最后兩塊是任務(wù)提醒與任務(wù)過期。我們先來看看任務(wù)提醒配置頁,如下圖所示。

提醒基本可分為兩大類,既提醒一次及周期性提醒,因?yàn)槎际强梢暬渲?,比較簡單,這里就不再贅述了。這里需要重點(diǎn)提出的是提醒時(shí)采用的消息模版及發(fā)送提供消息的方法,對(duì)于消息模版的選擇,我們需要在ORM模塊中提供的消息模版維護(hù)中定義,如下圖所示:

可以看到,在定義消息模版時(shí),我們需要選擇類型,比如上圖中的jBPM4消息模版這個(gè)類型,一旦選擇好類型后,在模版的名稱及內(nèi)容定義兩個(gè)地方我們就可以使用這個(gè)模版提供的相關(guān)變量,比如上圖中的jBPM4消息模版的相關(guān)變量,實(shí)際上,消息模版類型及相關(guān)變量定義,都是通過一個(gè)接口的實(shí)現(xiàn)類定義的,這個(gè)接口名叫IMessageVariableRegister,下面是其源碼 :
IMessageVariableRegister接口源碼
package com.bstek.bdf2.core.business;
import java.util.Collection;
import com.bstek.bdf2.core.model.MessageVariable;
/**
 * @author Jacky.gao
 * @since 2013-3-24
 */
public interface IMessageVariableRegister {
 String getTypeId();
 String getTypeName();
 Collection<MessageVariable> getMessageVariables();
}
我們來看看jBPM4消息模版這個(gè)類型的接口實(shí)現(xiàn)類源碼 :
實(shí)現(xiàn)類示例
package com.bstek.bdf2.jbpm4.context;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import com.bstek.bdf2.core.model.MessageVariable;
import com.bstek.bdf2.jbpm4.service.IBpmService;
/**

 * @author Jacky.gao
 * @since 2013-3-25
 */
public class DefaultJbpm4MessageVariableRegister extends AbstractJbpm4MessageVariableRegister{
 private IBpmService bpmService;
 private String taskName="taskName";
 private String principal="principal"; 
 private String taskCreateDate="taskCreateDate"; 
 public Collection<MessageVariable> getMessageVariables() {
 List<MessageVariable> result=new ArrayList<MessageVariable>();
 MessageVariable var=new MessageVariable();
 var.setName(IBpmService.BUSINESS_ID);
 var.setDesc("業(yè)務(wù)數(shù)據(jù)ID");
 result.add(var);
 
 var=new MessageVariable();
 var.setName(taskCreateDate);
 var.setDesc("任務(wù)創(chuàng)建時(shí)間");
 result.add(var);
 var=new MessageVariable();
 var.setName(principal);
 var.setDesc("任務(wù)處理人");
 result.add(var);
 
 var=new MessageVariable();
 var.setName(taskName);
 var.setDesc("任務(wù)名稱");
 result.add(var);
 
 var=new MessageVariable();
 var.setName(IBpmService.PROCESS_INSTANCE_PROMOTER);
 var.setDesc("流程實(shí)例發(fā)起人");
 result.add(var);
 return result;
 }
 public Map<String, String> fetchMessages(Task task,String assignee) {
 SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 TaskService taskService=bpmService.getTaskService();
 Map<String, String> map=new HashMap<String,String>();
 map.put(principal, assignee);
 map.put(taskName, task.getName());
 map.put(taskCreateDate, sd.format(task.getCreateTime()));
 map.put(IBpmService.BUSINESS_ID,(String)taskService.getVariable(task.getId(),
IBpmService.BUSINESS_ID));
 map.put(IBpmService.PROCESS_INSTANCE_PROMOTER,(String)taskService.getVariable(task.getId(),
IBpmService.PROCESS_INSTANCE_PROMOTER));
 return map;
 }
 public IBpmService getBpmService() {
 return bpmService;
 }
 public void setBpmService(IBpmService bpmService) {

 this.bpmService = bpmService;
 }
}
上面這個(gè)實(shí)現(xiàn)類是擴(kuò)展自AbstractJbpm4MessageVariableRegister類的,下面是這個(gè)類源碼:
AbstractJbpm4MessageVariableRegister類源碼
public abstract class AbstractJbpm4MessageVariableRegister implements
IJbpm4MessageVariableRegister {
 public String getTypeId() {
 return TYPE;
 }
 public String getTypeName() {
 return "jBPM4消息模版";
 }
}
到這里,您應(yīng)該明白了如果添加自己的消息模版類型以及如何為jBPM4消息模版添加新的變量。

介紹完消息模版,接下來我們來看看發(fā)送提醒消息方法,點(diǎn)擊配置按鈕,可以看到如下圖所示的消息發(fā)送器列表:
從上圖當(dāng)中可以看到,默認(rèn)采用的是系統(tǒng)提供的email及站內(nèi)消息兩種消息發(fā)送器,我們可以選擇一個(gè),也可以兩個(gè)都選擇。如果我們有自己的消息發(fā)送方法,比如發(fā)送手機(jī)短信,那么我們只需要編寫一個(gè)IMessageSender接口的實(shí)現(xiàn)類,并將其配置到spring當(dāng)中即可,實(shí)際上系統(tǒng)默認(rèn)提供的email及站內(nèi)消息兩種消息發(fā)送器就是通過實(shí)現(xiàn)該接口定義的,該接口源碼如下:
IMessageSender接口源碼
package com.bstek.bdf2.core.message;
/**
 * @author Jacky.gao
 * @since 2013-3-28
 */
public interface IMessageSender {
 String getSenderId();
 String getSenderName();
 void send(MessagePacket message);
 boolean isDisabled();
}
接口比較簡單,這里就不再解釋了,如果您實(shí)在不理解,可以參考系統(tǒng)默認(rèn)提供的email及站內(nèi)消息兩種消息發(fā)送器實(shí)現(xiàn)類(EmailMessageSender及InternalMessageSender)。
值得注意的是,一旦我們配置了任務(wù)提醒功能,那么在完成任務(wù)時(shí),我們一定要記得調(diào)用IBpmService接口中的cancelTaskReminder,不然任務(wù)雖然完成了,但任務(wù)提醒還會(huì)繼續(xù)運(yùn)行。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)