最近学习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;
}
}
分享到:
相关推荐
**正文** ...总结来说,了解并熟练掌握Activiti的常用API对于任何希望实现高效工作流管理的开发者都至关重要。通过学习这个PPT,你将能够更好地理解和应用Activiti,从而提升你的业务流程自动化能力。
总结来说,Activiti工作流是一个功能强大且灵活的流程管理工具,通过深入学习和实践本操作手册,Java开发者能够熟练掌握其使用,从而提升业务流程的自动化水平和效率。工作流使用.doc文档将提供更详细的步骤和示例,...
【工作流Activiti5学习总结】 工作流管理系统(Workflow Management System, WfMS)是企业信息化建设中的重要组成部分,它负责协调和管理业务流程。Activiti5是一款开源的工作流引擎,由Alfresco公司开发,它基于...
### Activiti工作流知识点概述 #### 一、工作流概念及其重要性 - **定义**:工作流(Workflow)指的是“业务过程的部分或整体在计算机应用环境下的自动化”,旨在通过预定义规则自动化传递文档、信息或任务的过程,...
总结来说,这个"Activiti 工作流取回的示例"涵盖了Activiti工作流引擎的关键操作,尤其是关于任务的取回和撤销。通过对这些示例的分析和实践,开发者能够增强对Activiti的理解,提升在企业级应用中实现高效工作流程...
Activiti 是一个开源的工作流和业务流程管理(BPM)引擎,它可以帮助企业构建灵活、可扩展的业务流程应用。在本项目中,我们重点探讨的是Activiti 6.0版本,它集成了Spring Boot框架,使得开发和部署流程应用程序变...
总结来说,"Activiti工作流示例源码"是一个宝贵的资源,它可以帮助开发者快速上手Activiti,掌握流程定义、流程实例管理、任务处理、流程监控等核心概念。通过研究这个示例,你可以更深入地了解如何将Activiti集成到...
在本篇博客“工作流Activiti的学习总结(十二)activiti官方十分钟快速学习”中,作者分享了关于Activiti工作流引擎的快速学习经验。Activiti是一个开源的、基于Java的企业级工作流引擎,它被广泛应用于自动化业务...
《Activiti工作流实战》是一本深入探讨工作流技术和Activiti框架的专业参考资料。该书以实战为导向,旨在帮助读者理解并掌握如何在实际项目...总之,《Activiti工作流实战》是你学习和应用Activiti不可多得的参考资料。
ACTIVITI工作流绘图是一...总结来说,"ACTIVITI工作流绘图"涵盖了使用Activiti工作流引擎进行流程建模、部署和执行的核心知识。通过学习和实践,开发者可以利用Activiti高效地实现业务流程自动化,提高企业的运作效率。
在本篇Activiti学习笔记中,我们将深入探讨工作流定义中...理解并熟练运用角色组,是提升Activiti工作流设计和管理能力的关键。通过不断的学习和实践,我们可以更好地利用Activiti构建高效、符合业务需求的工作流系统。
标题中的“工作流Activiti的学习总结(八)Activiti自动执行的应用”表明本文将探讨如何在Activiti工作流引擎中实现任务的自动化执行。Activiti是一个开源的工作流和业务流程管理(BPM)系统,广泛应用于企业级应用...
《疯狂Workflow讲义》是一本深入探讨基于Activiti工作流应用开发的专业书籍,其配套源码为学习者提供了丰富的实践素材。Activiti是一款强大的、开源的企业级工作流引擎,广泛应用于业务流程自动化和管理工作流。在...
### Activiti工作流开发知识点详解 #### 一、工作流概念与原理 1. **工作流定义**:工作流指的是“业务过程的部分或整体在计算机应用环境下的自动化”。其核心目的是通过自动化流程来提高效率,确保流程按照预定的...
`Activiti工作流.docx` 文件可能包含了一些工作流设计的实际例子,帮助读者理解 Activiti 在实际项目中的应用。通过案例学习,开发者可以更好地掌握如何定义流程模型、创建活动、设置条件分支以及处理异常等。 总结...
总结起来,Activiti工作流引擎是一个强大的工具,它可以帮助企业规范和自动化业务流程。通过本案例,你将学习如何从零开始,包括下载环境、创建流程定义、部署和启动流程,以及进行基本的操作和监控。随着对Activiti...
标题和描述中提到的...在阅读此文档时,理解上述知识点将有助于深入学习和掌握Activiti工作流引擎的应用。通过实践这些API操作和测试流程,开发者可以设计和实现复杂的业务流程,以及确保流程的正确执行和高效管理。
### Activiti流程学习总结 #### 一、工作流的基本概念 在深入了解Activiti之前,我们需要先理解工作流的概念。工作流是一种将业务过程部分或全部自动化的方法,它可以帮助组织提高工作效率,减少错误,并且能够更...