Activiti框架學習記錄-02

Activiti框架學習記錄-02

本篇主要是Activiti工作流框架的學習記錄,以及對於該框架的基本使用和一些淺顯的理解:

  • 1、工作流框架Activiti中的幾個重要對象
  • 2、Activiti中對於歷史數據的查詢
  • 3、Activiti中對於流程數據的設置

1、工作流框架Activiti中的幾個重要對象

  • 查詢對象
    DeploymentQuery:查詢部署表act_re_deployment
    ProcessDefinitionQuery:查詢流程定義表act_re_procdef
    ProcessInstanceQuery:查詢流程實例表act_ru_execution
    TaskQuery:查詢任務表act_ru_task

  • 幾個和表對應的對象(接口)
    Deployment:對應查詢部署表act_re_deployment
    ProcessDefinition:對應流程定義表act_re_procdef
    ProcessInstance:對應流程實例表act_ru_execution
    Task:對應任務表act_ru_task

  • 幾個Service對象
    RepositoryService:部署流程定義,查詢流程定義,查詢流程定義文件名稱等靜態資源信息
    RuntimeService:啓動流程實例,查詢流程實例,刪除流程實例
    TaskService:查詢任務、辦理任務
    HistoryService:查詢歷史數據
    IdentityService:操作用戶表和組表

2、工作流框架Activiti中對於歷史數據的查詢

1)準備工作(在Activiti框架學習記錄-01中已經有比較詳細的描述):

  • 畫圖:
    歷史流程數據例子所用流程圖

  • 流程引擎定義:

     // 提供了門面做任何操作都會需要使用到該對象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  • 流程定義:
    // 部署流程定義
    @Test
    public void test1() {
        // 門面設計模式
        // 流程定義
        DeploymentBuilder deploymentBuilder = 
                processEngine.getRepositoryService().createDeployment();
        deploymentBuilder.addClasspathResource("com/yq/activiti/history/history.bpmn");
        deploymentBuilder.addClasspathResource("com/yq/activiti/history/history.png");
        deploymentBuilder.deploy();
    }
  • 流程實例:
    // 啓動流程實例
    @Test
    public void test2() {
        // 流程圖ID
        String processDefinitionKey = "lssj";
        // 根據key啓動實例會保證版本的最新的性質
        processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
    }
  • 辦理任務:
    //辦理任務
    @Test
    public void test3() {
        String taskId = "904"; //任務ID
        // 辦理任務
        processEngine.getTaskService().complete(taskId);
    }

2)歷史數據查詢:

  • 查詢歷史流程實例
    // 查詢歷史流程實例
    @Test
    public void test4() {
        // act_hi_procinst
        // 流程實例歷史查詢
        HistoricProcessInstanceQuery query =
                processEngine.getHistoryService().createHistoricProcessInstanceQuery();
        List<HistoricProcessInstance> instances = 
                query.list();
        for (HistoricProcessInstance historicProcessInstance : instances) {
            System.out.println(historicProcessInstance.getId() + 
                    "\t" + historicProcessInstance.getStartTime() + 
                    "\t" + historicProcessInstance.getEndTime());
        }
    }
  • 查詢歷史任務數據
    // 歷史任務數據
    @Test
    public void test5() {
        // act_hi_taskinst
        // 歷史任務數據查詢
        HistoricTaskInstanceQuery query = 
                processEngine.getHistoryService().createHistoricTaskInstanceQuery();
        List<HistoricTaskInstance> instances = 
                query.list();
        //在真正的系統排序是相當重要的一個亮點功能
        query.orderByProcessInstanceId();
        query.orderByHistoricTaskInstanceStartTime().asc();
        for (HistoricTaskInstance historicTaskInstance : instances) {
            System.out.println(historicTaskInstance.getId() + 
                    "\t" + historicTaskInstance.getName() + 
                    "\t" + historicTaskInstance.getStartTime() +
                    "\t" + historicTaskInstance.getEndTime());
        }
    }
  • 查詢歷史活動數據
    @Test
    public void test6() {
        //歷史活動實例查詢對象,查詢表:act_hi_actinst
        HistoricActivityInstanceQuery query = 
                processEngine.getHistoryService().createHistoricActivityInstanceQuery();
        query.orderByProcessInstanceId();
        query.orderByHistoricActivityInstanceStartTime().asc();

        List<HistoricActivityInstance> instances = query.list();
        for (HistoricActivityInstance historicActivityInstance : instances) {
            System.out.println(historicActivityInstance.getProcessInstanceId() + 
                    "\t" + historicActivityInstance.getActivityName());
        }
    }

3、工作流框架Activiti中對於流程數據的設置

1)準備工作(在Activiti框架學習記錄-01中已經有比較詳細的描述):
activiti流程數據設置
- 代碼準備工作

    // 提供了門面做任何操作都會需要使用到該對象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 部署流程定義
    @Test
    public void test1() {
        // 門面設計模式
        // 流程定義
        DeploymentBuilder deploymentBuilder = 
            processEngine.getRepositoryService().createDeployment();
    deploymentBuilder.addClasspathResource("com/yq/activiti/variable/variable.bpmn");
    deploymentBuilder.addClasspathResource("com/yq/activiti/variable/variable.png");
        deploymentBuilder.deploy();
    }

2)流程數據設置

    //設置流程變量的方法一:啓動流程實例時候進行設置
    @Test
    public void test2() {
        String processDefinitionKey = "qjlc";
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("key1", "vaule1");
        variables.put("key2", 1500);
        variables.put("username", "王虎");//從session中獲取當前登錄用戶的名稱
        ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey,variables);
        System.out.println(instance.getId());
    }
    //設置流程變量方法二:辦理任務同時設置任務變量(比較合理的一個方法)
    @Test
    public void test3() {
        String taskId = "1804";
        Map<String,Object> variables = new HashMap<String, Object>();
        variables.put("qjts", 5);
        variables.put("qjyy", "不想上班");
        variables.put("qjr", new User(1, "admin", 24));
        processEngine.getTaskService().complete(taskId,variables);
    }
    //設置流程變量方法三:RuntiomeService的Set方法進行設置
    @Test
    public void test4() {
        String executionId  = "1301";//流程實例ID
        String variableName = "k3";//流程變量名稱
        String variableValue= "v3";//流程變量value
        //設置流程變量,設置流程變量的兩種方式
        processEngine.getRuntimeService().
            setVariable(executionId, variableName, variableValue);

        Map<String,Object> variables = new HashMap<String, Object>();
        variables.put("k4", "v4");

        processEngine.getRuntimeService().
            setVariables(executionId, variables);
    }
    //設置流程變量方式四:TaskService的set方法設置
    public void test5() {
        String taskId = "1002"; //任務ID
        //設置一個流程變量
        processEngine.getTaskService().setVariable(taskId, "qjsj", 5);
    }

2)流程數據獲取

    //獲取流程變量方式一:使用RuntimeService的get方法獲取
    @Test
    public void test6() {
        String executionId = "1701";
        //獲取一個流程變量
        User user = (User) processEngine.getRuntimeService().getVariable(executionId, "qjr");
        System.out.println(user);

        //獲取多個流程變量
        Map<String, Object> variables = processEngine.getRuntimeService().getVariables(executionId);
        Set<String> keySet = variables.keySet();
        for (String key : keySet) {
            Object value = variables.get(key);
            System.out.println(key + "-->" + value);
        }
    }
    //獲取流程變量方式二:使用TaskSErvice的get方式獲取
    @Test
    public void test7() {
        String taskId = "1905";
        //獲取一個流程變量
        User user = (User) processEngine.getTaskService().getVariable(taskId, "qjr");
        System.out.println(user);
        //獲取當前任務所在流程實例(801)範圍內所有的流程變量
        Map<String ,Object> variables = processEngine.getTaskService().getVariables(taskId);
        Set<String> keySet = variables.keySet();
        for (String key : keySet) {
            Object value = variables.get(key);
            System.out.println(key + "-->" + value);
        }

    }
發佈了29 篇原創文章 · 獲贊 16 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章