欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

activiti工作流学习总结

程序员文章站 2024-01-01 23:47:28
...
最近学习activiti,这个开源框架内部有23张表,每张表具体什么作用以及表与表之间的关系,通过一个例子来说明。附件中有流程图,包括bpmn和png格式的,还有acitiviti.cfg.xml文件和BaseSpringJunit4TestCase类文件。
至于怎么画流程图,怎么安装activit_designer这里就不说了,网上搜下,很多的。好了,废话少说,开干!


package org.activiti.designer.test;

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

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

import org.activiti.designer.test.utils.DateUtil;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricFormProperty;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricVariableUpdate;
import org.activiti.engine.impl.persistence.entity.HistoricDetailVariableInstanceUpdateEntity;
import org.activiti.engine.repository.ProcessDefinition;
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.junit.Rule;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

public class NewLeaveDynamicFormTest extends BaseSpringJunit4TestCase{

@Rule
public ActivitiRule activitiRule = new ActivitiRule();


@Autowired
RepositoryService repositoryService;


@Autowired
TaskService taskService;

@Autowired
HistoryService historyService;

@Test
@Deployment(resources="diagrams/newLeave.bpmn")
public void testDynamicFormTest(){
IdentityService identityService=activitiRule.getIdentityService();
assertNotNull(identityService);
FormService formService=activitiRule.getFormService();
assertNotNull(formService);
String currentUserId="lihao";
identityService.setAuthenticatedUserId(currentUserId);
/**
* 启动流程  做三件事
* 1. 将bpmn文件和png文件保存入act_ge_bytearray表
* 2.在act_re_deployment中记录部署信息
* 3.在act_re_procdef记录流程定义信息,此表与act_re_deployment关联
*/
ProcessDefinition processDefination=repositoryService.createProcessDefinitionQuery().processDefinitionKey("newLeave").singleResult();
Map<String,String> variables=new HashMap<String,String>();
variables.put("startDate", "2018-5-28");
variables.put("endDate", "2018-5-29");
variables.put("reason", "公休");
/**
* 1.act_hi_actinst表中插入2条记录,叫做历史节点信息(开始信息和下一步待审批的信息)
* 2.将form表单信息和变量信息记入act_hi_detail表中
* 3.在act_hi_identitylink历史流程人员表中记录开始信息和领导审批所在的组信息
* 4.在act_hi_procinst表中记录历史流程实例信息(开始事件信息)
* 5 在act_hi_taskinst历史任务实例表中记录下一步任务的信息
* 6.在act_hi_varinst表中记录表单信息
* 7.在act_ru_identitylink表中记录运行时流程人员表,主要存储任务节点与参与者的相关信息
* 8.在act_ru_task记录运行时任务节点信息
* 9.在act_ru_variable表中记录运行时表单字段及字段值
*/
//
ProcessInstance processInstance=formService.submitStartFormData(processDefination.getId(), variables);
assertNotNull(processInstance);
//部门领导审批通过         1 在ACT_RU_TASK中查询task_def_key为deptLeader的数据并返回
Task deptLeaderTask=taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();
variables=new HashMap<String,String>();
variables.put("deptLeaderApprove", "true"); //设置审批通过标志
/**
*  1.act_hi_varinst表中增加一条部门领导审批通过的记录
*  2.删掉ACT_RU_TASK表中领导审批的任务节点
*  3.ACT_RU_TASK表中插入一条人力审批的任务节点    ACT_RU_TASK表中记录的是下一步该谁审批了(该干什么了)
*  4.act_hi_taskinst表中记录一条人力审批的信息
*  5.act_hi_identitylink记录一条人力的信息
*  6.在act_hi_detail表中 记录审批变量和变量值信息
*  7.act_hi_actinst 表中记录信息 act_hi_actinst 表主要记录业务流程走到哪一步了

*/

formService.submitTaskFormData(deptLeaderTask.getId(), variables);
//人事审批通过
Task hrTask=taskService.createTaskQuery().taskCandidateGroup("hr").singleResult();
variables=new HashMap<String,String>();
variables.put("hrApprove", "true"); //设置审批通过标志            
//与部门领导审批类似
formService.submitTaskFormData(hrTask.getId(), variables);
//销假 (根据申请人的用户Id读取)    1 在ACT_RU_TASK中查询assignee字段=currentUserId 的数据并返回
Task reportBackTask=taskService.createTaskQuery().taskAssignee(currentUserId).singleResult();
variables=new HashMap<String,String>();
variables.put("reportBackDate", DateUtil.getDate()); //设置审批通过标志                
formService.submitTaskFormData(reportBackTask.getId(),variables);
//验证流程是否已经结束
HistoricProcessInstance historicProcessInstance=historyService.createHistoricProcessInstanceQuery().finished().singleResult();
assertNotNull(historicProcessInstance);
//读取历史变量
Map<String,Object> historyVariables=packetVariables(processInstance);
//验证执行结果
assertEquals("ok",historyVariables.get("result"));
}

private Map<String,Object> packetVariables(ProcessInstance processInstance){
Map<String,Object> historyVariables=new HashMap<String,Object>();
//查询act_hi_detail表中proc_inst_id为processInstance.getId() 的所有数据并返回
List<HistoricDetail> list=historyService.createHistoricDetailQuery().processInstanceId(processInstance.getId()).list();
for(HistoricDetail historicDetail:list){
if(historicDetail instanceof HistoricFormProperty){
HistoricFormProperty field=(HistoricFormProperty)historicDetail;
historyVariables.put(field.getPropertyId(), field.getPropertyValue());
System.out.println("form field:taskId="+field.getTaskId()+",="+field.getPropertyId()+"="+field.getPropertyValue());
}else if (historicDetail instanceof HistoricVariableUpdate){
HistoricDetailVariableInstanceUpdateEntity variable=(HistoricDetailVariableInstanceUpdateEntity)historicDetail;
historyVariables.put(variable.getName(), variable.getValue());
System.out.println("variable:"+variable.getVariableName()+",="+variable.getValue());
}

}
return historyVariables;
}

}

上一篇:

下一篇: