我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程
转:
(activiti入门列子一个简单的activiti请假流程)
我的第一个activiti实例
整个项目的目录结构:
pom.xml:
- <project= =
- =>
<modelVersion></modelVersion><groupId></groupId>
<artifactId></artifactId>
<version></version>
<packaging></packaging><name></name>
<url></url><properties>
<project.build.sourceEncoding></project.build.sourceEncoding>
</properties><dependencies>
- <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency> - <dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</project>
activiti.cfg.xml:
- <?xml= =?>
<beans= - =
- =>
<bean= =>
<property= = />
<property= = />
<property= = />
<property= = />
<property= = />
</bean></beans>
在 resource 下新建Activiti Diagram
可以通过这个地址安装插件 《Activiti BPMN 2.0 designer - http://activiti.org/designer/update/ 》
将UserTask分别修改成入下图所示
修改好ID 和 NAME然后在修改Main config中的Assignee,员工请假修改为张三,老板审批修改为老板
点击Window--->Preferences--->Activiti--->Save Actions:将Create process definition image when saving the diagram勾选
然后保存bpmn文件的时候会自动帮你截图
通过ProcessEngines.getDefaultProcessEngine获取流程引擎
- //通过activiti.cfg.xml获取流程引擎
class"java">
通过源码可以看到 getDefaultProcessEngine方法会通过默认的activiti.cfg.xml文件名或者是activiti-context.xml文件名读取xml文件
当获取到的processEngine对象不为空时 就会在数据库创建关于activiti的23张表
具体作用如下:
跟详细的情况可以去下面这个地址了解:
http://www.cnblogs.com/llzgzljl/archive/2013/10/07/3356108.html
此时你可以在数据库中看到act_ge_property表中插入了3条数据
将MyLeave.bpmn和MyLeave.png打包成myleave.zip文件(一定要是zip别压缩成rar)
执行以下方法,发布请假流程:
- /**
- * 发布流程
- * 发布流程后,流程文件会保存到数据库中
- */
@Test
publicvoid - this"myleave.zip"
new - )
- }
查看数据库 发布的流程文件信息会保存在下面的三张表中:
我们可以通过RepositoryService获取详细的流程定义信息
- @Test
publicvoid - );
- for
+pd.getId()++pd.getName()++pd.getKey()++pd.getVersion()++pd.getResourceName()++pd.getDiagramResourceName()); - }
key 和 name 就是我们原先画bpmn时候声明的:
使用流程定义的Key发布一个请假流程:
- /**
- * 发布流程
- */
- publicvoid
* 启动请假单流程 并获取流程实例
- * 因为该请假单流程可以会启动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据
- * 通过key启动的流程就是当前key下最新版本的流程
- *
- */
); - +processInstance.getId()++processInstance.getActivityId());
- }
当流程发布后在 act_ru_task ,act_ru_execution, act_ru_identitylink 表中插入流程数据
接下来就可以通过用户ID去查看该用户的任务了
- /**
- * 查看任务
- */
@Test
publicvoid - )
- for
+task.getId()++task.getName()++task.getAssignee()++task.getCreateTime()); - }
提出请假申请,启动流程
- @Test
publicvoid - ;
- }
查看数据库变化 可以看到 表中的数据已经变成了老板审批相关数据
老板查看任务 ,并审批请假
- /**
- * 查看任务
- */
@Test
publicvoid - )
- for
+task.getId()++task.getName()++task.getAssignee()++task.getCreateTime()); - }
- @Test
publicvoid - ;
- }
流程完毕,可以再act_hi_actinst表中看到整个请假流程
整个流程的过程是 1.发布流程 --->2.启动流程--->3.相关人查看任务完成并完成
数据都是存放在数据库中
我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程的更多相关文章
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- HTML5 实现的一个俄罗斯方块实例代码
/*实现的功能:方块旋转(W键).自动下落.移动(ASD).消行.快速下落(空格键).下落阴影.游戏结束.*/ <!DOCTYPE html> <html> < ...
- 在EntityFramework6中管理DbContext的正确方式——4DbContextScope:一个简单的,正确的并且灵活的管理DbContext实例的方式(外文翻译)
(译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...
- WCF入门教程(四)通过Host代码方式来承载服务
WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...
- PHP读取超大文件的实例代码
数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机 去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码
seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...
- ACTIVITI 研究代码 之 模版模式
模板方法模式需要开发抽象类和具体子类的设计师之间的协作.一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤.代表这些具体逻辑步骤的方法称做基本方法(primitive ...
- jquery ajax jsonp跨域调用实例代码
今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...
随机推荐
- XSS跨站脚本
1.反射型 非持久化,需要用户自己点击才可以触发 通常出现在搜索框 <?php $id=$_GET['id']; echo $id; ?> http://127.0.0.1/test/sc ...
- IDA入门笔记
题目来源: 南邮CTF :: RE :: Hello,RE(应该是) XDUCTF :: ??? :: ????????(不知道不知道不知道) 总而言之我会在百度网盘再上传一份: >>百度 ...
- 【转】Java生成plist下载ipa文件
我们在上传ipa想要安装的时候必须要通过plist文件去下载,并且还要遵循 itms-services协议. 意思就是,第一步我们要生成一个plist文件, 第二步生成一个html文件,用来指向pli ...
- 【欢迎来怼】 Beta发布事后诸葛亮会议
队名:欢迎来怼 项目名称:博客园Android端APP 小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 ————————————————————————————————————— ...
- Daily Scrum 11.7
明后两天周六日,按照TFS的日常安排应该是休息,所以让他们自由完成已经分配的任务. 姓名 今日任务 黄新越 提取爬取网页的关键字并输出到接口 刘垚鹏 程序总架构的修改与多线程的学习 王骜 多线程学习 ...
- 学习pl/sql之一
--使用pl/sql语句打印一个hello world begin dbms_output.put_line('hello,world'); end; 但是在sqlplus里面就不一样了 ...
- Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter
几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...
- java中方法传入参数时:值传递还是址传递?
JAVA中的数据类型有两大类型: ① 基本数据类型:逻辑型(boolean).文本型(char).整数型(byte.short.int.long).浮点型(float.double) ② 引用数据类型 ...
- IDE调研之二
Eclipse和Jetbrains的IntelliJ IDEA对比: Eclipse工具 在Eclipse中,可以最大化控制台.通过双击标签或者Ctrl+M快捷键就可以实现,但是在IntelliJ I ...
- 标头 header()函数的用法
头 (header) 是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔. 范例一: 本例使浏览器重定向到 PHP 的官方网站. <? ...