Activity工作流入门

1. 工作流概念

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

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

2. Activiti简介

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

Activiti框架底层有数据库提供支持,根据版本不同,表的数量不一致,activiti5.13有23张表。底层使用mybatis操作数据库,开发人员不需要自己编写sql

Jbpm4.4底层也有数据库支持,18张表。 底层使用hibernate操作数据库。

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

1) ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

2) ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

3) ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。

4) ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

5) ACT_GE_*: 通用数据, 用于不同场景下。

3. 安装插件(流程设计器插件)

第一步:解压zip文件到eclipse中的dropins目录中

第二步:重启eclipse,勾选save选项


第三步:使用插件设计流程图



4.手动创建数据库表

Activity自带建表脚本,选择手动建表的话,只需要选取对应数据库的脚本即可,里面包含的Create、upgrade和drop相关脚本(upgrade脚本是用于工作流版本升级时候用的),当然Activity也支持自动建表,可以参考下面的DEMO,但是不建议自动建表,本案例用的是mysql,所以我选取的是mysql的脚本




创建后应该可以看到有23张表,本教程使用的是Activity5.13

5.自定义流程

右击工程->NEW->Other->Activity->Activity Diagram,新建一个工作流模板

然后就可以开始拖拉控件设计流程了,设计好的流程,只要通过发布操作,就可以自动在数据库插入相应数据,可参考下面demo,以下是一个简单的流程:

6.入门Demo

  1. package activity.demo.test;
  2.  
  3. import java.util.List;
  4.  
  5. import org.activiti.engine.ProcessEngine;
  6. import org.activiti.engine.ProcessEngineConfiguration;
  7. import org.activiti.engine.ProcessEngines;
  8. import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;
  9. import org.activiti.engine.repository.Deployment;
  10. import org.activiti.engine.repository.DeploymentBuilder;
  11. import org.activiti.engine.repository.ProcessDefinition;
  12. import org.activiti.engine.repository.ProcessDefinitionQuery;
  13. import org.activiti.engine.runtime.ProcessInstance;
  14. import org.activiti.engine.task.Task;
  15. import org.activiti.engine.task.TaskQuery;
  16. import org.junit.Test;
  17. import org.junit.validator.PublicClassValidator;
  18.  
  19. public class HelloWorld {
  20. // 使用框架的自动建表功能(不提供配置文件)
  21. @Test
  22. public void testCreateTablesAutomaticallyWithoutConfigFiles() {
  23. // 创建流程引擎配置对象
  24. ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
  25. // 设置jdbc连接参数信息
  26. config.setJdbcDriver("com.mysql.jdbc.Driver");
  27. config.setJdbcUrl("jdbc:mysql:///eam-mirror");
  28. config.setJdbcUsername("root");
  29. config.setJdbcPassword("root");
  30. // 设置自动建表
  31. config.setDatabaseSchemaUpdate("true");
  32. // 使用配置对象创建流程引擎对象,创建对象过程中会自动建表
  33. ProcessEngine processEngine = config.buildProcessEngine();
  34. }
  35.  
  36. // 使用框架的自动建表功能(提供配置文件)
  37. @Test
  38. public void testCreateTablesAutomaticallyWithConfigFiles() {
  39. ProcessEngineConfiguration config = ProcessEngineConfiguration
  40. .createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration");
  41. ProcessEngine pe = config.buildProcessEngine();
  42. }
  43.  
  44. // 使用框架的自动建表功能(提供配置文件---使用默认配置)
  45. @Test
  46. public void testCreateTablesAutomatically() {
  47. ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
  48. }
  49.  
  50. ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
  51.  
  52. // 将设计的流程图部署到数据库中
  53. @Test
  54. public void testDeploy() {
  55. // 创建部署构建器对象,用于加载流程定义文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定义
  56. DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
  57. deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");
  58. Deployment deployment = deploymentBuilder.deploy();
  59. System.out.println(deployment.getId());
  60. }
  61.  
  62. // 查询流程定义
  63. @Test
  64. public void testQueryProcessDefinition() {
  65. // 流程定义查询对象,用于查询流程定义表----act_re_procdef
  66. ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
  67. // 添加过滤条件,取最新版本
  68. query.latestVersion();
  69. // query.processDefinitionId(processDefinitionId)
  70. // query.processDefinitionKey(processDefinitionKey);
  71. // 添加排序条件
  72. query.orderByProcessDefinitionVersion().desc();
  73.  
  74. // 添加分页条件
  75. // query.listPage(firstResult, maxResults);
  76.  
  77. // 查询所有流程
  78. List<ProcessDefinition> processDefinitionList = query.list();
  79. for (ProcessDefinition pd : processDefinitionList) {
  80. System.out.println(pd.getId());
  81. }
  82.  
  83. }
  84. // 根据流程定义启动流程实例----操作的数据表:act_ru_execution act_ru_task
  85. @Test
  86. public void testStartProcess(){
  87. String processDefinitionId = "UserAuditProcess:2:504";
  88. //根据流程实例ID去启动流程
  89. ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
  90. System.out.println(pInstance.getId());
  91. }
  92.  
  93. //查询任务列表
  94. @Test
  95. public void testQueryTaskList(){
  96. //创建任务查询对象,查询表act_ru_task
  97. TaskQuery query = pe.getTaskService().createTaskQuery();
  98. String assignee ="张三";
  99. //添加过滤条件
  100. query.taskAssignee(assignee);
  101. //排序
  102. query.orderByTaskCreateTime().desc();
  103. List<Task> taskList = query.list();
  104. for(Task task : taskList){
  105. System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());
  106. }
  107. }
  108. //办理任务
  109. //办理个人任务,操作的表是act_ru_execution,act_ru_task
  110. @Test
  111. public void testExecuteTask(){
  112. String taskId= "604";
  113. pe.getTaskService().complete(taskId);
  114. }
  115.  
  116. }

7.Activity框架学习指南

工作流Activity框架入门(一)的更多相关文章

  1. CI框架入门1

    CI框架入门: 1.url的特点             2.目录结构/布局             3.MVC分别在哪里,如何依葫芦画瓢             4.安全性             ...

  2. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  3. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

  4. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  5. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  6. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  7. C#.Net EF实体框架入门视频教程

    当前位置: 主页 > 编程开发 > C_VC视频教程 > C#.Net EF实体框架入门视频教程 > kingstone金士顿手机内存卡16G仅65元 1.EF实体框架之增加查 ...

  8. DWR3.0框架入门(2) —— DWR的服务器推送

    DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式.   1.服务器推送技术和DWR的推送方式   传统模式的 Web ...

  9. ThinkJS框架入门详细教程(二)新手入门项目

    一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...

随机推荐

  1. 009 Ceph RBD增量备份与恢复

    一.RBD的导入导出介绍 Ceph存储可以利用快照做数据恢复,但是快照依赖于底层的存储系统没有被破坏 可以利用rbd的导入导出功能将快照导出备份 RBD导出功能可以基于快照实现增量导出 二.RBD导出 ...

  2. C# 初识接口 Interface

    什么是接口? 接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).C#接口可以从多个基接口继承,而类或结构可 ...

  3. 从零开始のcocos2dx生活(九)CCBReader

    NodeLoaderLibrary是用来存储节点加载器类型的类,通过registerDefaultNodeLoaders()可以注册所有默认类型的加载器 在CocosBuilder的使用手册中: 1. ...

  4. $Luogu2680/NOIp2015$ 运输计划

    传送门 $Sol$ 最暴力的做法就是枚举最长链上的边,然后再算一次所有的链长,更新$ans$. 这里要求最大的最小,容易想到二分答案.对于二分的值$mid$,扫一遍所有的链,若链长小于等于$mid$, ...

  5. <算法><go实现>左括号补全-双栈法

    输入:1+2)*33-44)*555-666))) 输出:((1+2)*((33-44)*(555-666))) 代码实现及注释: package main import "fmt" ...

  6. ECShop二次开发指南-文件结构(二)

      ecshop文件架构说明 注意:因各版权不一,大概参考/* ECShop 2.5.1 的结构图及各文件相应功能介绍 ECShop2.5.1_Beta upload 的目录 ┣ activity.p ...

  7. centos7 编译安装 php7.4

    1. 下载安装编译工具 yum groupinstall 'Development Tools' 2.安装依赖包 yum install libxml2 libxml2-devel openssl o ...

  8. Eclipse中安装Jetty服务器

    1. 在eclipse中安装jetty适配器 方法一: (1) 打开 Windows -> Preference -> Server -> Runtime Environment , ...

  9. 记录一次mybatis genertor使用以及mapper扫描遇见的问题

    本记录适用初次接触mybatis,大神忽略... 整体上分两个部分: 1.使用mybatis genertor自动生成代码 2.mapper的扫描 1.使用mybatis genertor自动生成代码 ...

  10. Tensorflow内存暴涨问题

    1.目前只总结出两条 创建saver实例saver = tf.train.Saver()放在循环外面 不循环初始化变量 sess.run(tf.global_variables_initializer ...