工作流-快速入门

百般思念 提交于 2020-02-27 12:34:48

理论

什么是工作流

工作流(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 流程定义的动态变更信息

关键对象

  1. Deployment(流程部署对象)
  2. ProcessDefinition(流程定义)
  3. ProcessInstance(流程实例)

流程实例,启动流程时创建,表示一次工作流业务的数据实体在Activiti中Execution和ProcessInstance都用于获取当前流程实例的相关信息。当流程中没有分支时,Execution等同于ProcessInstance,甚至连ID也相同;当流程中存在分支(fork, parallel gateway),则在分支口会形成子Execution,在下一个gateway才会合并(joined), 继承自Execution(执行流/计划),在它基础上扩展了部分方法

  1. Execution(执行流/计划)
  2. Task(任务)

任务,在Activiti中的Task仅指有角色参与的任务,即定义中的UserTask。

  1. User(用户)
  2. Group(用户组)

八大关键接口(EngineServices)

RepositoryService(资源管理)

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。 除了部署流程定义以外还可以:

  1. 查询引擎中的发布包和流程定义。
  2. 暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
  3. 获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
  4. 获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

RuntimeService(流程运行管理)

它是activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

  1. 启动流程及对流程数据的控制
  2. 流程实例(ProcessInstance)与执行流(Execution)查询
  3. 触发流程操作、接受信息和信号

TaskService(任务管理)

是activiti的任务管理类。可以从这个类中获取任务的信息。

  1. 对用户任务管理和流程的控制
  2. 设置用户任务的权限信息(拥有者、候选人、办理人)
  3. 针对用户任务添加任务附件、任务评论和时间记录

HistoryService(历史管理)

是activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径等等。

  1. 管理流程实例结束后的历史数据
  2. 构建历史数据的查询对象
  3. 根据流程实例ID删除流程历史数据

IdentityService(用户身份管理)

IdentityService(用户身份管理)

  1. 管理用户
  2. 管理用户组
  3. 用户和用户组之间的关系管理

FormService(表单管理)

是activiti的表单管理类,一个可选服务。即使不使用它,Activiti也可以完美运行, 不会损失任何功能。这个服务提供了启动表单和任务表单两个概念。 启动表单会在流程实例启动之前展示给用户, 任务表单会在用户完成任务时展示

ManagementService(管理服务)

6.0版本新增加的管理服务,相对入侵性比较高。提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

DynamicBpmnService(动态流程定义服务)

6.0版本新增加的管理服务,相对入侵性比较高。提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

快速启动

所需工具

Eclipse Activiti Designer(好用)

插件 安装地址: https://www.activiti.org/designer/update/

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();
    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!