理论
什么是工作流
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。
工作流有哪些模块
数据库表介绍(5.x/6.x)
详情参照: Activiti表结构介绍
Activiti 使用到的表都是ACT_
开头的。表名的第二部分用两个字母表明表的用途。
- ACT_GE_ (
GE
) 表示 general 全局通用数据及设置,各种情况都使用的数据。 - ACT_HI_ (
HI
) 表示 history 历史数据表,包含着程执行的历史相关数据,如结束的流程实例,变量,任务,等等 - ACT_ID_ (
ID
) 表示 identity 组织机构,用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。 - ACT_RE_ (
RE
) 表示 repository 存储,包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。 - ACT_RU_ (
RU
) 表示 runtime 运行时,运行时的流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
25 张表详情
一般数据 (ACT_GE_)
表名 | 解释 |
---|---|
ACT_GE_BYTEARRAY | 二进制数据表,存储通用的流程定义和流程资源。 |
ACT_GE_PROPERTY | 系统相关属性,属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。 |
流程历史记录 (ACT_HI_)
表名 | 解释 |
---|---|
ACT_HI_ACTINST | 历史节点表 |
ACT_HI_ATTACHMENT | 历史附件表 |
ACT_HI_COMMENT | 历史意见表 |
ACT_HI_DETAIL | 历史详情表,提供历史变量的查询 |
ACT_HI_IDENTITYLINK | 历史流程人员表 |
ACT_HI_PROCINST | 历史流程实例表 |
ACT_HI_TASKINST | 历史任务实例表 |
ACT_HI_VARINST | 历史变量表 |
用户用户组表 (ACT_ID_)
表名 | 解释 |
---|---|
ACT_ID_GROUP | 用户组信息表 |
ACT_ID_INFO | 用户扩展信息表 |
ACT_ID_MEMBERSHIP | 用户与用户组对应信息表 |
ACT_ID_USER | 用户信息表 |
流程定义表 (ACT_RE_)
表名 | 解释 |
---|---|
ACT_RE_DEPLOYMENT | 部署信息表 |
ACT_RE_MODEL | 流程设计模型部署表 |
ACT_RE_PROCDEF | 流程定义数据表 |
运行实例表 (ACT_RU_)
表名 | 解释 |
---|---|
ACT_RU_EVENT_SUBSCR | 运行时事件 throwEvent、catchEvent 时间监听信息表 |
ACT_RU_EXECUTION | 运行时流程执行实例 |
ACT_RU_IDENTITYLINK | 运行时流程人员表,主要存储任务节点与参与者的相关信息 |
ACT_RU_JOB | 运行时定时任务数据表 |
ACT_RU_TASK | 运行时任务节点表 |
ACT_RU_VARIABLE | 运行时流程变量数据表 |
其它
表名 | 解释 |
---|---|
ACT_EVT_LOG | 事件日志 |
ACT_PROCDEF_INFO | 流程定义的动态变更信息 |
关键对象
- Deployment(流程部署对象)
- ProcessDefinition(流程定义)
- ProcessInstance(流程实例)
流程实例,启动流程时创建,表示一次工作流业务的数据实体在Activiti中Execution和ProcessInstance都用于获取当前流程实例的相关信息。当流程中没有分支时,
Execution
等同于ProcessInstance
,甚至连ID也相同;当流程中存在分支(fork, parallel gateway),则在分支口会形成子Execution,在下一个gateway才会合并(joined), 继承自Execution(执行流/计划),在它基础上扩展了部分方法
- Execution(执行流/计划)
- Task(任务)
任务,在Activiti中的Task仅指有角色参与的任务,即定义中的UserTask。
- User(用户)
- Group(用户组)
八大关键接口(EngineServices)
RepositoryService(资源管理)
是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。 除了部署流程定义以外还可以:
- 查询引擎中的发布包和流程定义。
- 暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
- 获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
- 获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。
RuntimeService(流程运行管理)
它是activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
- 启动流程及对流程数据的控制
- 流程实例(ProcessInstance)与执行流(Execution)查询
- 触发流程操作、接受信息和信号
TaskService(任务管理)
是activiti的任务管理类。可以从这个类中获取任务的信息。
- 对用户任务管理和流程的控制
- 设置用户任务的权限信息(拥有者、候选人、办理人)
- 针对用户任务添加任务附件、任务评论和时间记录
HistoryService(历史管理)
是activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径等等。
- 管理流程实例结束后的历史数据
- 构建历史数据的查询对象
- 根据流程实例ID删除流程历史数据
IdentityService(用户身份管理)
IdentityService(用户身份管理)
- 管理用户
- 管理用户组
- 用户和用户组之间的关系管理
FormService(表单管理)
是activiti的表单管理类,一个可选服务。即使不使用它,Activiti也可以完美运行, 不会损失任何功能。这个服务提供了启动表单和任务表单两个概念。 启动表单会在流程实例启动之前展示给用户, 任务表单会在用户完成任务时展示
ManagementService(管理服务)
6.0版本新增加的管理服务,相对入侵性比较高。提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
DynamicBpmnService(动态流程定义服务)
6.0版本新增加的管理服务,相对入侵性比较高。提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
快速启动
所需工具
Eclipse Activiti Designer(好用)
Web Activiti Designer(方便)
pom
使用5.23版本,排除自带的mybatis
<dependency>
<groupid>org.activiti</groupid>
<artifactid>activiti-engine</artifactid>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<artifactid>mybatis</artifactid>
<groupid>org.mybatis</groupid>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>org.activiti</groupid>
<artifactid>activiti-spring</artifactid>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupid>org.activiti</groupid>
<artifactid>activiti-modeler</artifactid>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupid>org.activiti</groupid>
<artifactid>activiti-diagram-rest</artifactid>
<version>${activiti.version}</version>
</dependency>
与spring boot整合
package cn.xxm.activiti.config;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
public class ActivitiConfig {
/**
* 流程配置,与spring整合采用SpringProcessEngineConfiguration这个实现
*/
@Bean
public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager){
SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
processEngineConfiguration.setDataSource(dataSource);
processEngineConfiguration.setDatabaseSchemaUpdate("true");
processEngineConfiguration.setDatabaseType("mysql");
processEngineConfiguration.setTransactionManager(transactionManager);
//流程图字体
processEngineConfiguration.setActivityFontName("宋体");
processEngineConfiguration.setAnnotationFontName("宋体");
processEngineConfiguration.setLabelFontName("宋体");
return processEngineConfiguration;
}
/**
* 流程引擎,与spring整合使用factoryBean
*/
@Bean
public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration){
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
return processEngineFactoryBean;
}
/**
* 八大接口
*/
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine){
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine){
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine){
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine){
return processEngine.getHistoryService();
}
@Bean
public FormService formService(ProcessEngine processEngine){
return processEngine.getFormService();
}
@Bean
public IdentityService identityService(ProcessEngine processEngine){
return processEngine.getIdentityService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine){
return processEngine.getManagementService();
}
@Bean
public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine){
return processEngine.getDynamicBpmnService();
}
}
来源:oschina
链接:https://my.oschina.net/u/2555967/blog/3165481