博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Activiti 进阶一】简单流程实例helloworld
阅读量:5217 次
发布时间:2019-06-14

本文共 3100 字,大约阅读时间需要 10 分钟。

     前两篇我们主要是对Activiti进行了一个基本的认识,以及对连接数据库进行了简单介绍,本篇我们着手于HelloWorld简单实例来浏览全程,体验一把。

     首先我们必须着手 创建一个Activiti项目,然后画一个建议的流程图示,在项目diagrams上右击,New-Other,选择Activiti Diagram,如图:

     一个简易的流程,但是正所谓麻雀虽小五脏俱全,所以一些必不可少的属性是不可避免的,我设置的每个节点的属性如下:

     执行整个流程的过程其实很简单,部署流程-->启动流程-->个人任务查看,执行(循环)-->结束。整个执行的过程和流程引擎都是密切相关的,因为有了核心,才会有各种服务,下边看执行过程:

步骤一:获得流程引擎核心对象

// 获取流程引擎(核心对象)	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

步骤二:部署流程定义(RepositoryService——管理流程定义

/**	 * 部署流程定义	 */	@Test	public void deploymentProcessDefinition() {		// 将其赋值给部署对象		Deployment deployment = processEngine.getRepositoryService() // 获取流程定义和部署对象相关的service				.createDeployment() // 创建部署对象				.addClasspathResource("diagrams/helloworld.bpmn") // 加载资源文件,一次只能加载一个文件				.addClasspathResource("diagrams/helloworld.png").deploy(); // 完成部署		System.out.println("部署ID:" + deployment.getId()); // 输出部署的id		System.out.println("部署时间:" + deployment.getDeploymentTime()); // 输出部署的时间	}

     创建一个部署对象,进行资源加载,然后部署,简单三步,一起合成,需要注意的是资源加载的路径不要弄错。

测试图示:

步骤三:启动流程实例(RuntimeService——执行管理,包括启动,推进,删除流程等操作

/**	 * 启动流程实例	 */	@Test	public void startProcessInstance() {		// 流程定义key指helloworld.pbmn中存在的ID		String ProcessDefinitionKey = "helloworld";		// 赋值给流程实例的对象		ProcessInstance processInstance = processEngine.getRuntimeService() // 管理流程实例和执行对象,也就是表示正在执行的操作				.startProcessInstanceByKey(ProcessDefinitionKey); // 按照流程定义的key启动流程实例(优势:可以按照最新版本的流程启动实例)		System.out.println("流程实例ID" + processInstance.getId());		System.out.println("流程实例ID" + processInstance.getProcessInstanceId());	}

     部署完成之后,就要启动了,启动流程定义的的方式有很多,比如ID,Key值等,我们比较采纳使用Key来启动,因为它可以按照最新版本的流程启动流程实例。流程实例在整个流程过程中,不出意外情况,都是保持不变的,都是唯一的值。

测试图示:

步骤四:查询当前办理人任务(TaskService——任务管理

/**	 * 查询当前办理人的个人任务	 */	@Test	public void findPersonTaskList() {		// 任务办理人		String assignee = "张三";		// 将任务赋值于list集合		List
list = processEngine .getTaskService() // 与任务相关的service(正在执行) .createTaskQuery() // 创建一个任务查询对象 .taskAssignee(assignee).list(); // 对list集合进行为空判断 if (list != null && list.size() > 0) { // 对list进行循环输出 for (org.activiti.engine.task.Task task : list) { System.out.println("任务ID:" + task.getId()); System.out.println("任务办理人:" + task.getAssignee()); System.out.println("任务名称" + task.getName()); System.out.println("任务创建时间:" + task.getCreateTime()); System.out.println("流程实例ID:" + task.getProcessInstanceId()); } } }

     流程启动之后,我们就可以针对个人来查看其相关任务了,要注意这里只能是看到当前执行者的任务信息,其他的则已经成为了历史任务。若要查阅,需要调用历史服务(HistoryService——历史管理)去查阅。

测试图示:

步骤五:完成任务

/**	 * 完成任务	 */	@Test	public void completeTask(){		//任务ID		String taskId="104";		processEngine.getTaskService()  //与任务相关Service(正在执行)					.complete(taskId);		System.out.println("完成任务:"+taskId);	}

     任务查看只是一个查阅的功能,通过上一步的查阅我们获取自己的任务ID,然后根据任务ID进行执行,完成任务。

测试图示:

     整个路程我们只用到了三个服务,定义+执行+任务等三个,这三个也是我们常用的三个服务。所以一个流程我们只需要简简单单的5部曲则完成了整个流程,肯定有人会问,哪里完成了?不是才完成了104一个任务吗?从上边我们的属性可以看到,104是第一个节点张三的任务,点击完成以后,看我们的任务表,已经过度到了第二个节点,如图:

     我们只需要继续执行查看个人任务的方法,将其任务办理人修改成“李四”,执行,则会输出李四的相关信息,如图:

     依此类推,所以将整个流程完成,我们只需要这么几个方法即可。我们使用的无非就是一个一个节点串联起来,增加了点复杂的需求使其变得玲珑了许多,其实拨开雾霾,真的是雨过天晴,再回头看这个实例,真的有种作画,一气呵成的感觉。这或许就是工作流的一个目的所在吧!

转载于:https://www.cnblogs.com/huohuoL/p/10545495.html

你可能感兴趣的文章
监控工具之---Prometheus 安装详解(三)
查看>>
Azure Iaas基础之---创建虚拟机
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>