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

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

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

      (六)、Activiti 流程變量

      (六)、Activiti 流程變量

       

       

       

      一、什么是流程變量

      官網介紹: https://www.activiti.org/userguide/#apiVariables

      流程變量在 activiti 中是一個非常重要的角色,流程運轉有時需要靠流程變量,業務系統和 activiti結合時少不了流程變量,流程變量就是 activiti 在管理工作流時根據管理需要而設置的變量。

      比如在請假流程流轉時如果請假天數大于 3 天則由總經理審核,否則由人事直接審核,請假天數就可以設置為流程變量,在流程流轉時使用。

      注意:雖然流程變量中可以存儲業務數據可以通過 activiti 的 api 查詢流程變量從而實現 查詢業務數據,但是不建議這樣使用,因為業務數據查詢由業務系統負責,activiti 設置流程變量是為了流程執行需要而創建。

       

      二、流程變量類型

      String、Integer、short、long、double、boolean、date、binary、serializable。

      注意:如果將 pojo 存儲到流程變量中,必須實現序列化接口 serializable,為了防止由于新增字段無法反序列化,需要生成 serialVersionUID。

       

      三、流程變量作用域

      流程變量的作用域默認是一個流程實例(processInstance),也可以是一個任務(task)或一個執行實例(execution),這三個作用域流程實例的范圍最大,可以稱為 global 變量,任務和執行實例僅僅是針對一個任務和一個執行實例范圍,范圍沒有流程實例大,稱為 local 變量。

      • global 變量中變量名不允許重復,設置相同名稱的變量,后設置的值會覆蓋前設置的變量值。
      • Local 變量由于在不同的任務或不同的執行實例中,作用域互不影響,變量名可以相同沒有影響。
      • Local 變量名也可以和 global 變量名相同,沒有影響。

       

      四、流程變量使用方法

      • 第一步:設置流程變量
      • 第二步:通過 UEL 表達式使用流程變量

      可以在 assignee 處設置 UEL 表達式,表達式的值為任務的負責人。比如:${assignee},assignee 就是一個流程變量名稱
      Activiti 獲取 UEL 表達式的值 ,即流程變量 assignee 的值 ,將 assignee 的值作為任務的負責人進行任務分配
      可以在連線上設置 UEL 表達式,決定流程走向。
      比如:${price>=10000}和${price<10000}: price 就是一個流程變量名稱,uel 表達式結果類型為布爾類型。如果 UEL 表達式是 true,要決定 流程執行走向。

      1、在啟動流程時設置流程變量,變量的作用域是整個流程實例。

      通過 map設置流程變量,map 中可以設置多個變量,這個 key 就是流程變量的名字。

      //啟動流程實例,同時還要設置流程變量的值
          // act_ge_bytearray
          // act_ru_variable
          @Test
          public  void process1( ) {
              //1.得到ProcessEngine
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到RuntimeService
              RuntimeService runtimeService =  processEngine.getRuntimeService();
      
              //3.流程定義的key問題   myProcess_1
              String key = "holiday";
              Map<String ,Object> map = new HashMap<>();
              Holiday holiday = new Holiday();
              holiday.setNum(5);
              map.put("holidayObject",holiday);
      
              //4.啟動流程實例,并且設置流程變量的值
              ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, map);
      
              //5.輸出實例信息
              System.out.println(processInstance.getName());
              System.out.println(processInstance.getProcessDefinitionId());
          }

      2、任務辦理時設置流程變量

      在完成任務時設置流程變量,該流程變量只有在該任務完成后其它結點才可使用該變量,它的作用域是整個流程實例,如果設置的流程變量的 key 在流程實例中已存在相同的名字則后設置的變量替換前邊設置的變量。

      這里需要在創建請假單任務完成時設置流程變量。

       @Test
          public void variable2() {
              //1.得到ProcessEngine
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到TaskService
              TaskService taskService = processEngine.getTaskService();
      
              //3.查詢當前用戶是否有任務
              String key = "holiday";
              Task task = taskService.createTaskQuery().processDefinitionKey(key)
                      .taskAssignee("zhangsan").singleResult();
      
              //初始化一些參數
              Map<String ,Object> map = new HashMap<>();
      
              Holiday holiday = new Holiday();
              holiday.setNum(5);
              map.put("holiday",holiday);
      
              //4.判斷task!=null,說明當前用戶有任務
              if(task!=null){
                  taskService.complete(task.getId(),map);//完成任務時,設置流程變量的值
                  System.out.println("任務執行完畢");
              }
          }

      3、通過當前流程實例設置

      通過流程實例 id 設置全局變量,該流程實例必須未執行完成。

       // 通過流程實例id,來測試流程變量
          public void variable3() {
              //1.得到ProcessEngine
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
              //2.得到RuntimeService
              RuntimeService runtimeService =  processEngine.getRuntimeService();
      
              //3.流程定義的key問題   myProcess_1
              //Map<String ,Object> map = new HashMap<>();
      
              Holiday holiday = new Holiday();
              holiday.setNum(5);
              // map.put("holiday",holiday);
      
              //4.通過實例id,來設置流程變量
              //第一個參數:流程實例的id
              //第二個參數:流程變量名
              //第三個變量:流程變量名,所對應的值
              runtimeService.setVariable("2501","holiday",holiday);
          }

      也可以通過 runtimeService.getVariable()獲取流程變量

      4、 通過當前任務設置

      // 通過任務id設置流程變量,來測試流程變量
          public void variable4(){
              //當前待辦任務id
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              String taskId="1404";
              TaskService taskService = processEngine.getTaskService();
              Holiday holiday = new Holiday();
              holiday.setNum(3F);
              //通過任務設置流程變量
                      taskService.setVariable(taskId, "holiday", holiday);
              //一次設置多個值
              //taskService.setVariables(taskId, variables)
          }

       

      五、設置 local 流程變量

      1 辦理任務時設置

      任務辦理時設置 local 流程變量,當前運行的流程實例只能在該任務結束前使用,任務結束該變量無法在當前流程實例使用,可以通過查詢歷史任務查詢。

       // 辦理任務時設置local流程變量
          @Test
          public void variable1() {
              ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
              //任務id
              String taskId = "";
              TaskService taskService = processEngine.getTaskService();
              // 定義流程變量
              Map<String, Object> variables = new HashMap<String, Object>();
              Holiday holiday = new Holiday();
              holiday.setNum(3F);
      
              //變量名是holiday,變量值是holiday對象
              variables.put("holiday", holiday);
              // 設置local變量,作用域為該任務
              taskService.setVariablesLocal(taskId, variables);
              taskService.complete(taskId);
          }

      說明:設置作用域為任務的 local 變量,每個任務可以設置同名的變量,互不影響。

       

      六、數據庫表操作

      設置流程變量會在當前執行流程變量表,同時也會在歷史執行變量表插入記錄。

      # 當前正在執行的流程變量表
      SELECT * FROM act_ru_variable
      # 歷史執行流程變量表
      SELECT * FROM act_hi_varinst

       

      posted @ 2022-04-09 16:04  鄧維-java  閱讀(603)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色天天天综合网色天天| 久久成人国产精品免费软件| 蜜桃亚洲一区二区三区四| 亚洲成人一区二区av| 国产成人亚洲综合app网站| 中文字幕日韩有码国产| 久久精品国产精品亚洲艾| 青青青青久久精品国产| 亚洲码亚洲码天堂码三区| 中文字幕人妻精品在线| 国产无套白浆一区二区| 里番全彩爆乳女教师| 亚洲一区中文字幕第十页| 久久精品女人的天堂av| 国产精品免费观看色悠悠| 大香伊蕉在人线国产最新2005| 性xxxx搡xxxxx搡欧美| 欧美黑人大战白嫩在线| 欧美激情一区二区三区成人 | 久久毛片少妇高潮| julia无码中文字幕一区| 性欧美VIDEOFREE高清大喷水 | 亚洲一区二区偷拍精品| 国产精品天干天干综合网| 久久综合激情网| 吉川爱美一区二区三区视频| 又大又粗又硬又爽黄毛少妇 | 亚洲永久精品免费在线看| 亚洲中文无码永久免费| 亚洲av成人午夜福利| 亚洲国产精品线观看不卡| 鲁丝一区鲁丝二区鲁丝三区| 国产日韩av二区三区| 日韩av熟女人妻一区二| 2022亚洲男人天堂| av色蜜桃一区二区三区| 蜜桃一区二区三区免费看| 国产AV一区二区三区| 性色av无码久久一区二区三区| 麻豆精产国品一二三区区| 国产免费网站看v片元遮挡|