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

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

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

      (七)、Activiti 組任務

      (七)、Activiti 組任務

       

       

      1、簡介

      在流程定義中在任務結點的 assignee 固定設置任務負責人,在流程定義時將參與者固定設置在.bpmn 文件中,如果臨時任務負責人變更則需要修改流程定義,系統可擴展性差。針對這種情況可以給任務設置多個候選人,可以從候選人中選擇參與者來完成任務。

       

      二、 設置任務候選人

      在流程圖中任務節點的配置中設置 candidate-users(候選人),多個候選人之間用逗號分開。

       查看 bpmn 文件:

       我們可以看到部門經理的審核人已經設置為 zhangsan,lishi 這樣的一組候選人,可以使用activiti:candiateUsers=”用戶 1,用戶 2,用戶 3”的這種方式來實現設置一組候選人。

      用戶組的關系:

      • Assignee :直接設置任務執行人
      • Candidate-user:設置候選用戶,格式:wangwu,zhangsan,zhaoliu 依然要指定具體的用戶信息
      • Candiate-Groups:特點不需要知道具體的用戶信息只需要知道組名就可以

       

      三、辦理組任務

      1、根據候選人查詢組任務

      /**
           *查詢候選用戶的組任務
           */
          @Test
          public  void test2(){
              //1.得到ProcessEngine對象
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //2.得到TaskService對象
              TaskService taskService = processEngine.getTaskService();
              //3.設置一些參數,流程定義的key,候選用戶
              String key = "holiday";
              String candidate_users="zhangsan";
              //4.執行查詢
              List<Task> list = taskService.createTaskQuery()
                      .processDefinitionKey(key)
                      .taskCandidateUser(candidate_users)//設置候選用戶
                      .list();
              //5.輸出
              for(Task task :list){
                  System.out.println(task.getProcessInstanceId());
                  System.out.println(task.getId());
                  System.out.println(task.getName());
                  System.out.println(task.getAssignee());//為null,說明當前的zhangsan只是一個候選人,并不是任務的執行人
              }
          }

       

      2、用戶拾取組任務

      候選人員拾取組任務后該任務變為自己的個人任務。

      /**
           * 測試zhangsan用戶,來拾取組任務
           * 抽取任務的過程就是將候選用戶轉化為真正任務的負責人(讓任務的assignee有值)
           * @param
           */
          @Test
         public void test3() {
              //1.得到ProcessEngine對象
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //2.得到TaskService對象
              TaskService taskService = processEngine.getTaskService();
              //3.設置一些參數,流程定義的key,候選用戶
              String key = "holiday";
              String candidate_users="zhangsan";
              //4.執行查詢
              Task task = taskService.createTaskQuery()
                      .processDefinitionKey(key)
                      .taskCandidateUser(candidate_users)//設置候選用戶
                      .singleResult();
              if(task!=null){
                  taskService.claim(task.getId(),candidate_users);//第一個參數任務ID,第二個參數為具體的候選用戶名
                  System.out.println("任務拾取完畢!");
              }
          }

      說明:即使該用戶不是候選人也能拾取,建議拾取時校驗是否有資格組任務拾取后,該任務已有負責人,通過候選人將查詢不到該任務

      3、用戶查詢個人待辦任務

      /**
           * 當前的用戶查詢自己的待辦任務
           * @param
           */
          @Test
          public  void test4() {
              //1.得到ProcessEngine對象
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到TaskService對象
              TaskService taskService = processEngine.getTaskService();
      
              //3.設置一些參數,流程定義的key,用戶
              String key = "holiday";
              String assignee="zhangsan";
      
              //4.執行查詢
              List<Task> list = taskService.createTaskQuery()
                      .processDefinitionKey(key)
                      .taskAssignee(assignee)  //設置任務的負責人
                      .list();
              //5.輸出
              for(Task task :list){
                  System.out.println(task.getProcessInstanceId());
                  System.out.println(task.getId());
                  System.out.println(task.getName());
                  System.out.println(task.getAssignee());//任務的執行人
              }
          }

       

      4、用戶辦理個人任務

      /**
       * 用戶辦理個人任務,當前用戶完成自己的任務
       * @param
       */
      @Test
      public void test5() {
          //1.得到ProcessEngine對象
          ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
          //2.得到TaskService對象
          TaskService taskService = processEngine.getTaskService();
      
          //3.設置一些參數,流程定義的key,用戶
          String key = "holiday";
          String assignee="lisi";
      
          //4.執行查詢
          Task task = taskService.createTaskQuery()
                  .processDefinitionKey(key)
                  .taskAssignee(assignee)  //設置任務的負責人
                  .singleResult();
          //5.執行當前的任務
          if(task!=null){
              taskService.complete(task.getId());
              System.out.println("任務執行完畢!");
          }
      
      }

       

      5、歸還組任務

      如果個人不想辦理該組任務,可以歸還組任務,歸還后該用戶不再是該任務的負責人

      // 歸還組任務,由個人任務變為組任務,還可以進行任務交接
      @Test
      public void setAssigneeToGroupTask() {
      // 查詢任務使用TaskService
      TaskService taskService = processEngine.getTaskService();
      // 當前待辦任務
      String taskId = "6004";
      // 任務負責人
      String userId = "zhangsan2";
      // 校驗userId是否是taskId的負責人,如果是負責人才可以歸還組任務
      Task task = taskService.createTaskQuery().taskId(taskId)
      .taskAssignee(userId).singleResult();
      if (task != null) {
      // 如果設置為null,歸還組任務,該 任務沒有負責人
      taskService.setAssignee(taskId, null);
      }
      }

      說明:建議歸還任務前校驗該用戶是否是該任務的負責人。也可以通過 setAssignee 方法將任務委托給其它用戶負責,注意被委托的用戶可以不是候選人(建議不要這樣使用)

       

      6、任務交接

      任務交接,任務負責人將任務交給其它候選人辦理該任務

      /**
           *任務交接,前提要保證當前用戶是這個任務的負責人,這時候他才可以有權限去將任務交接給其他候選人
           * @param
           */
          public void test6() {
              //1.得到ProcessEngine對象
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到TaskService對象
              TaskService taskService = processEngine.getTaskService();
      
              //3.設置一些參數,流程定義的key,用戶
              String key = "holiday";
              String assignee="zhangsan";
      
              //4.執行查詢
              Task task = taskService.createTaskQuery()
                      .processDefinitionKey(key)
                      .taskAssignee(assignee)  //設置任務的負責人
                      .singleResult();
              //5.判斷是否有這個任務
              if(task!=null){
                  taskService.setAssignee(task.getId(),"lisi");//交接任務為lisi  ,交接任務就是一個候選人拾取用戶的過程
                  System.out.println("交接任務完成~!");
              }
          }

       

      四、數據庫表操作

      # 任務執行表記錄當前執行的任務
      SELECT * FROM act_ru_task
      
      # 任務參與者記錄,如果當前 任務設置了候選人,會想該表插入候選人記錄,有幾個候選人就會插入幾個
      SELECT * FROM act_ru_identitylink
      
      # 任務參者與歷史記錄表
      SELECT * FROM act_hi_identitylink

       

      posted @ 2022-04-09 17:35  鄧維-java  閱讀(751)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产蜜臀av在线一区二区| 亚洲精品麻豆一区二区| 国产精品成人免费视频网站京东| 午夜国产精品福利一二| 国产精品一区二区三区日韩| av小次郎网站| 毛片内射久久久一区| 日韩精品一区二区亚洲专区| 亚洲啪啪精品一区二区的| AV无码免费不卡在线观看| 亚洲高清免费在线观看| 亚洲日韩精品一区二区三区| 久久精品国产亚洲av成人| 岛国岛国免费v片在线观看 | 老熟妇仑乱一区二区视頻| 精品亚洲香蕉久久综合网| 亚洲色成人一区二区三区 | 亚洲美免无码中文字幕在线| 亚洲AV成人片不卡无码| 免费看黄色亚洲一区久久| 在线看免费无码的av天堂| 国产精品福利自产拍在线观看| 欧美极品少妇×xxxbbb| 中文字幕人妻有码久视频| 欧洲亚洲精品免费二区| 亚洲 欧洲 无码 在线观看| 狠狠色噜噜狼狼狼色综合久| 东京热无码国产精品| 欧美亚洲精品中文字幕乱码| 百色市| 亚洲国产成人综合精品| 亚洲色一区二区三区四区| 亚洲VA成无码人在线观看天堂| av无码精品一区二区三区| 欧美成人黄在线观看| 亚洲人成亚洲人成在线观看| 成人性生交大片免费看| 四虎永久精品在线视频| 亚洲日韩国产精品第一页一区 | 午夜免费视频国产在线| 好大好硬好爽免费视频|