在實際的activiti的項目開發中,任務節點是經常用到的,今天我就在任務節點監聽器摸索了一天,網上雖然有資料但是都是各種節點都講了下卻都沒有深入,我僅僅是以今天自己碰到的困惑記錄下,希望能幫到學習activiti的同學。
任務節點的監聽只要實現TaskListener介面即可,通常我們使用activiti肯定是將流程和業務完全區分開,那肯定必不可少的用到節點監聽器,在節點監聽器中我們可以處理業務,將參數通過
taskService.setVariables(“參數名”,參數map)
將參數先傳入到activiti內建的act_variable表中,然後在節點監聽器中通過
Object value = delegateTask.getVariable(“參數名”);
取到參數來實現業務的操作。當然這就和taskService.complete(task.id,var),即和完成任務傳入網關的判斷條件的流程變數不會衝突。
通常是在完成任務時進行業務的儲存
所以將Event改成complete,當然你如果想在節點進行前進行操作就是將Event改成creat,同理assign和delete,這就是activiti靈活的地方。
記得每次添加一個監聽器需要重新部署才會生效。
下面放上我項目中的一個應用public String startTask(String jsonstring) { String processDefinitionKey = "report"; ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey); String nm_pid = processInstance.getProcessInstanceId(); //查詢上報角色的任務並完成任務 List<Task> taskSb = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).taskCandidateGroup("role_sb").list(); System.out.println(taskSb); if(taskSb != null && taskSb.size() > 0){ for(Task task : taskSb){ Map<String, Object> variables = new HashMap<String, Object>(); //存入業務變數,jsonstring是外面傳入來的參數,我直接儲存交給監聽器處理 variables.put("jsonstring", jsonstring); //任務進行時存入流程變數 taskService.setVariables(task.getId(), variables); //存入網關條件變數決定流程向哪走 Map<String, Object> map = new HashMap<String, Object>(); map.put("state",102206) taskService.complete(task.getId(),map); } }}
下面是監聽器
“`
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import cn.com.wavenet.webservices.workflow.activiti.saveData.SaveToDb;
public class FlowTaskListener_report implements TaskListener{
/**
* @return
* @return
*
*/
@Override
public void notify(DelegateTask delegateTask) {
///接收流程傳過來的參數
Object value = delegateTask.getVariable(“jsonstring”);
////這裡可以進行業務操作///
“`}