学习资料:《Activiti实战》

第一章 搭建Activiti开发环境及简单示例

2.5 简单流程图及其执行过程

(1)leave.bpmn

后缀名必须是bpmn。安装了activiti的插件(eclipse:activiti designer,intellij:actiBPM)后,就可以用设计器的形式进行流程的绘制。

注意:在activiti部署的时候,必须同时存在leave.bpmn及leave.png。因此在eclipse设置:window—>preferences—>activiti->save->选中create process definition image when saving the diagram

绘制完leave.bpmn后,就会自动生成对应的png文件。(intellij的插件actiBPM还没有找到设置的地方)

(2)leave.xml

eclipse中还可以以xml形式查看(目前还没有找到intellij中如何以xml格式查看,而且intellij中activiti插件的使用明显比eclipse中使用的用户体验差)。对应的xml文件如下:

 <?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="leave" name="Leave">
<documentation>请假流程</documentation>
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="deptLeaveAudit" name="领导审批" activiti:assignee="leader"></userTask>
<userTask id="hrAudit" name="人事审批" activiti:assignee="hr"></userTask>
<userTask id="reportBack" name="销假" activiti:assignee="${proposer}"></userTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="deptLeaveAudit"></sequenceFlow>
<sequenceFlow id="flow2" name="" sourceRef="deptLeaveAudit" targetRef="hrAudit"></sequenceFlow>
<sequenceFlow id="flow3" name="" sourceRef="hrAudit" targetRef="reportBack"></sequenceFlow>
<sequenceFlow id="flow4" name="" sourceRef="reportBack" targetRef="endevent1"></sequenceFlow>
</process>
</definitions>

(3)测试代码

获取processEngine --》 获取各种Service --》部署bpmn文件 --》 创建流程定义 --》 执行流程定义 --》 获取某个用户拥有的task --》用户签收该task --》用户完成该task --》 查看历史信息

 public class SayHelloToLeaveTest {

     @Test
public void testStartProcess() throws Exception {
ProcessEngine processEngine = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration()
.buildProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService();
String bpmnFileName = "me/kafeitu/activiti/helloworld/SayHelloToLeave.bpmn";
repositoryServic.createDeployment()
.addInputStream("SayHelloToLeave.bpmn",this.getClass().getClassLoader().getResourceAsStream(bpmnFileName))
.deploy(); ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery().singleResult();
assertEquals("SayHelloToLeave", processDefinition.getKey()); RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String, Object> variables = new HashMap<String, Object>();
variables.put("applyUser", "employee1");
variables.put("days", 3); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("SayHelloToLeave", variables);
assertNotNull(processInstance);
System.out.println("pid=" + processInstance.getId() + ", pdid="
+ processInstance.getProcessDefinitionId()); TaskService taskService = processEngine.getTaskService();
Task taskOfDeptLeader = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();
assertNotNull(taskOfDeptLeader);
assertEquals("领导审批", taskOfDeptLeader.getName()); taskService.claim(taskOfDeptLeader.getId(), "leaderUser");
variables = new HashMap<String, Object>();
variables.put("approved", true);
taskService.complete(taskOfDeptLeader.getId(), variables); taskOfDeptLeader = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();
assertNull(taskOfDeptLeader); HistoryService historyService = processEngine.getHistoryService();
long count = historyService.createHistoricProcessInstanceQuery().finished().count();
assertEquals(1, count);
}
}

2.6 Activiti Explorer

Activiti Explorer是activiti为了让开发人员快速入门所设计的示例程序。

查看之前下载的activiti-5.22.0.zip,可以看到:

(1)运行explorer

将activiti-explorer.war包部署到tomcat下。访问地址:http://localhost:8080/activiti-explorer

默认有一个账号:kermit/kermit

登录进去后的页面:(详细的使用参看用户手册)

(2)修改explorer的参数

没做任何修改的explorer,db.properties默认的h2数据库,如果要用自己的数据库,还要修改db.properties。

然后把databse里的create文件夹里的sql文件,在自己的数据库里执行一遍。执行完后,表结构如图。

(3)使用explorer(存在中文乱码问题)

进入explorer的页面,选择流程。点击流程设计工作区。
 
 
然后点击新建model。这个model就是我们创建的一个流程。
 
 
 
在设计区画好,并设置好属性之后,点击保存并关闭editor。就会回到这里的流程设计工作区。
 
右边的处理模型,选项选择部署。就会跳出如下框:
 
然后回到流程tab页,就可以看到自己部署的流程定义了。
 
点击右上角的启动流程。可以看到有一个任务被标红了,表示目前进展到这里。
 
如果在画流程图的时候第一个框设置了assignee,比如我设置成了我自己,那么启动流程之后,我的任务栏里会多出来一个任务。
点击下方的完成任务。
 
回到流程tab页里。然后可以看到流程里的红色已经转移,说明已经传递到下一个人去完成任务了。
 
 
这是explorer的基本使用,其他一些详细的使用不再赘述。

2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例的更多相关文章

  1. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境

    学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...

  2. activiti实战--第二章--搭建Activiti开发环境及简单示例

    (一)搭建开发环境 学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html ...

  3. 第二章 搭建Android开发环境

    这一章为我们讲解了如何搭建Android开发环境. 首先要了解的是Android底层开发需要哪些工具:搭建android应用程序开发环境.android NDK开发环境和交叉编译环境,前两个用来测试L ...

  4. 第二章 搭建Android开发环境--读书笔记

    俗话说,工欲善其事,必先利其器,对于Android驱动开发来说,首先我们要做的就是搭建Android开发环境,我们首先要配置Linux驱动的开发环境,接着还得配置开发Android应用程序以及Andr ...

  5. Android深度探索HAL与驱动开发 第二章 搭建Android开发环境

    通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...

  6. 第一章 搭建Qt开发环境

    第一章 搭建Qt开发环境 1.到http://download.qt-project.org/archive/上下载Qt的源码包.我下载的是qt-everywhere-opensource-src-4 ...

  7. 2017.2.20 activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  8. activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  9. 漫游kafka实战篇之搭建Kafka开发环境

    上篇文章中我们搭建了kafka的服务器,并可以使用Kafka的命令行工具创建topic,发送和接收消息.下面我们来搭建kafka的开发环境.   添加依赖   搭建开发环境需要引入kafka的jar包 ...

随机推荐

  1. 在windows64位上安装Python3.0

    1.下载安装包 下载地址:https://www.python.org/downloads/ 如果要下载帮助文件:Download Windows help file 如果要下载基于网页的安装程序: ...

  2. 菜鸟之路——Linux基础::计算机网络基础,Linux常用系统命令,Linux用户与组权限

    最近又重新安排了一下我的计划.准备跟着老男孩的教程继续学习,感觉这一套教程讲的很全面,很详细.比我上一套机器学习好的多了. 他的第一阶段是Python基础,第二阶段是高等数学基础,主要将机器学习和深度 ...

  3. POJ 3111 K Best(01分数规划)

    K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 9876   Accepted: 2535 Case Time ...

  4. [LOJ#2324]「清华集训 2017」小Y和二叉树

    [LOJ#2324]「清华集训 2017」小Y和二叉树 试题描述 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙 ...

  5. shell的简单介绍

    一 什么叫shell,shell 是什么 如果考虑到操作系统其实是一组软件,我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个也就被称为shell. 其实shell的功能只是提供用户操 ...

  6. 常用“Request.ServerVariables()”汇总

    原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] Request.ServerVariables("REMOTE_ADDR")         ...

  7. 1月24日考试(ftp密码)

    错因分析 ♦对文件的保存不够恰当,例如第一题和第三题的题目,我是真的很愤怒,第一题在我写了一个多小时,终于样例成功.可是当我再一次打开文件时,里面只有我最开始的代码,谁可以告诉我这是为什么(我绝对保存 ...

  8. locust参数关联及批量注册

    前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点,需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:http ...

  9. C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法

    Image.FromFile 一旦使用后,对应的文件在一直调用其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等 ...

  10. 设置自定义Dialog背景不变暗

    设置Dialog弹窗的背景不变暗,有两种方式,一种是通过在style中设置,一种是通过代码设置. 一.在style中设置 <style name="dialog_waiting&quo ...