转:

activiti入门列子一个简单的activiti请假流程

我的第一个activiti实例

2017年05月31日 14:29:45 chf_mixueer 阅读数:1223
 

整个项目的目录结构:

pom.xml:

[html] view
plain
 copy

 
  1. <project= =
  2. =>
    <modelVersion></modelVersion>

    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <packaging></packaging>

    <name></name>
    <url></url>

    <properties>
    <project.build.sourceEncoding></project.build.sourceEncoding>
    </properties>

    <dependencies>

  3. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
  4. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
  5. <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>
  6. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
  7. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
  8. <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>
  9. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
  10. <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </dependency>
    </dependencies>
    </project>

activiti.cfg.xml:

[html] view
plain
 copy

 
  1. <?xml= =?>
    <beans=
  2. =
  3. =>

    <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获取流程引擎

[java] view
plain
 copy

 
  1. //通过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)

执行以下方法,发布请假流程:

[java] view
plain
 copy

 
  1. /**
  2. * 发布流程
  3. * 发布流程后,流程文件会保存到数据库中
  4. */
    @Test
    publicvoid
  5. this"myleave.zip"
    new
  6. )
  7. }

查看数据库  发布的流程文件信息会保存在下面的三张表中:

我们可以通过RepositoryService获取详细的流程定义信息

[java] view
plain
 copy

 
  1. @Test
    publicvoid
  2. );
  3. for
    +pd.getId()++pd.getName()++pd.getKey()++pd.getVersion()++pd.getResourceName()++pd.getDiagramResourceName());
  4. }

key 和 name 就是我们原先画bpmn时候声明的:

使用流程定义的Key发布一个请假流程:

[java] view
plain
 copy

 
  1. /**
  2. * 发布流程
  3. */
  4. publicvoid

    * 启动请假单流程  并获取流程实例

  5. * 因为该请假单流程可以会启动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据
  6. * 通过key启动的流程就是当前key下最新版本的流程
  7. *
  8. */
    );
  9. +processInstance.getId()++processInstance.getActivityId());
  10. }

当流程发布后在  act_ru_task ,act_ru_execution, act_ru_identitylink 表中插入流程数据

接下来就可以通过用户ID去查看该用户的任务了

[java] view
plain
 copy

 
  1. /**
  2. * 查看任务
  3. */
    @Test
    publicvoid
  4. )
  5. for
    +task.getId()++task.getName()++task.getAssignee()++task.getCreateTime());
  6. }

提出请假申请,启动流程

[java] view
plain
 copy

 
  1. @Test
    publicvoid
  2. ;
  3. }

查看数据库变化 可以看到 表中的数据已经变成了老板审批相关数据

老板查看任务 ,并审批请假

[java] view
plain
 copy

 
  1. /**
  2. * 查看任务
  3. */
    @Test
    publicvoid
  4. )
  5. for
    +task.getId()++task.getName()++task.getAssignee()++task.getCreateTime());
  6. }
[java] view
plain
 copy

 
  1. @Test
    publicvoid
  2. ;
  3. }

流程完毕,可以再act_hi_actinst表中看到整个请假流程

整个流程的过程是  1.发布流程 --->2.启动流程--->3.相关人查看任务完成并完成

数据都是存放在数据库中

我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程的更多相关文章

  1. 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代码方式来 ...

  2. HTML5 实现的一个俄罗斯方块实例代码

    /*实现的功能:方块旋转(W键).自动下落.移动(ASD).消行.快速下落(空格键).下落阴影.游戏结束.*/ <!DOCTYPE html>   <html>    < ...

  3. 在EntityFramework6中管理DbContext的正确方式——4DbContextScope:一个简单的,正确的并且灵活的管理DbContext实例的方式(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  4. WCF入门教程(四)通过Host代码方式来承载服务

    WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...

  5. PHP读取超大文件的实例代码

    数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机   去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...

  6. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  7. seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码

    seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...

  8. ACTIVITI 研究代码 之 模版模式

    模板方法模式需要开发抽象类和具体子类的设计师之间的协作.一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤.代表这些具体逻辑步骤的方法称做基本方法(primitive ...

  9. jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...

随机推荐

  1. Ubuntu16.04安装搜狗拼音输入法

    为了让自己的电脑相对安全一些,我安装了ubuntu的物理机 因为要经常输入汉字,我就在unbuntu里面安装了搜狗输入法 1.在搜狗输入法官网下载Linux版本的安装包:https://pinyin. ...

  2. Linux下端口映射工具rinetd

    Linux下简单好用的工具rinetd,实现端口映射/转发/重定向官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/r ...

  3. lambda----jdk8重头戏

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  4. Django_WSGIRequest对象

    WSGIRequest对象 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.这个参数就是dja ...

  5. 2018-2019-20172329 《Java软件结构与数据结构》第六周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第六周学习总结 学无止境,希望自己可以坚持下去,就算自己有太多的事情也不希望自己落下学习,也希望自己可以活成自己想要的样 ...

  6. js弹出框 -搜索

    警告框alert() alert是警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息.当警告框出现后,用户需要点击确定按钮才能继续进行操作.语法:alert("文本 ...

  7. WebGL学习笔记四点二

    前几章对图形图形内部多是 以纯色填充,但是现实中已经有许多好的图片了我们没必要一点点画,这一章第五章就是将图片以纹理的形式加载到片元中,主要过程如下,首先是定义点的坐标的attribute变量用于在j ...

  8. python learning IO.py

    f = open('test.txt', 'r') # 'r' 表示只读 s = f.read() # 调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示 ...

  9. 福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)

    目录 组队后的团队项目的整体计划安排 项目logo及思维导图 项目logo 思维导图 产品思维导图 产品思维导图-引导 产品思维导图-后端数据处理.存储 产品思维导图-短信识别 产品思维导图-智能分析 ...

  10. thinkphp学习3-模板与视图

    1.模板赋值 如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值. $this->assign('na ...