<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ( 五 )、Activiti 用戶任務

      ( 五 )、Activiti 用戶任務

       

       

       

      一、分配任務負責人

      1.1 固定分配

      填寫assignee為項目負責人。注意事項:由于固定分配方式,任務只管一步一步執行任務,執行到每一個任務將按照 bpmn 的配置去分配任務負責人。

      1.2、表達式分配(官網介紹

      1.2.1 UEL 表達式方式

      Activiti 使用 UEL 表達式,UEL 是 java EE6 規范的一部分,UEL(Unified Expression Language)即統一表達式語言,activiti 支持兩個 UEL 表達式:UEL-value 和 UEL-method。

      UEL-value 定義如下:

      assignee 這個變量是 activiti 的一個流程變量。或:

       user 也是 activiti 的一個流程變量,user.assignee 表示通過調用 user 的 getter 方法獲取值。

      1.2.2、 UEL-method 方式

       userBean 是 spring 容器中的一個 bean,表示調用該 bean 的 getUserId()方法。

      1.2.3 、UEL-method 與 UEL-value 結合

      再比如:

      ${ldapService.findManagerForEmployee(emp)}

      ldapService 是 spring 容器的一個 bean,findManagerForEmployee 是該 bean 的一個方法,emp 是 activiti流程變量,emp 作為參數傳到 ldapService.findManagerForEmployee 方法中。

      1.2.4 、其它

      表達式支持解析基礎類型、bean、list、array 和 map,也可作為條件判斷。如下:

      ${order.price > 100 && order.price < 250}

      1.2.5 代碼演示

      設置流程變量,在啟動流程實例時設置流程變量,如下:

       /**
           * 啟動流程實例,設置流程變量
           */
          @Test
          public void startInstance3() {
      
              String processDefinitionKey = "holiday2";
      
              //定義流程變量
              Map<String, Object> variables = new HashMap<String, Object>();
              //設置流程變量assignee
              variables.put("assignee", "張三");
      
              //1.得到ProcessEngine對象
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到RunService對象
              RuntimeService runtimeService = processEngine.getRuntimeService();
      
              //3.創建流程實例  流程定義的key需要知道 holiday
              ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
      
              //4.輸出實例的相關信息
              System.out.println("流程部署ID" + processInstance.getDeploymentId());//null
              System.out.println("流程定義ID" + processInstance.getProcessDefinitionId());//holiday:1:4
              System.out.println("流程實例ID" + processInstance.getId());//2501
              System.out.println("活動ID" + processInstance.getActivityId());//null
          }

       

      1.2.6 注意事項

      由于使用了表達式分配,必須保證在任務執行過程表達式執行成功,比如:

      某個任務使用了表達式 ${order.price > 100 && order.price < 250},當執行該任務時必須保證 order 在流程變量中存在,否則 activiti 異常

       

      1.3監聽器分配

      任務監聽器是發生對應的任務相關事件時執行自定義 java 邏輯 或表達式。任務監聽事件包括:

      idea插件中沒有,在Camunda modeler中可以查詢。

      java 邏輯 或表達式:

      表達式參考上邊介紹的 UEL 表達式,這里主要介紹監聽類使用。定義任務監聽類,且類必須實現 org.activiti.engine.delegate.TaskListener 接口

      public class MyTaskListener implements TaskListener {
          @Override
          public void notify(DelegateTask delegateTask) {
              delegateTask.setAssignee("zhangsan");
          }
      }

      使用監聽器分配方式,按照監聽事件去執行監聽類的 notify 方法,方法如果不能正常執行也會影響任務的執行。

       

      二、查詢任務

      2.1 查詢任務負責人的待辦任務

      taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).includeProcessVariables().taskAssignee(assignee).list();

         // 查詢當前個人待執行的任務
          @Test
          public void findPersonalTaskList() {
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
          // 流程定義key
              String processDefinitionKey = "holiday2";
          // 任務負責人
              String assignee = "zhangsan";
          // 創建TaskService
              TaskService taskService = processEngine.getTaskService();
              List<Task> list = taskService.createTaskQuery()//
                      .processDefinitionKey(processDefinitionKey)//
                      .includeProcessVariables().taskAssignee(assignee).list();
              for (Task task : list) {
                  System.out.println("----------------------------");
                  System.out.println("流程實例id:" + task.getProcessInstanceId());
                  System.out.println("任務id:" + task.getId());
                  System.out.println("任務負責人:" + task.getAssignee());
                  System.out.println("任務名稱:" + task.getName());
              }
          }

      2.2 關聯businesskey查詢

      需求:

      在 activiti 實際應用時,查詢待辦任務可能要顯示出業務系統的一些相關信息,比如:查詢待審批請假單任務列表需要將請假單的日期、請假天數等信息顯示出來,請假天數等信息在業務系統中存在,而并沒有在 activiti 數據庫中存在,所以是無法通過 activiti 的 api 查詢到請假天數等信息。

      在查詢待辦任務時,通過 businessKey(業務標識 )關聯查詢業務系統的請假單表,查詢出請假天數等信息。

       // 查詢當前個人待執行的任務,關聯businesskey
          @Test
          public void findPersonalTaskList2() {
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              // 1.流程定義key
              String processDefinitionKey = "holiday";
              // 任務負責人
              String assignee = "zhangsan";
      
              //2.創建TaskService
              TaskService taskService = processEngine.getTaskService();
              //3.通過taskservice查詢到個人任務
              Task task = taskService.createTaskQuery()
      .processDefinitionKey(processDefinitionKey)
      .includeProcessVariables().taskAssignee(assignee).singleResult();
      //4.通過task獲得流程實例id String processInstanceId = task.getProcessInstanceId(); //5.創建runtimeservice RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); //6.根據processInstance對象,得到businessKey String businessKey = processInstance.getBusinessKey(); //7.根據businessKey就可以得到請假單的信息 System.out.println("businessKey:"+businessKey); }

       

      三、處理任務

      指定任務 id,調用 TaskService 完成任務:注意:在實際應用中,完成任務前需要校驗任務的負責人是否具有該任務的辦理權限。

        /**
           * 處理任務 根據task_ID
           */
          @Test
          public void dealTask() {
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //任務id
              String taskId = "25005";
              //任務負責人
              String assign = "zhangsan";
      
              // 創建TaskService
              TaskService taskService = processEngine.getTaskService();
      
              //校驗用戶是否有權限處理任務:
              //這里只指定任務id并沒有指定任務負責人,只要調用complete,該任務就完成
              //所以說必須完成任務前校驗
              //校驗方法:
              //根據任務id和任務負責人assignee查詢當前任務,如果查到說該用戶有完成該任務權限,否則沒有權限
              Task task = taskService.createTaskQuery().taskId(taskId).taskAssignee(assign).singleResult();
              if(task != null){
                  taskService.complete(taskId);
                  System.out.println("完成任務");
              }
          }

       

      posted @ 2022-04-09 15:20  鄧維-java  閱讀(681)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 高青县| 少妇激情一区二区三区视频小说| 色道久久综合亚洲精品蜜桃| 猫咪社区免费资源在线观看| 思茅市| 伊人色综合九久久天天蜜桃| 中文字幕亚洲综合第一页| 在线亚洲午夜理论av大片| 国产福利社区一区二区| 久久亚洲精精品中文字幕| 亚洲精品无码日韩国产不卡av| 全免费A级毛片免费看无码| 国产精品午夜福利精品| 久久这里只精品热免费99| 午夜男女爽爽影院免费视频下载| 97免费人妻在线视频| 男女无遮挡激情视频| 国产系列高清精品第一页| 亚洲aⅴ男人的天堂在线观看| 免费A级毛片无码A∨蜜芽试看| 亚洲国产精品美日韩久久| 91产精品无码无套在线| 99精品国产综合久久久久五月天| 亚洲区精品区日韩区综合区| 伊人久久大香线蕉AV网禁呦| 色午夜一av男人的天堂| 久久亚洲精品国产精品| 国产一区二区三区四区五区加勒比 | 亚洲国产成人无码电影| 永久免费无码av在线网站| 日本高清视频网站www| 夜色福利站WWW国产在线视频| 日韩人妻无码一区二区三区99| 国产性色av高清在线观看 | 天天澡天天揉揉av无码| 国产性生大片免费观看性| 99精品人妻少妇一区| 一本久道久久综合狠狠躁av| 久久综合老鸭窝色综合久久| 国产69精品久久久久久妇女迅雷| 日韩丝袜欧美人妻制服|