美文网首页
Activiti流程引擎及服务5-历史管理服务HistorySe

Activiti流程引擎及服务5-历史管理服务HistorySe

作者: 安安汐而 | 来源:发表于2019-08-23 08:37 被阅读0次

Demo项目代码:
https://gitee.com/AnAnXiEr/activiti6-demo

管理流程实例结束后的历史数据
构建历史数据的查询对象
根据流程实例Id删除流程历史数据

HistoryService历史数据实体

  • HistoricProcessInstance:历史流程实例实体类
  • HistoricVariableInstance:流程或任务变量值的实体
  • HistoricActivityInstance:单个活动节点执行的信息
  • HistoricTaskInstance:用户任务实例的信息
  • HistoricDetail:历史流程活动任务详细信息

HistoryService构建历史查询对象

  • create[历史数据实体]Query
  • createNative[历史数据实体]Query
  • createProcessInstanceHistoryLogQuery(包含流程实例的所有数据、task,评论等)

HistoryService删除历史查询对象

  • deleteHistoricProcessInstance(删除流程实例的所有信息)
  • deleteHistoricTaskInstance(删除task信息和对应task变量信息)

代码

HistoryServiceTest

package com.imooc.activiti.activitidemo.coreapi;

import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Maps;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.form.FormProperty;
import org.activiti.engine.form.StartFormData;
import org.activiti.engine.form.TaskFormData;
import org.activiti.engine.history.*;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceBuilder;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;

/**
 * @Description 历史服务测试
 * @Author 胡浩
 * @Date 2019/8/22
 **/
public class HistoryServiceTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(HistoryServiceTest.class);

    @Rule
    public ActivitiRule activitiRule = new ActivitiRule("coreapi/activiti_history.cfg.xml");

    /**
     *
     */
    @Test
    @org.activiti.engine.test.Deployment(resources = "coreapi/my-process.bpmn20.xml")
    public void testHistoryService() {
        HistoryService historyService = activitiRule.getHistoryService();
        //通过构造器启动
        ProcessInstanceBuilder processInstanceBuilder = activitiRule.getRuntimeService().createProcessInstanceBuilder();
        //持久变量
        Map<String, Object> variables = Maps.newHashMap();
        variables.put("key0", "value0");
        variables.put("key1", "value1");
        variables.put("key2", "value2");
        //瞬时变量
        Map<String, Object> transientVariables = Maps.newHashMap();
        transientVariables.put("tkey0", "tvalue0");
        transientVariables.put("tkey1", "tvalue1");

        ProcessInstance processInstance = processInstanceBuilder.processDefinitionKey("my-process")
                .processDefinitionKey("my-process")
                .variables(variables)//持久变量
                .transientVariables(transientVariables)//瞬时变量
                .start();
        //修改变量
        activitiRule.getRuntimeService().setVariable(processInstance.getId(), "key1", "value1_1");
        //获取任务
        Task task = activitiRule.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        //提交完成
//        activitiRule.getTaskService().complete(task.getId());

        Map<String, String> properties = Maps.newHashMap();
        properties.put("fKey1", "fValue1");
        properties.put("key1", "value_2_2");
        //使用提交表单的形式提交
        activitiRule.getFormService().submitTaskFormData(task.getId(), properties);

        //查询流程实例对象
        List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery().listPage(0, 100);
        for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
            LOGGER.info("historicProcessInstance = {}", ToStringBuilder.reflectionToString(historicProcessInstance, ToStringStyle.JSON_STYLE));
        }

        //查询流程执行节点对象
        List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery().listPage(0, 100);
        for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
            LOGGER.info("historicActivityInstance = {}", historicActivityInstance);
        }

        //查询流程Task对象
        List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().listPage(0, 100);
        for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) {
            LOGGER.info("historicTaskInstance = {}", ToStringBuilder.reflectionToString(historicTaskInstance, ToStringStyle.JSON_STYLE));
        }

        //查询流程变量
        List<HistoricVariableInstance> historicVariableInstances = historyService.createHistoricVariableInstanceQuery().listPage(0, 100);
        for (HistoricVariableInstance historicVariableInstance : historicVariableInstances) {
            LOGGER.info("historicVariableInstance = {}", historicVariableInstance);
        }

        //查询流程Details
        List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery().listPage(0, 100);
        for (HistoricDetail historicDetail : historicDetails) {
            LOGGER.info("historicDetail = {}", historicDetail);
        }

        //流程对象的唯一记录、并把历史记录以日志形式输出
        ProcessInstanceHistoryLog processInstanceHistoryLog = historyService.createProcessInstanceHistoryLogQuery(processInstance.getId())
                .includeVariables().includeFormProperties().includeComments().includeTasks()
                .includeActivities().includeVariableUpdates().singleResult();

        List<HistoricData> historicData = processInstanceHistoryLog.getHistoricData();
        for (HistoricData historicDatum : historicData) {
            LOGGER.info("historicDatum = {}", historicDatum);
        }

        //删除
        historyService.deleteHistoricProcessInstance(processInstance.getId());

        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult();
        LOGGER.info("historicProcessInstance = {}", historicProcessInstance);//应该为null、已经删了

    }
}

activiti_history.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">



    <bean class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"
          id="processEngineConfiguration">

        <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000;MVCC=TRUE" />
        <property name="jdbcDriver" value="org.h2.Driver" />
        <property name="jdbcUsername" value="sa" />
        <property name="jdbcPassword" value="" />
        <!--history配置 默认audit-->
        <!--<property name="history" value="none" />-->
        <!--<property name="history" value="activity"/>-->
        <!--<property name="history" value="audit" />-->
        <!--设置成full,方便看整个流程-->
        <property name="history" value="full" />


        <property name="databaseSchemaUpdate" value="create-drop"/>

        <!--mdc拦截-->
        <property name="commandInvoker" ref="mdcCommandInvoker"/>

        <!--eventLog配置-->
        <property name="enableDatabaseEventLogging" value="true"/>

    </bean>


    <bean class="com.imooc.activiti.activitidemo.interceptor.MDCCommandInvoker" id="mdcCommandInvoker"/>

</beans>

相关文章

网友评论

      本文标题:Activiti流程引擎及服务5-历史管理服务HistorySe

      本文链接:https://www.haomeiwen.com/subject/blaasctx.html