1.工程的主要目录结构

\"\"

\"\"

2.给出ConfigHistoryLevelTest部分的源码供参考

package com.imooc.activiti.myconfig;

import com.google.common.collect.Maps;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.logging.LogMDC;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.engine.test.Deployment;
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 org.spring work.core.LocalVariableTableParameterNameDiscoverer;

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

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

public class ConfigHistoryLevelTest {
    private static final Logger LOGGER = LoggerFactory
            .getLogger(ConfigHistoryLevelTest.class);
    @Rule
    public ActivitiRule activitiRule = new
            ActivitiRule(\"activiti_historylevel.cfg. \");

    @Test
    @Deployment(resources = {\"com/imooc/activiti/my-process.bpmn20. \"})
    public void test() {
        //启动流程,流程启动完成后向流程中传入一个参数
        startProcessInstance();
        //修改变量。获取当前执行的对象,遍历并输出
        changeVariable();
        //提交表单 task。采用submitTaskFormData方式,它的property两个都是string类型
        submitTaskFormData();

        //输出历史活动
        showHistoryActivity();
        //输出历史变量
        showHistoryVariable();
        //输出历史用户任务
        showHistoryTask();
        //输出历史表单
        showHistoryForm();
        //输出历史详情
        showHistoryDetail();
    }

    private void showHistoryDetail() {
        List<HistoricDetail> historicDetails = activitiRule
                .getHistoryService()
                .createHistoricDetailQuery().listPage(0, 100);
        for(HistoricDetail historicDetail : historicDetails){
            LOGGER.info(\"historicDetail = {}\", toString(historicDetail));
        }
        LOGGER.info(\"historicDetails.size = {}\", historicDetails.size());
    }

    private void showHistoryForm() {
        List<HistoricDetail> historicDetailsForm = activitiRule
                .getHistoryService()
                .createHistoricDetailQuery()
                .formProperties()
                .listPage(0, 100);//输出历史详情
        for(HistoricDetail historicDetail : historicDetailsForm){
            LOGGER.info(\"historicDetail = {}\", toString(historicDetail));
        }
        LOGGER.info(\"historicDetailsForm.size = {}\",
                historicDetailsForm.size());
    }

    private void showHistoryTask() {
        List<HistoricTaskInstance> historicTaskInstances =
        activitiRule.getHistoryService()
                .createHistoricTaskInstanceQuery()
                .listPage(0,100);
        for(HistoricTaskInstance historicTaskInstance :
                historicTaskInstances){
            LOGGER.info(\"historicTaskInstance = {}\", historicTaskInstance);

        }
        LOGGER.info(\"historicTaskInstances.size = {}\",
                historicTaskInstances.size());
    }

    private void showHistoryVariable() {
        List<HistoricVariableInstance> historicVariableInstances
                = activitiRule.getHistoryService()
                .createHistoricVariableInstanceQuery().listPage(0, 100);
        for(HistoricVariableInstance historicVariableInstance :
                historicVariableInstances){
            LOGGER.info(\"historicVariableInstance = {}\",
                    historicVariableInstance);
        }
        LOGGER.info(\"historicVariableInstances.size = {}\",
                historicVariableInstances.size());
    }

    private void showHistoryActivity() {
        List<HistoricActivityInstance> historicActivityInstances
                = activitiRule.getHistoryService()
                .createHistoricActivityInstanceQuery()
                .listPage(0,100);
        for(HistoricActivityInstance historicActivityInstance :
                historicActivityInstances){
            LOGGER.info(\"historicActivityInstance = {}\",
                    historicActivityInstance);
        }
        LOGGER.info(\"historicActivityInstance.size = {}\",
                historicActivityInstances.size());
    }

    private void submitTaskFormData() {
        Task task = activitiRule.getTaskService()
                .createTaskQuery().singleResult();
        Map<String, String> properties = Maps.newHashMap();
        properties.put(\"formKey1\", \"valuef1\");
        properties.put(\"formkey2\", \"valuef2\");
        activitiRule.getFormService()
                .submitTaskFormData(task.getId(),properties);
    }

    private void changeVariable() {
        List<Execution> executions = activitiRule
                .getRuntimeService()
                .createExecutionQuery()
                .listPage(0, 100);
        for(Execution execution : executions){
            LOGGER.info(\"execution = {}\",execution);
        }
        LOGGER.info(\"execution.size = {}\", executions.size());
        String id = executions.iterator().next().getId();
        activitiRule.getRuntimeService()
                .setVariable(id, \"keyStart1\", \"value1_\");//对参数进行修改
    }

    private void startProcessInstance() {
        Map<String,  > params = Maps.newHashMap();
        params.put(\"keyStart1\", \"value1\");
        params.put(\"keyStart2\", \"value2\");
        ProcessInstance processInstance = activitiRule.getRuntimeService()
                .startProcessInstanceByKey(\"my-process\",params);
    }

    static String toString(HistoricDetail historicDetail){
        return ToStringBuilder.reflectionToString(historicDetail,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}

3.给出activiti_historylevel.cfg. 的源码供参考

<?  version=\"1.0\" encoding=\"UTF-8\"?>
<beans  ns=\"http://www.spring work.org/schema/beans\" 
        ns:xsi=\"http://www.w3.org/2001/ Schema-instance\"
       xsi:schemaLocation=\"http://www.spring work.org/schema/beans   http://www.spring work.org/schema/beans/spring-beans.xsd\">


  <bean id=\"processEngineConfiguration\" class=\"org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration\">
    <property name=\"commandInvoker\" ref=\"commandInvoker\" />
    <!--<property name=\"history\" value=\"none\" />-->
    <!--<property name=\"history\" value=\"activity\"/>-->
    <property name=\"history\" value=\"audit\" />
    <!--<property name=\"history\" value=\"full\" />-->
  </bean>

  <bean id=\"commandInvoker\" class=\"com.imooc.activiti.interceptor.MDCCommandInvoker\"/>

</beans>

4.讲解:activiti的历史记录级别分为以上四种:none, activity, audit, full

   级别分别由低到高能够显示不同的日志级别信息:

  • none: 不记录历史流程,性能高,流程结束后不可读取
  • activiti: 归档流程实例和活动实例,流程变量不同步
  • audit: 默认值,在activiti基础上同步变量值,保存表单属性
  • full: 性能较差,记录所有实例和变量细节变化

 

收藏 打印