Activiti进阶(一)——HelloWorld
2015-12-08 19:56
225 查看
任何知识的学习都是有简入繁,我们的Activiti也不例外,这篇博文将通过一个简单的HelloWorld来带大家认识一下我们的Activiti;
一、画流程图
在画流程图之前,要确保自己的Eclipse安装了Activiti的插件。
图一 请假流程图
在这里要说明一下,我们指定在画流程图的时候,要指明这个流程实例的ID、Name,然后设置好每个用户任务的ID、Name、Assignee(办理人);
二、部署流程定义
在这里我们使用Junit做模拟,代码如下:
在这里,我们使用RepositoryService来部署流程定义,使用addClasspathResource来从类路径下加载资源,需要注意的是,如果加上"/"表示从当前目录下寻找资源文件,如果不加"/",表示从类路径下加载资源文件;并且一次只能加载一个资源。
执行结果如下:
三、启动流程实例
部署和启动对我们开发人员来说一定很熟悉,就拿我们平时做项目来讲,部署就是把项目扔到服务器中,启动就是将服务器运行起来;我们的Activiti也不例外,在这里我们使用RuntimeService来启动流程实例。
启动流程的方式有很多,推荐使用流程定义的Key来启动,这样做的优势3是可以按照最新版本的流程启动流程实例。
执行结果如下:
四、查看个人任务
按照我们流程图上所画的,当这个流程启动之后,流程会停留在[提交申请]这个用户任务上,我们指定这个用户任务的办理人是张三,那么我们张三怎样查看他的任务呢?当然,我们先的知道办理人的名字,这个在我们画流程图的时候已经设置了,直接拿过来用就可以。我们用TaskService完成任务的查询。
执行结果如下:
五、完成个人任务
既然要完成任务,当然少不了任务的ID了,我们在第四步已经得到了我们的任务ID,直接拿过来用就可以了。
执行结果如下:
总结:
至此,我们的HelloWorld就完成了,刚接触工作流的时候总觉得很复杂,过了一段时间之后就发现也就这么点东西,无非是把一个流程抽象出来一个一个对象而已。现在在敲一遍例子,真有种一气呵成的感觉。
一、画流程图
在画流程图之前,要确保自己的Eclipse安装了Activiti的插件。
图一 请假流程图
在这里要说明一下,我们指定在画流程图的时候,要指明这个流程实例的ID、Name,然后设置好每个用户任务的ID、Name、Assignee(办理人);
二、部署流程定义
在这里我们使用Junit做模拟,代码如下:
public class MyHelloWorld { /**获得流程引擎*/ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义*/ @Test public void deployProcessDefinition(){ Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署相关的Service .createDeployment()//创建部署对象 .addClasspathResource("diagrams/myHelloWorld.bpmn") .addClasspathResource("diagrams/myHelloWorld.png") .deploy();//完成部署 System.out.println("部署ID:" + deployment.getId());//部署ID:1 System.out.println("部署时间:" + deployment.getDeploymentTime());//部署时间 } }
在这里,我们使用RepositoryService来部署流程定义,使用addClasspathResource来从类路径下加载资源,需要注意的是,如果加上"/"表示从当前目录下寻找资源文件,如果不加"/",表示从类路径下加载资源文件;并且一次只能加载一个资源。
执行结果如下:
三、启动流程实例
部署和启动对我们开发人员来说一定很熟悉,就拿我们平时做项目来讲,部署就是把项目扔到服务器中,启动就是将服务器运行起来;我们的Activiti也不例外,在这里我们使用RuntimeService来启动流程实例。
启动流程的方式有很多,推荐使用流程定义的Key来启动,这样做的优势3是可以按照最新版本的流程启动流程实例。
/**启动流程实例*/ @Test public void startProcessInstance(){ String processDefinitionKey = "myMyHelloWorld";//流程定义的key,也就是bpmn中存在的ID ProcessInstance pi = processEngine.getRuntimeService()//管理流程实例和执行对象,也就是表示正在执行的操作 .startProcessInstanceByKey(processDefinitionKey);////按照流程定义的key启动流程实例 System.out.println("流程实例ID:" + pi.getId());//流程实例ID:101 System.out.println("流程实例ID:" + pi.getProcessInstanceId());//流程实例ID:101 System.out.println("流程实例ID:" + pi.getProcessDefinitionId());//myMyHelloWorld:1:4 }
执行结果如下:
四、查看个人任务
按照我们流程图上所画的,当这个流程启动之后,流程会停留在[提交申请]这个用户任务上,我们指定这个用户任务的办理人是张三,那么我们张三怎样查看他的任务呢?当然,我们先的知道办理人的名字,这个在我们画流程图的时候已经设置了,直接拿过来用就可以。我们用TaskService完成任务的查询。
/**查看当前任务办理人的个人任务*/ @Test public void findPersonnelTaskList(){ String assignee = "张三";//当前任务办理人 List<Task> tasks = processEngine.getTaskService()//与任务相关的Service .createTaskQuery()//创建一个任务查询对象 .taskAssignee(assignee) .list(); if(tasks !=null && tasks.size()>0){ for(Task task:tasks){ 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.getId()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("#####################################"); } } }
执行结果如下:
五、完成个人任务
既然要完成任务,当然少不了任务的ID了,我们在第四步已经得到了我们的任务ID,直接拿过来用就可以了。
/**完成任务*/ @Test public void completeTask(){ String taskID = "704"; processEngine.getTaskService().complete(taskID); System.out.println("完成任务:"+taskID); }
执行结果如下:
总结:
至此,我们的HelloWorld就完成了,刚接触工作流的时候总觉得很复杂,过了一段时间之后就发现也就这么点东西,无非是把一个流程抽象出来一个一个对象而已。现在在敲一遍例子,真有种一气呵成的感觉。
相关文章推荐
- 机器学习常见名词
- [LeetCode]101. Trapping Rain Water收集雨水
- hough变换中,直线方程从XY空间转换到参数空间的转换过程
- Android百度云推送实现消息推送
- apply 和 call
- java进阶一之jdk8新特性
- [LeetCode]101. Trapping Rain Water收集雨水
- What is 'lr_policy' in caffe?
- Mecv中遇见的ie兼容问题
- UIResponder
- Android编码规范
- Triangle Count算法
- nltk function
- 栈和队列之LinekedList(双端队列)
- icare3.0运维中数据库使用的注意事项----------运维日志11
- cocos2dx 源码分析之 CCPoolManager
- JavaScript 判断 DOM 何时加载完毕
- Android 反射接口Interface应用
- bzoj 1588 [HNOI2002]营业额统计
- 动态sql例子