任何知识的学习都是有简入繁,我们的Activiti也不例外,这篇博文将通过一个简单的HelloWorld来带大家认识一下我们的Activiti;

一、画流程图

在画流程图之前,要确保自己的Eclipse安装了Activiti的插件。

图一  请假流程图

在这里要说明一下,我们指定在画流程图的时候,要指明这个流程实例的ID、Name,然后设置好每个用户任务的ID、Name、Assignee(办理人);

二、部署流程定义

在这里我们使用Junit做模拟,代码如下:

[java] view plain copy
  1. public class MyHelloWorld {
  2. /**获得流程引擎*/
  3. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  4. /**部署流程定义*/
  5. @Test
  6. public void deployProcessDefinition(){
  7. Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署相关的Service
  8. .createDeployment()//创建部署对象
  9. .addClasspathResource("diagrams/myHelloWorld.bpmn")
  10. .addClasspathResource("diagrams/myHelloWorld.png")
  11. .deploy();//完成部署
  12. System.out.println("部署ID:" + deployment.getId());//部署ID:1
  13. System.out.println("部署时间:" + deployment.getDeploymentTime());//部署时间
  14. }
  15. }

在这里,我们使用RepositoryService来部署流程定义,使用addClasspathResource来从类路径下加载资源,需要注意的是,如果加上"/"表示从当前目录下寻找资源文件,如果不加"/",表示从类路径下加载资源文件;并且一次只能加载一个资源。

执行结果如下:

三、启动流程实例

部署和启动对我们开发人员来说一定很熟悉,就拿我们平时做项目来讲,部署就是把项目扔到服务器中,启动就是将服务器运行起来;我们的Activiti也不例外,在这里我们使用RuntimeService来启动流程实例。

启动流程的方式有很多,推荐使用流程定义的Key来启动,这样做的优势是可以按照最新版本的流程启动流程实例。

[java] view plain copy
  1. /**启动流程实例*/
  2. @Test
  3. public void startProcessInstance(){
  4. String processDefinitionKey = "myMyHelloWorld";//流程定义的key,也就是bpmn中存在的ID
  5. ProcessInstance pi = processEngine.getRuntimeService()//管理流程实例和执行对象,也就是表示正在执行的操作
  6. .startProcessInstanceByKey(processDefinitionKey);按照流程定义的key启动流程实例
  7. System.out.println("流程实例ID:" + pi.getId());//流程实例ID:101
  8. System.out.println("流程实例ID:" + pi.getProcessInstanceId());//流程实例ID:101
  9. System.out.println("流程实例ID:" + pi.getProcessDefinitionId());//myMyHelloWorld:1:4
  10. }

执行结果如下:

四、查看个人任务

按照我们流程图上所画的,当这个流程启动之后,流程会停留在[提交申请]这个用户任务上,我们指定这个用户任务的办理人是张三,那么我们张三怎样查看他的任务呢?当然,我们先的知道办理人的名字,这个在我们画流程图的时候已经设置了,直接拿过来用就可以。我们用TaskService完成任务的查询。

[java] view plain copy
  1. /**查看当前任务办理人的个人任务*/
  2. @Test
  3. public void findPersonnelTaskList(){
  4. String assignee = "张三";//当前任务办理人
  5. List<Task> tasks = processEngine.getTaskService()//与任务相关的Service
  6. .createTaskQuery()//创建一个任务查询对象
  7. .taskAssignee(assignee)
  8. .list();
  9. if(tasks !=null && tasks.size()>0){
  10. for(Task task:tasks){
  11. System.out.println("任务ID:"+task.getId());
  12. System.out.println("任务的办理人:"+task.getAssignee());
  13. System.out.println("任务名称:"+task.getName());
  14. System.out.println("任务的创建时间:"+task.getCreateTime());
  15. System.out.println("任务ID:"+task.getId());
  16. System.out.println("流程实例ID:"+task.getProcessInstanceId());
  17. System.out.println("#####################################");
  18. }
  19. }
  20. }

执行结果如下:

五、完成个人任务

既然要完成任务,当然少不了任务的ID了,我们在第四步已经得到了我们的任务ID,直接拿过来用就可以了。

[java] view plain copy
  1. /**完成任务*/
  2. @Test
  3. public void completeTask(){
  4. String taskID = "704";
  5. processEngine.getTaskService().complete(taskID);
  6. System.out.println("完成任务:"+taskID);
  7. }

执行结果如下:

总结:

至此,我们的HelloWorld就完成了,刚接触工作流的时候总觉得很复杂,过了一段时间之后就发现也就这么点东西,无非是把一个流程抽象出来一个一个对象而已。现在在敲一遍例子,真有种一气呵成的感觉。

Activiti进阶(一)——HelloWorld相关推荐

  1. Activiti进阶

    一.流程实例 1.1.什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例. 1.2.启动流程实例 并添 ...

  2. 【Docker】Dockerfile构建自定义进阶的helloworld镜像-1

    之前一篇构建了最简单的helloworld程序,只是在命令行界面打印,此篇博客尝试需要环境依赖的镜像(flask框架)构建,实现的效果是能在网页上显示helloworld. 1 项目准备 创建项目文件 ...

  3. Activiti进阶(九)——接收任务(ReceiveTask)

    接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达.当前,官方只实现 了这个任务的java语义. 当流程达到接收任务,流程状态会保存到数据库中.在任务创建后, ...

  4. Activiti进阶-个人任务

    二.个人任务 2.1.分配任务负责人 2.1.1.固定分配 在进行业务流程建模时指定固定的任务负责人, 如图: 并在 properties 视图中,填写 Assignee 项为任务负责人. 2.1.2 ...

  5. Activiti进阶(七)——排他网关(ExclusiveGateWay)

    转载地址:http://blog.csdn.net/zjx86320?viewmode=contents 上一篇博文我们简单介绍了一下连线,也分析了一种情况,就是在工作流中,用户任务下面有两个连线,如 ...

  6. 工作流引擎 Activiti 万字详细进阶

    Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...

  7. Activiti工作流引擎进阶【收藏可做笔记系列】

    Activiti工作流引擎进阶 Activiti进阶 一.流程实例 什么是流程实例 启动流程实例 并添加Businesskey(业务标识) 操作数据库表 查询流程实例 关联BusinessKey 挂起 ...

  8. 【Activity学习五】--基于SSM整合Activiti之请假流程实现(二)

    [Activity学习五]--基于SSM整合Activiti之请假流程实现(二) 1.部署流程资源 2.查询流程定义信息 3.发布请假流程 4.查询用户任务 5.提出请假 6.老板查看请假任务 7.老 ...

  9. Activiti7学习笔记、非常详细 | 进阶篇

    Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...

最新文章

  1. 智源学术顾问David Harel:经典建模与AI的联姻,如何攻破机器学习的可解释性?| 大师讲座...
  2. 洛谷P2751 [USACO4.2]工序安排Job Processing
  3. 八皇后时间复杂度_【算法打卡】N皇后
  4. java se ee me都有什么区别?
  5. completable java_java8 CompletableFuture异步编程
  6. kafka监控之kafka-run-class.sh
  7. 苹果新款笔记本_苹果又在准备一批笔记本,12英寸MacBook终于要更新了吧?
  8. 一句代码搞定权限请求,从未如此简单
  9. 【书籍学习】MATLAB书籍\【chinapub】matlab教程一套电子书
  10. android os 2.2刷机包,N1内置CoreELEC9.2.2、安卓7.1.2双系统刷机包,全功能刷机包V2.2...
  11. 你还在为python中的列表、元组、字典发愁嘛,别愣着了,快来看!
  12. c语言自定义函数返回值的作用,C语言自定义函数
  13. macOS Mojave(软件篇):微信 for Mac 防撤回插件(WeChatTweak-macOS)
  14. HTML期末大作业课程设计~仿阴阳师游戏官网首页html模板(HTML+CSS)~动漫主题html5网页模板-HTML期末作业课程设计期末大作业动漫主题html5网页模板-html5网页设计源码...
  15. 西方文化寻根思潮的跨世纪演化——透视“新时代运动“
  16. 安装linux之后没有网
  17. 游戏封网卡mac地址后修改网卡mac地址
  18. 地理遥感专业属于计算机行业吗,遥感科学与技术专业怎么样?
  19. 关于python接口基础到进阶随笔
  20. TinyBERT论文及代码详细解读

热门文章

  1. myeclipse 10.0下载及安装
  2. H5页面跳转传递参数过长
  3. Fastly释Lucet原生WebAssembly编译程序和Runtime
  4. 算法与数据结构(第一周)——线性查找法
  5. python使用for循环、输出1到10的阶乘有哪些注意事项_在matlab中使用for循环求1到10阶乘的值...
  6. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...
  7. 分糖果问题--蓝桥杯
  8. 【the EM algorithm】自己动手,丰衣足食。
  9. 人人可以是好厨子:72招做饭技巧帮你变大厨
  10. 特朗普纽约投资项目售价8.5亿