2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:《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(存在中文乱码问题)








2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例的更多相关文章
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境
学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...
- activiti实战--第二章--搭建Activiti开发环境及简单示例
(一)搭建开发环境 学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html ...
- 第二章 搭建Android开发环境
这一章为我们讲解了如何搭建Android开发环境. 首先要了解的是Android底层开发需要哪些工具:搭建android应用程序开发环境.android NDK开发环境和交叉编译环境,前两个用来测试L ...
- 第二章 搭建Android开发环境--读书笔记
俗话说,工欲善其事,必先利其器,对于Android驱动开发来说,首先我们要做的就是搭建Android开发环境,我们首先要配置Linux驱动的开发环境,接着还得配置开发Android应用程序以及Andr ...
- Android深度探索HAL与驱动开发 第二章 搭建Android开发环境
通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因, ...
- 第一章 搭建Qt开发环境
第一章 搭建Qt开发环境 1.到http://download.qt-project.org/archive/上下载Qt的源码包.我下载的是qt-everywhere-opensource-src-4 ...
- 2017.2.20 activiti实战--第一章--认识Activiti
学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...
- activiti实战--第一章--认识Activiti
学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...
- 漫游kafka实战篇之搭建Kafka开发环境
上篇文章中我们搭建了kafka的服务器,并可以使用Kafka的命令行工具创建topic,发送和接收消息.下面我们来搭建kafka的开发环境. 添加依赖 搭建开发环境需要引入kafka的jar包 ...
随机推荐
- 12 JVM 垃圾回收(下)
Java 虚拟机的堆划分 Java 虚拟机将堆划分为新生代和老年代.其中新生代又被划分为 Eden 区,以及两个大小相同的 Survivor 区. 默认情况下,Java 虚拟机采取一种动态分配的策略, ...
- 系统中同时安装sql2005 和 sql2008 R2 提示要删除SQL Server 2005 Express
修改注册表:HKLM\Software\Microsoft\Microsoft SQL Server\90\Tools\ShellSEM,把 ShellSEM重命名即可 如果是64位机器 在 HKL ...
- CodeForces875C[拓扑排序] Codeforces Round #440 [Div2E/Div1C]
只要保存每相邻两行字符串 第一个不同位 即可.然后按照 第一个不同位上的字符有: " 来自下一行的 大于 来自上一行的" 构图,跑拓扑排序即可. 当然要判断一下有没有环构成, 有环 ...
- BZOJ3571 [Hnoi2014]画框 【分治 + KM算法】
题目链接 BZOJ3571 题解 如果知道最小乘积生成树,那么这种双权值乘积最小就是裸题了 将两权值和作为坐标,转化为二维坐标系下凸包上的点,然后不断划分分治就好了 这里求的是最小匹配值,每次找点套一 ...
- [暑假集训--数论]hdu2136 Largest prime factor
Everybody knows any number can be combined by the prime number. Now, your task is telling me what po ...
- Flask deployment on gunicorn with flask script
https://stackoverflow.com/questions/34265870/flask-deployment-on-gunicorn-with-flask-script 依赖 Flask ...
- Date()和new Date()区别
当任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器. new操作符来调用一个构造函数时,创建一个空对象obj, 将这个空对象的__proto__成员指向了构造函数对象的prototyp ...
- 【09】Vue 之 Vuex 数据通信
9.1. 引言 Vue组件化做的确实非常彻底,它独有的vue单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其Vue组件设计的就是,父组件通过子组件的prop进 ...
- Docker学习之Docker Registry
前言 前面已经学习了怎样通过Dockerfile来构建我们自己的镜像了,但是一个系统可能包含着很多个微服务即有很多个镜像,当镜像越来越多的时候,就必须得有一个地方来管理这些镜像,Docker官方提供了 ...
- Jib构建你的第一个java镜像
jib Official:GoogleContainerTools/jib 本文示例完整demo github地址 github.com/moxingwang/- 想要了解并且使用jib,首先你得知道 ...