日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式

發布時間:2024/4/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先給大家看一下我的流程圖:

流程文件leaveBill.bpmn

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="LeaveBill" name="LeaveBillProcess" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="提交申請" activiti:assignee="${inputUser}" activiti:formKey="workflowAction_audit.action"></userTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<userTask id="usertask2" name="經紀人審批" activiti:formKey="workflowAction_audit.action">
<extensionElements>
<activiti:taskListener event="create" class="cn.itcast.ssh.utils.MangerTaskHandlerCandidateUsers"></activiti:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
<userTask id="usertask3" name="老總審批" activiti:assignee="王中軍" activiti:formKey="workflowAction_audit.action"></userTask>
<sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_LeaveBill">
<bpmndi:BPMNPlane bpmnElement="LeaveBill" id="BPMNPlane_LeaveBill">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="290.0" y="60.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0" x="255.0" y="140.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
<omgdc:Bounds height="55.0" width="105.0" x="255.0" y="230.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3">
<omgdc:Bounds height="55.0" width="105.0" x="255.0" y="310.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="290.0" y="400.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="307.0" y="95.0"></omgdi:waypoint>
<omgdi:waypoint x="307.0" y="140.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="307.0" y="195.0"></omgdi:waypoint>
<omgdi:waypoint x="307.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
<omgdi:waypoint x="307.0" y="285.0"></omgdi:waypoint>
<omgdi:waypoint x="307.0" y="310.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
<omgdi:waypoint x="307.0" y="365.0"></omgdi:waypoint>
<omgdi:waypoint x="307.0" y="400.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

---------好了進入正題,我這個例子主要是兩個地方表現了兩種動態指定任務人的例子;

  一個就是提交申請,usertask1節點的動態設置辦理人

  ---<userTask id="usertask1" name="提交申請" activiti:assignee="${inputUser}" activiti:formKey="workflowAction_audit.action"></userTask>

  --------?activiti:assignee="${inputUser}" 設置任務人,表達式使用類似于el表達式的寫法,使用activiti:assignee節點,指定辦理人。這里需要動態傳入參數來指定?

    -----------我程序中,在提交申請啟動運行請假實例時的代碼片段

        

        /**更新請假狀態,啟動流程實例,讓啟動的流程實例關聯業務*/
        @Override
        public void saveStartProcess(WorkflowBean workflowBean) {
          //1:獲取請假單ID,使用請假單ID,查詢請假單的對象LeaveBill
          Long id = workflowBean.getId();
          LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
          //2:更新請假單的請假狀態從0變成1(初始錄入-->審核中)
            leaveBill.setState(1);
          //3:使用當前對象獲取到流程定義的key(對象的名稱就是流程定義的key)
          String key = leaveBill.getClass().getSimpleName();
          /**
          * 4:從Session中獲取當前任務的辦理人,使用流程變量設置下一個任務的辦理人
          * inputUser是流程變量的名稱,
          * 獲取的辦理人是流程變量的值
          */
          Map<String, Object> variables = new HashMap<String,Object>();
         variables.put("inputUser", SessionContext.get().getName());//表示惟一用戶,通過流程變量inputUser,指定當前登錄讓人為節點辦理人
        /**
         * 5: (1)使用流程變量設置字符串(格式:LeaveBill.id的形式),通過設置,讓啟動的流程(流程實例)關聯業務
          (2)使用正在執行對象表中的一個字段BUSINESS_KEY(Activiti提供的一個字段),讓啟動的流程(流程實例)關聯業務
        */
        //格式:LeaveBill.id的形式(使用流程變量)
        String objId = key+"."+id;
        variables.put("objId", objId);
          //6:使用流程定義的key,啟動流程實例,同時設置流程變量,同時向正在執行的執行對象表中的字段BUSINESS_KEY添加業務

          //數據, 同時讓流程關聯業務
        runtimeService.startProcessInstanceByKey(key,objId,variables);

      }

二、動態指定多人處理節點任務 使用了自己實現監聽的方式。我想讓在經紀人審核這個節點上,不止指定一個人來處理,這個節點的處理人有可能會變。

?

?

  ---bpmn文件節點明細

   <userTask id="usertask2" name="經紀人審批" activiti:formKey="workflowAction_audit.action">
    <extensionElements>
      <activiti:taskListener event="create" class="cn.itcast.ssh.utils.MangerTaskHandlerCandidateUsers"></activiti:taskListener>
    </extensionElements>
   </userTask>

  -----下面是我的實現類

  

  • package cn.itcast.ssh.utils;
  • import java.util.Arrays;
  • import org.activiti.engine.delegate.DelegateTask;
  • import org.activiti.engine.delegate.TaskListener;
  • import cn.itcast.ssh.domain.Employee;
  • public class MangerTaskHandlerCandidateUsers implements TaskListener {
  • /**
  • *
  • */
  • private static final long serialVersionUID = 1L;
  • @Override
  • public void notify(DelegateTask delegateTask) {
  • System.out.println("進入MangerTaskHandlerCandidateUsers=========");
  • /**從新查詢當前用戶,再獲取當前用戶對應的領導*/
  • Employee employee = SessionContext.get();
  • //當前用戶
  • String name = employee.getName();
  • System.out.println("當前登錄人========"+name);
  • String[] empLoyees = {"馮小剛經紀人","范冰冰經紀人","馮小剛"};
  • delegateTask.addCandidateUsers(Arrays.asList(empLoyees));//完成多處理人的指定
  • System.out.println("節點任務人========馮小剛經紀人,范冰冰經紀人,馮小剛");
  • }
  • }

    ------------以上就是動態設置多用戶任務人的例子,這里我是手寫的demo,實際項目中我們可以在notify(DelegateTask delegateTask)中,通過查詢固定數據表或者緩存來,實現靈活的任務人設置。這是我的個人拙見啊。

    再啰嗦一下,如果是設置用戶組的話,這里應該是delegateTask.addCandidateGroup("某組");

    設置流程變量值:delegateTask.setVariable("inputName", "小明");//inputName流程變量名

    轉載于:https://www.cnblogs.com/bootdo/p/10687791.html

    總結

    以上是生活随笔為你收集整理的activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。