基于Activiti工作流引擎实现的请假审核流程

概要
本文档介绍的是某商用中集成的Activiti工作流的部署及使用,该框架用的Activiti版本为5.19.0。本文档中主要以一个请假流程为例子进行说明,该例子的流程图如下:

请假例子流程图
这是一个可以正常运作的工作流业务了,但是它也有不足的地方,如没做详细的分支控制,而且写死了节点,没能更好地体现工作流引擎的灵活性,这些在我们后面实际的项目业务中的工作流使用上做了调整,但由于项目业务不能公开,且这个例子已能说明大部分的问题,这里就不一一细说我们的其他业务实现了。
新建流程模型

  1. 新增模型
    (1)进入新建模型页面

新建模型
(2)填写名称等信息

填写信息
注意,这里的Key是该流程的唯一标识,须与实际业务中约定的key一致,如下图:

流程唯一标识
(3)点击保存时会进入工作流模型子系统,先在流程唯一标识处填写刚才的key

与代码中的Key一致
(4)添加开始事件,开始事件的属性不用填(也可填写名称)。然后添加人工任务,如下图:

添加人工任务
(5)给已添加的人工任务添加指派者(填系统用户或用户组ID)、名称、ID.如下图:

添加指派者
注意,这里的ID是该任务的唯一标识,是实际业务中判断是否为当前用户可办理的依据,须和代码中判断约定的ID保持一致,若不理解请参考下图(但这种写法会导致流程节点的灵活性降低,不太建议):

任务标识
(6)新建一个网关,任务后面一般会连着网关,根据上一任务的处理结果来实现分支管理(作用类似于if判断),请参考下图:

网关与分支管理
注意,网关后面的分支要填写名称及跳转条件,同意操作的跳转条件为” ${auditPass}”,不同意的跳转条件为” ${!auditPass}”

跳转条件
(7)按上述操作方法继续完成流程图的编辑。

继续编辑流程图
(8)点击保存模型

保存模型
部署模型
重新进入模型工作区,部署刚添加的模型
部署模型
转换模型
转换模型可理解为采纳某个定义好的模型,采纳完后涉及到该流程的业务操作将按新的模型运作。

转换模型
使用工作流
新建并定义好模型后,即可使用该工作流模型了,以下为请假流程为例进行示范:

  1. 提交申请

提交申请
提交完后可以在【运行中的任务】中看到该任务及其当前所在的节点

  1. 签收任务
    通过有权限处理该节点的用户账号登录后,可在【任务签收】处签收该任务,获得该事件的处理权(这一步骤可根据实际业务需要省略)。

Paste_Image.png

  1. 办理任务
    在【待办任务】中可对已签收的任务进行办理,办理后任务会根据办理结果移交下一节点,直至任务结束。

办理任务1

办理任务2

办理任务3

  1. 任务结束
    任务结束后可在【已结束任务中】看到。

感谢阅读,欢迎一起讨论,共同学习。 --广州学生梁植淋

转载于:https://www.cnblogs.com/liangzhilin/p/6918664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件

1.下载ffmpeg源码,官网,我这里直接采用git 方式下载:下载ffmpeg.png终端输入git命令:静静等待~最后下载的版本为3.4.6 。image.png这里注意一下,刚开始我用的ndk版本是ndk-17b,在编译该版本的ffmpeg时始终失败&#xf…

Spring Security 3 Ajax登录–访问受保护的资源

我看过一些有关Spring Security 3 Ajax登录的博客,但是我找不到解决如何调用基于Ajax的登录的博客,匿名用户正在Ajax中访问受保护的资源。 问题 – Web应用程序允许匿名访问某些部分,并且某些部分是受保护的资源,需要用户登录。 …

linux运维选择题,初学Linux练习题

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中tr ‘a-z’ ‘A-Z’ < /etc/issue > /tmp/issue.out2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中3、一个linux用户给root发邮件&#xff0c;要求邮件标题为”help”&#xff0c…

[转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

本文转自&#xff1a;http://www.cnblogs.com/fzrain/p/3923727.html 前言 很久没更新了&#xff0c;之前有很多事情&#xff0c;所以拖了很久&#xff0c;非常抱歉。好了&#xff0c;废话不多说&#xff0c;下面开始正题。本篇仍然使用上一季的的项目背景&#xff08;系列地址…

linux idea 快捷键,Linux 下 IDEA 的 Ctrl+Alt+S

前言这是个困扰我一年多的问题&#xff0c;今天终于解决了……起因一年前将主系统换成 Arch Linux 后&#xff0c;其他一切正常就是 IDEA 的打开设置的快捷键 ctrlalts 失效&#xff0c;让我很是头疼。虽然不是很重要&#xff0c;但是对于我这种强迫症来说别提多难受了……我曾…

C语言数字3转变字符 3 程序,大学c语言知识点总结

大学c语言知识点总结C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。一起来看看大学c语言知识点总结吧!大学c语言知识点总结1、编译预处理不是C语言的一部分&#xff0c;不再运行时间。C语言编…

接触Jenkins(Hudson)API,第1部分

哪一个-哈德森还是詹金斯&#xff1f; 都。 几个月前&#xff0c;我开始使用Hudson v1.395来从事这个小项目&#xff0c;在出现巨大分歧之后又回到了这个项目。 我以此为契机&#xff0c;看我将来选择永久搬到詹金斯时是否会遇到任何重大问题。 有很多麻烦-最值得注意的是&…

使用javascript模拟常见数据结构(四)

七、树 树是一种非线性的分层的数据结构&#xff0c;在现实生活中比较常见的例子比如家谱和公司的组织架构图&#xff0c;如下所示&#xff1a; 一个树结构存在着一系列的父子结构&#xff0c;并且有着一个根节点&#xff0c;这种结构本质上表明了一对多的关系。 那&#xff0c…

最全Pycharm教程(10)——Pycharm调试器总篇

最全Pycharm教程&#xff08;1&#xff09;——定制外观 最全Pycharm教程&#xff08;2&#xff09;——代码风格 最全Pycharm教程&#xff08;3&#xff09;——代码的调试、执行 最全Pycharm教程&#xff08;4&#xff09;——有关Python解释器的相关配置 最全Pycharm教程&am…

Looper.prepare()和Looper.loop()

什么时候需要 Looper Looper用于封装了android线程中的消息循环&#xff0c;默认情况下一个线程是不存在消息循环&#xff08;message loop&#xff09;的&#xff0c;需要调用Looper.prepare()来给线程创建一个消息循环&#xff0c;调用Looper.loop()来使消息循环起作用&#…

如何查看Ubuntu版本,以及Linux内核版本??

查看Ubuntu版本&#xff1a; 方法一&#xff1a; cat /etc/issue 方法二&#xff1a; sudo lsb_release -a 查看内核版本&#xff1a; uname -r 转载于:https://www.cnblogs.com/tanrong/p/6937749.html

实现chrome扩展启动本地进程 - 补充

实现chrome扩展启动本地进程 - 补充 标签&#xff1a; chrome扩展启动本地程序访问本地磁盘2014-10-17 11:42 6753人阅读 评论(17) 收藏 举报分类&#xff1a;Chrome Plugin版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 示例 主要包含如下部分 c…

单路电压表c语言编程,用AT89C51单片机制作的数字电压表

此数字电压表&#xff0c;利用A/D转换原理将被测模拟量转换成数字量&#xff0c;并通过控制系统用数字方式显示测量结果。本设计采用AT89C51单片机&#xff0c;ADC0809进行模/数转换&#xff0c;能够测量8路0&#xff5e;5V的输入电压值&#xff0c;可用四位LED数码管轮流或单路…

ZK的实际应用:MVVM –加载和渲染数据

先前的文章简要介绍了RIA框架ZK&#xff0c;以及它CSS Selector启发式控制器机制如何通过使在控制器类中引用UI组件的任务变得相对灵活来减轻UI更改所带来的一些负担。 然后&#xff0c;我们在上一篇文章中探讨了ZK中的MVVM模式如何允许单个ViewModel提供不同的视图。 这篇文章…

搭建一个简单的mybatis框架

一、Mybatis介绍 MyBatis是一个支持普通SQL查询&#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的POJO&#xff08;Pla…

c语言空格符 r t,c语言中、\t \r \n 和空格什么意思

具体意思&#xff1a;都是转义字符&#xff0c;空格就是单纯的空格&#xff0c;输入时可以输入空格\t 跳格 \r 回车 \n 换行\\ 反斜杠 \a 警告 \b 退格 \f 换页 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八进制数字。转义字符串(Escap…

在代理类中引用动态代理

在Stackoverflow中有一个有趣的问题 &#xff0c;关于Spring Bean如何获​​得对由Spring创建的代理的引用以处理事务&#xff0c;Spring AOP&#xff0c;缓存&#xff0c;异步流等。需要对代理的引用&#xff0c;因为如果存在对自身的调用通过代理bean&#xff0c;此调用将完全…

android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet

原标题&#xff1a;Android 仿高德地图可拉伸的BottomSheet2018安卓巴士开发者大会-上海站你一直期待的安卓技术盛宴即将登场&#xff01;前言最近项目中需要用到高德地图搜索结果后的结果展示的可拉伸控件。而我看到这个效果图&#xff0c;觉得这个就是一个slidingpanel&#…

[ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!

作为入门者来说。了解JavaScript中timer的工作方式是非常重要的。通常它们的表现行为并非那么地直观&#xff0c;而这是由于它们都处在一个单一线程中。让我们先来看一看三个用来创建以及操作timer的函数。var id setTimeout(fn, delay); - 初始化一个单一的timer&#xff0c…

Android 软键盘自动弹出和关闭

在我们写修改信息或者搜索&#xff0c;修改密码等界面的时候&#xff0c;用户进入这个界面的主要目的就是输入修改/查找 某些信息&#xff0c;为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。 1.软键盘的自动弹出 private void showKeyboard(){InputMethodM…