一、流程定义

Activiti-Designer 使用

  Palette(画板)

    在eclipse 或 idea 中安装activiti-designer 插件即可使用,画板中包括以下结点:

    Connection—连接Event---事件Task---任务Gateway---网关Container—容器

    Boundary event—边界事件Intermediate event- -中间事件

    流程图设计完毕保存生成.bpmn 文件。

1、新建流程(IDEA 工具)

  首先选中存放图形的目录(本次我们选择resources 下的bpmn  目录),点击菜单:New-BpmnFile,如下图所示:

  

2、创建hoilday.bpmn,绘制流程

  

3、生成流程图

  ①首先将.bpmn文件改为.xml文件

    

  ②然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图,将流程图导出保存到项目对应目录即可

    

    

  ③然后将.xml改回.bpmn即可

    

注意:

  流程图生成前须设置编码格式然后重启IDEA!!!

  1. -Dfile.encoding=UTF-8

  

二、部署流程定义

  部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流引擎activiti中

1、使用ProcessEngine创建RepositoryService

  1. package com.zn;
  2.  
  3. import org.activiti.engine.ProcessEngine;
  4. import org.activiti.engine.ProcessEngines;
  5. import org.activiti.engine.RepositoryService;
  6. import org.activiti.engine.repository.Deployment;
  7. import org.junit.Test;
  8.  
  9. public class ActivitiTest {
  10.  
  11. /*流程部署
  12. * `act_ge_bytearray` 流程定义的资源信息,包含bpmn和png流程文件信息
  13. * `act_re_deployment` 流程部署信息 包含流程名称,ID,key等
  14. * `act_re_procdef` 流程定义信息
  15. * */
  16. @Test
  17. public void deployment(){
  18. //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
  19. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  20. //获取RepositoryService对象进行流程部署
  21. RepositoryService repositoryService = processEngine.getRepositoryService();
  22. //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
  23. Deployment deployment = repositoryService.createDeployment()
  24. //加载流程文件
  25. .addClasspathResource("bpmnFiles/holiday.bpmn")
  26. .addClasspathResource("bpmnFiles/holiday.png")
  27. //设置流程名称
  28. .name("请假流程")
  29. .key("holidayKey")
  30. //部署
  31. .deploy();
  32. //输出部署信息
  33. System.out.println("流程名称:"+deployment.getName());
  34. System.out.println("流程ID:"+deployment.getId());
  35. System.out.println("流程Key:"+deployment.getKey());
  36. }
  37. }

2、执行操作控制台效果

  

3、数据库展示

  执行操作后activiti会将上边代码中执行的bpmn文件和图片文件保存在activiti数据库中;

  

三、启动一个流程实例

  流程定义部署在activiti后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了;

  针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于java类与java对象的关系,类定义好后需要new创建一个对象使用,当然可以new多个对象;对于请假申请流程,张三发起一个请假申请需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例;

1、代码实现

  1. package com.zn;
  2.  
  3. import org.activiti.engine.ProcessEngine;
  4. import org.activiti.engine.ProcessEngines;
  5. import org.activiti.engine.RepositoryService;
  6. import org.activiti.engine.RuntimeService;
  7. import org.activiti.engine.repository.Deployment;
  8. import org.activiti.engine.runtime.ProcessInstance;
  9. import org.junit.Test;
  10.  
  11. public class ActivitiTest {
  12.  
  13. /**
  14. * 启动流程实例
  15. * `act_hi_actinst` 已开始和执行完毕的活动信息
  16. * `act_hi_identitylink` 历史参与者信息
  17. * `act_hi_procinst` 流程实例信息
  18. * `act_hi_taskinst` 历史任务实例
  19. * act_ru_execution 任务执行信息
  20. * act_ru_identitylink 当前任务参与者
  21. * `act_ru_task` 任务信息
  22. *
  23. */
  24. @Test
  25. public void startInstance(){
  26. //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
  27. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  28. //获取到RuntimeService对象
  29. RuntimeService runtimeService = processEngine.getRuntimeService();
  30. //创建流程实例
  31. ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday");
  32. //输出实例信息
  33. System.out.println("流程部署ID:"+holiday.getDeploymentId());
  34. System.out.println("流程实例ID:"+holiday.getId());
  35. System.out.println("活动ID:"+holiday.getActivityId());
  36. }
  37. }

2、执行操作控制台效果

  

3、数据库展示

  

四、任务查询

  流程启动后,各个任务的负责人就可以查看自己当前需要处理的任务,查询出来的任务都是该用户的代办任务;

1、代码实现

  1. package com.zn;
  2.  
  3. import org.activiti.engine.*;
  4. import org.activiti.engine.history.HistoricActivityInstance;
  5. import org.activiti.engine.history.HistoricActivityInstanceQuery;
  6. import org.activiti.engine.repository.Deployment;
  7. import org.activiti.engine.runtime.ProcessInstance;
  8. import org.activiti.engine.task.Task;
  9. import org.junit.Test;
  10.  
  11. import java.util.List;
  12.  
  13. public class ActivitiTest {
  14.  
  15. /**
  16. * 查看代办任务
  17. */
  18. @Test
  19. public void getTask(){
  20. //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
  21. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  22. //获取一个TaskService对象
  23. TaskService taskService=processEngine.getTaskService();
  24. //查询代办业务 createTaskQuery查询任务 taskCandidateOrAssigned查询任务执行者 processDefinitionKey:查询流程
  25. /**
  26. * taskCandidateOrAssigned匹配规则:1.Assigned 2.配置bpmn文件中定义的值
  27. * taskAssignee匹配规则:1.Assigned
  28. */
  29. //List<Task> list=taskService.createTaskQuery().taskCandidateOrAssigned("zhangsan").processDefinitionKey("holiday").list();
  30. //taskAssignee查看当前指定人的指定任务
  31. List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").processDefinitionKey("holiday").list();
  32. //分页:List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").listPage(i,j);
  33. for (Task task:list){
  34. System.out.println("任务名称:"+task.getName());
  35. System.out.println("任务执行人:"+task.getAssignee());
  36. System.out.println("任务ID:"+task.getId());
  37. System.out.println("流程实例ID:"+task.getProcessInstanceId());
  38.  
  39. }
  40. }
  41. }

2、执行操作控制台效果

  

3、数据库

  

五、任务处理

  任务负责人查询代办任务,选择任务进行处理,完成任务;

1、代码实现

  1. package com.zn;
  2.  
  3. import org.activiti.engine.*;
  4. import org.activiti.engine.repository.Deployment;
  5. import org.activiti.engine.runtime.ProcessInstance;
  6. import org.activiti.engine.task.Task;
  7. import org.junit.Test;
  8.  
  9. import java.util.List;
  10.  
  11. public class ActivitiTest {
  12.  
  13. /*任务处理
  14. * `act_hi_identitylink` 历史参与者信息
  15. * `act_hi_taskinst` 历史任务信息
  16. * `act_ru_execution` 任务执行信息
  17. * `act_ru_task` 任务信息
  18. * 当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看该信息
  19. * */
  20. @Test
  21. public void completeTask(){
  22. //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
  23. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  24. //获取一个TaskService对象
  25. TaskService taskService = processEngine.getTaskService();
  26. //任务处理
  27. taskService.complete("35005");
  28. }
  29. }

2、执行操作控制台效果

  

3、数据库展示

  

4、任务查询(经理审批)控制台效果

  

5、任务处理(经理审批)后数据库显示

  

6、任务查询(总经理审批)控制台效果

  

7、再次任务处理(总经理审批)后数据库显示

  

8、任务查询(人事审批)控制台效果

  

9、再次任务处理(人事审批)后数据库显示

  

10、至此流程结束

六、查看历史任务

1、代码实现

  1. package com.zn;
  2.  
  3. import org.activiti.engine.*;
  4. import org.activiti.engine.history.HistoricActivityInstance;
  5. import org.activiti.engine.history.HistoricActivityInstanceQuery;
  6. import org.activiti.engine.repository.Deployment;
  7. import org.activiti.engine.runtime.ProcessInstance;
  8. import org.activiti.engine.task.Task;
  9. import org.junit.Test;
  10.  
  11. import java.util.List;
  12.  
  13. public class ActivitiTest {
  14.  
  15. /**
  16. * 查看历史任务
  17. */
  18. @Test
  19. public void getHistory() {
  20. //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
  21. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  22. //获取HistoryService接口
  23. HistoryService historyService = processEngine.getHistoryService();
  24. //获取历史任务
  25. HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
  26. //获取指定流程实例的任务
  27. historicActivityInstanceQuery.processInstanceId("35001");
  28. //获取任务列表
  29. List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
  30. for (HistoricActivityInstance ai : list) {
  31. System.out.println("任务节点ID:"+ai.getActivityId());
  32. System.out.println("任务节点名称:"+ai.getActivityName());
  33. System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId());
  34. System.out.println("流程实例ID信息:"+ai.getProcessInstanceId());
  35. System.out.println("==============================");
  36. }
  37. }
  38. }

2、控制台效果

  

Activiti入门案例的更多相关文章

  1. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  2. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  3. Struts2第一个入门案例

      一.如何获取Struts2,以及Struts2资源包的目录结构的了解    Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...

  4. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  5. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  6. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  7. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

  8. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  9. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

随机推荐

  1. ThinkPHP判断更新是否成功的正确方法

    如何判断一个更新操作是否成功 $Model = D('Blog'); $data['id'] = 10; $data['name'] = 'update name'; $result = $Model ...

  2. IdentityServer4迁移至3.x版本注意问题详解

    前言 之前有一位购买我课程的童鞋利用最新的IdentityServer4版本即对应.NET Core 3.x,发布到生产环境在学习,结果出了一些问题,此前我并未过多关注IdentityServer4升 ...

  3. hive、Hbase、mysql的区别

    1.Hive和HBase的区别 1)hive是sql语言,通过数据库的方式来操作hdfs文件系统,为了简化编程,底层计算方式为mapreduce. 2)hive是面向行存储的数据库. 3)Hive本身 ...

  4. 《OneForAll框架搭建之旅》前端篇:微前端架构设计(Vue)

    心之所向,勇往直前!记录开发过程中的那些小事,给自己加点经验值. 前言 作为一个.Net后端开发,在竞争愈加激烈的当下,掌握点前端配菜好像已经是家常便饭了. 刚好在工作的第5个年头,辞去小主管职务的我 ...

  5. Asp.net Core MVC(四)

    上一篇说的是asp.net mvc核心UseMvc的过程,末尾想捋一下asp.net核心的路由流转过程,现在看来还是要准备下一个代码,熟悉了代码,那么整个流转过程就通了〜 不多说,今儿先看下,Rout ...

  6. 初识 jquery.simulate.js 模拟键盘事件

    用jquery 和 jquery.simulate.js 实现模拟键盘事件,点击上下左右div相当于点击键盘的上下左右键 <!DOCTYPE html> <html> < ...

  7. 一篇文章彻底说清JS的深拷贝/浅拷贝

    一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...

  8. 前端面试题-url、href、src

    一.URL的概念 统一资源定位符(或称统一资源定位器/定位地址.URL地址等,英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址).如同在网络上的门 ...

  9. Python读取和写入文件

    1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 123456789023456789013456789012 实现代码: with open('tes ...

  10. 【,NetCore】WebApi使用统一时间格式

    1.在Startup中配置统一时间格式 services.AddMvc() .AddJsonOptions(options => { //配置时间序列化格式 options.Serializer ...