activiti 基础

Posted ✧*꧁一品堂.技术学习笔记꧂*✧.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activiti 基础相关的知识,希望对你有一定的参考价值。

一:activiti 入门


作者:fenng 商丘


工作流(Workflow)

就是业务过程的部分或整体在计算机应用环境下的自动化
主要解决的是“使在多个参与者之间按照某种定义的规则传递文档,信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”

工作流管理系统(WFMS)

是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境

工作流管理系统的目标

管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预

Activiti 介绍

Activiti5 是由 Alfresco 软件在 2010 年 5 月 17 日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti 基于 Apache 许可的开源 BPM 平台,创始人 Tom Baeyens 是 JBoss jBPM 的项目架构师,它特色是提供了 eclipse 插件,开发人员可以通过插件直接绘画出业务

工作流引擎

ProcessEngine 对象,这是 Activiti 工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

BPMN

业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

核心配置文件

```{bash}

activiti.cfg.xml

  1 xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"
  2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  4 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  6 

看到这里不得不感叹一下 spring 的强大,整合了 java 半壁江山

数据库

初始化数据库
方法一:

  1 //创建工作流需要的数据库 
  2 @Test
  3 public void createTable(){
  4     ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
  5     configuration.setJdbcDriver("com.mysql.jdbc.Driver");
  6     configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
  7     configuration.setJdbcUsername("root");
  8     configuration.setJdbcPassword("12345678");
  9 
 10     /**
 11          public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
 12           public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
 13           public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
 14      */
 15     configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
 16     //工作流的核心对象,ProcessEnginee对象
 17     ProcessEngine processEngine = configuration.buildProcessEngine();
 18     System.out.println("processEngine:"+processEngine);
 19     }


方法二: 由于方法一要有代码比较麻烦,所以有配置文件替代:
activiti.cfg.xml

  1 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  4 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  6 
  7 
  8 
  9 


  1 /**使用配置文件创建工作流需要的23张表*/
  2 @Test
  3 public void createTable_2(){
  4 //        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
  5 //        //工作流的核心对象,ProcessEnginee对象
  6 //        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
  7 
  8     ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")    //
  9                                 .buildProcessEngine();
 10     System.out.println("processEngine:"+processEngine);
 11 }


Activiti 用来存放流程数据一共使用了 23 张表 都是以 Act_ 开头的 底层操作使用的 mybatis 操作

工作流 Activiti 的表是用来存储流程数据的 而业务数据都需要用户自己创建和维护 一定要让业务去关联流程 才能关联工作流系统

API

流程引擎 ProcessEngine 对象
在 Activiti 中最核心的类,其他的类都是由他而来。
由流程引擎 ProcessEngine 对象创建各个 Service, 这些 Service 是调用工作流 23 张表的服务

RepositoryService 管理流程定义
RuntimeService 执行管理,包括启动,推进,删除流程实例等操作
TaskService 任务管理

HistoryService 历史管理(执行完的数据的管理)
IdentityService 组织机构管理
FormService 一个可选服务,任务表单管理
ManagerService

流程的执行过程
  1 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  2 /**部署流程定义*/
  3 @Test
  4 public void deploymentProcessDefinition(){
  5 
  6     Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
  7                     .createDeployment()//创建一个部署对象
  8                     .name("helloworld入门程序")//添加部署的名称
  9                     .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
 10                     .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
 11                     .deploy();//完成部署
 12     System.out.println("部署ID:"+deployment.getId());//1
 13     System.out.println("部署名称:"+deployment.getName());//helloworld入门程序  
 14 }
 15 /**启动流程实例*/
 16 @Test
 17 public void startProcessInstance(){
 18     //流程定义的key
 19     String processDefinitionKey = "helloword";
 20     ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
 21                     .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
 22     System.out.println("流程实例ID:"+pi.getId());//流程实例ID    101
 23     System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID   helloworld:1:4
 24 }
 25 
 26 /**查询当前人的个人任务*/
 27 @Test
 28 public void findMyPersonalTask(){
 29     String assignee = "张三";
 30     List list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
 31                     .createTaskQuery()//创建任务查询对象
 32                     .taskAssignee(assignee)//指定个人任务查询,指定办理人
 33                     .list();
 34     if(list!=null && list.size()>0){
 35         for(Task task:list){
 36             System.out.println("任务ID:"+task.getId());
 37             System.out.println("任务名称:"+task.getName());
 38             System.out.println("任务的创建时间:"+task.getCreateTime());
 39             System.out.println("任务的办理人:"+task.getAssignee());
 40             System.out.println("流程实例ID:"+task.getProcessInstanceId());
 41             System.out.println("执行对象ID:"+task.getExecutionId());
 42             System.out.println("流程定义ID:"+task.getProcessDefinitionId());
 43             System.out.println("########################################################");
 44         }
 45     }
 46 }
 47 
 48 /**完成我的任务*/
 49 @Test
 50 public void completeMyPersonalTask(){
 51     //任务ID
 52     String taskId = "204";
 53     processEngine.getTaskService()//与正在执行的任务管理相关的Service
 54                 .complete(taskId);
 55     System.out.println("完成任务:任务ID:"+taskId);
 56 }


二:Activiti 数据库表结构

1:简单概述:

  1 /*
  2 Execution 执行对象
  3 按流程定义的规则执行一次的过程.
  4 对应的表:
  5 act_ru_execution: 正在执行的信息
  6 act_hi_procinst:已经执行完的历史流程实例信息
  7 act_hi_actinst:存放历史所有完成的活动
  8 ProcessInstance 流程实例
  9 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有 1 个。
 10 注意
 11 (1)如果是单例流程,执行对象 ID 就是流程实例 ID
 12 (2)如果一个流程有分支和聚合,那么执行对象 ID 和流程实例 ID 就不相同
 13 (3)一个流程中,流程实例只有 1 个,执行对象可以存在多个。
 14 Task 任务
 15 执行到某任务环节时生成的任务信息。
 16 对应的表:
 17 act_ru_task:正在执行的任务信息
 18 act_hi_taskinst:已经执行完的历史任务信息
 19 
 20 */


2:activiti5.13 框架 数据库设计说明书

1、结构设计

1.1、    逻辑结构设计

Activiti 使用到的表都是 ACT_ 开头的。

ACTRE:

’RE’表示 repository(存储),RepositoryService 接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。


ACTRU
:

‘RU’表示 runtime,运行时表 -RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

ACTID:

’ID’表示 identity (组织机构),IdentityService 接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。


ACTHI
:

’HI’表示 history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等

ACTGE:

全局通用数据及设置 (general),各种情况都使用的数据。

以上是关于activiti 基础的主要内容,如果未能解决你的问题,请参考以下文章

片段 MyFragment 未附加到 Activity

将字符串数据从Activity发送到片段[关闭]

如何在 ViewPager 中从 Activity 移动到 Fragment?未找到片段 ID 的视图

如何将片段中的 ListView 对象的数据传递给 Activity?

片段 - 您是不是必须在包含整个 Activity 的片段周围使用 Activity Wrapper?

add application window with unknown token XXX Unable to add window;is your activity is running?(代码片段