工作流使用

本文介绍了基于Flowable的工作流使用,其具有稳定引擎、支持多种操作等特点。还给出完整请假流程示例,包括创建分类、设计模型与表单、编写脚本、部署配置等步骤,最后汇总了常见问题,如代码树、会签审批配置、上线注意事项等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#🌻 工作流使用

无需开发代码,即可快速创建工作流、表单,并完成审批、监控等操作。

#功能脑图

#特点

  • 基于 Flowable(Activiti)生来具有的稳定工作流引擎。
  • 使用flowable官方流程设计器,功能强大,操作熟悉。
  • 支持流程导入导出,符合BPMN规范,中国式工作流。
  • 在线流程表单设计器,免去繁琐的表单开发步骤。
  • 支持流程发起、任务办理、保存、指定、追踪、退回、跳转、委托、转办、终止、挂起、加签、减签等功能。
  • 任务退回支持退回到任意历史节点,兼容并行网关、子流程等。
  • 任务审批支持指定下一审批人、任务期限、优先级等。
  • 任务跳转可自由跳转到指定节点,满足特事特办的需求。
  • 任务加签、减签可动态为会签、或签任务临时增加、减少签核人员。
  • 任务委托可将任务委托给他人,他人办理完成后再回到委托人。
  • 支持流程跟踪图,流程状态展现,流转信息,任务历史,任务分配信息。
  • 支持表单挂载,全局表单,节点表单。
  • 支持流程事件脚本在线编写,包括:流程启动、完成、取消;任务分配、创建、结束等。
  • 支持智能提交,相同处理人自动跳过,自动完成第一个任务。
  • 版本化管理流程,新调整的流程业务不影响正在运行,未结束的流程继续流转。
  • 流程在线监控,运行中、已结束的流程掌控在手,可将运行中流程挂起、终止。
  • 完善的审批记录机制,每一步审批操作都进行详实的记录。

后续计划

  • 数据实体在线设计
  • 数据实体与表单字段关联
  • 完善的消息通知体制(催办、邮件、消息、短信通知等)
  • 丰富表单设计器组件功能
  • 其他

#一个完整的流程示例

#1. 创建一个流程分类

首先咱们先创建一个流程分类,对咱们新建的流程或表单进行归类。进入菜单:业务流程-> 分类管理,点击“新增分类”按钮,新建一个分类,数据如下:

name:分类名称

code:分类编码

注意:分类名称和分类编码均不可重复。

#2. 设计一个请假模型

进入菜单:业务流程-> 模型管理,点击“新增模型”按钮,新建一个模型,数据如下:

name: 模型名称

key: 模型键值

注意:键值不能重复,并且只能以下划线(_)或字母开头

模型创建完毕,进入到列表页面,点击刚才创建的【设计】按钮,进入到如下流程设计器页面。

接下来,我们按照如下步骤,设计上面的流程图。

#2.1.拖拽开始节点、任务节点、结束节点,并通过连接线连接。

#2.2.双击每一个节点,分别给他们取名字。

#2.3.点击第一个【填写申请单】的节点,选择,“分配用户”,在弹出框选择“流程发起人”。

#2.4.点击其他节点,选择“分配用户”,在弹出框选择分配给单个用户,分别给其他节点分配好任务办理人

#关于流程设计器中人员分配的说明:

在流程设计器中的“身份存储”选项卡,如图:

  • 分配给流程发起人:顾名思义,即将该节点的办理人分配给流程发起人,本工作流功能已经实现提交申请自动将发起人信息设置到流程中,无需其他操作。
  • 分配给单个用户:即将该节点的办理人分配给单个用户,分配给谁,谁就会收到待办任务。
  • 候选用户:即将该节点的办理人分配给多个用户,比如:把某节点的办理人分配给张三和李四,则他们俩都会收到待办任务,其中一人办理完成,则任务消失。
  • 候选组:即将该节点的办理人分配给一个或多个角色,比如:把某节点的办理人分配给“部门经理”这个角色,则拥有这个角色的人都会收到待办任务,其中一人办理完成,则任务消失。

在流程设计器中的“固定值”选项卡,如图:

我们可能会遇到这种情况,比如,我根本不知道该节点的办理人应该是具体的哪个人,他是动态的,怎么办呢?使用下面的方式即可解决这个问题

  • 分配:即分配给单个人,此处填写${xxx}格式的流程变量,其中xxx为变量,值是用户的id。比如:${leader},那么leader这个变量从哪里来呢,我们可以在流程启动时, 让流程自动执行一个脚本,获取当前用户的leader,并设置到变量,则流程运行至本节点时,leader就会收到待办任务。

关于脚本的说明,请见后面第4节:编写一个groovy脚本。

  • 候选用户:即分配给多个人,跟上面一条一样也是变量,值分别为用户的id,不过他可以增行设置多个变量。

  • 候选组:即分配给一个或多个角色,跟上面一条一样也是变量,值分别为角色的id,不过他可以增行设置多个变量。

特别注意:当第一个输入框,即“分配”框中填写了变量时,下面的两个就不起作用,因为已经指定了具体的某个人,若希望分配给不同的人,或不同的角色,则第一个输入框应空着。

#2.5.人员分配好后,流程就画好啦,点击如下图的对勾,校验下有没有问题。

出现如下图所示的图片,就表示流程图绘制正确

而如果出现如下图所示,则表示流程图绘制有问题,点击红色方块,会提示哪里绘制不正确,一般为连接线没有连上,将其连好即可。

注意:本流程功能已符合中国式工作流,无需画退回按钮。

#3. 设计两个请假表单

进入菜单:业务流程-> 表单管理,点击新增表单,数据如下:

注意:名称和编码均不能重复

表单创建完毕,进入到列表页面,点击刚才创建的【设计】按钮,进入到如下表单设计器页面。

给每个表单组件填写数据字段,表单设计完成,点击保存。

点击刚才我们创建的“请假只读单”的“复制”按钮,创建一个“请假只读单”,将表单输入框都设为禁用,该表单用于审批时各节点查看。

注意:“填写单”和“只读单”为本案例需要,仅供参考,具体业务时可根据需要创建,比如:各节点均能修改表单数据时,可只创建一个填写单即可

#4. 编写一个groovy脚本

进入菜单:业务流程-> 脚本管理,点击新增脚本(脚本语法为groovy,学习地址:https://www.w3cschool.cn/groovy),数据如下:

注意:此处仅为测试打印一句话,具体业务时,可自行编写脚本内容

#5. 把模型部署好

进入菜单:业务流程-> 模型管理,点击我们刚刚创建的“请假流程”的那条数据的“部署”按钮,选择分类:

点击“确定”流程部署完成。

#6. 对部署的定义进行相关配置

进入菜单:业务流程-> 定义管理,点击我们刚刚部署好的“请假流程”的“配置”按钮,对流程定义进行配置。

#6.1.进入“选项”tab栏,对该流程定义的选项进行配置。

流程标题:可用内置变量为user:发起人姓名,time:发起时间,title: 流程名称,可自由组合为自己需要的格式,如:user发起了title[time], 则最终效果为:张三发起了请假流程[2020-09-07 12:00:00],如不填写,则默认格式为“user在time发起了title”。

自动完成第一个任务:即流程启动时,自动完成第一个任务,本流程第一个节点为填写申请单,在起草申请时,已将表单填写完成并启动流程,因此可配置为自动完成第一个任务。

跳过相同处理人:即在流程启动,或任务办理后,若下一节点的办理人跟上一节点的办理人相同,则自动跳过,例如:某流程第一个节点为填写申请单, 第二个节点为“部门经理审批”,张三为部门经理,则自己提交申请后,自动跳过“部门经理审批”节点,避免自己审批自己。

#6.2.进入“按钮”tab栏,对该流程定义的按钮进行配置。

点击“新增按钮”,通过选择活动节点,和勾选按钮的方式对该节点进行配置。

注意:配置了按钮的节点,在审批时拥有这些按钮的权限;“加签”和“减签”按钮仅适用于会签任务,若该任务节点不是会签任务却配置了这两个按钮,在审批时点击按钮会提示“该任务非会签任务”。 关于各个按钮的说明,请见后面第9节:办理一个任务。

若某节点未配置任何按钮,则默认拥有“提交”、“保存”、“退回”、“追踪”四个按钮的权限。

#6.3.进入“事件”tab栏,对该流程定义的事件进行配置。

点击“新增事件”按钮,通过选择“节点”或“全局”的方式,对某一节点,或整个流程的全局进行事件控制。

点击“事件类型”下拉框,选择事件的类型

在“脚本”框,可输入脚本代码,也可下拉选择已有的脚本。流程运行触发该事件时,将会执行脚本中的内容,脚本内置变量为execution(DelegateExecution),即当前流程执行器实例, 可以通过获取DelegateExecution,对当前流程执行情况进行处理,比如:流程启动时动态设置后续节点办理人,流程结束时给发起人发送消息等,均可以通过编写脚本的方式实现。

关于DelegateExecution中的方法与使用,请见org.flowable.engine.delegate.DelegateExecution类。

执行顺序:数字越小越先执行(相同的执行顺序,按创建时间正序执行,即最早创建的最先执行)

此处为方便演示,仅打印一句话,脚本输入:

System.out.println("这是打印的内容");

#6.4.进入“表单”tab栏,对该流程定义的表单进行配置。

点击“新增表单”按钮,通过选择表单与选择节点类型的方式给流程定义绑定表单。

节点类型

启动 :顾名思义,即启动时候的表单,在起草申请时会获取该流程定义的启动节点表单,用于填写发起申请,因此此处配置为“请假填写单”。

全局:即流程的全局表单,在某节点没有配置单独的表单时,就会使用全局表单,一般全局表单用于审批时查看,因此此处配置为“请假只读单”。

节点:即专门给某节点配置表单,在此案例中,第一个节点是填写申请单,后续的节点退回时一般退回到此节点,由发起人修改表单内容后再提交,因此此处配置为“请假填写单”。 而我们在流程定义中配置了“自动完成第一个任务”,因此不会出现用户提交申请后又流转到“填写申请单”这个节点,会自动跳过,避免填写两次。

点击保存,至此,流程定义配置完毕。

#7. 把配置好的定义应用到入口

进入菜单:业务流程-> 定义管理,找到我们刚才配置好的“请假流程”的定义,点击“应用”按钮:

填写好入口名称,图标,排序等,点击保存,即将该流程应用到申请入口了,可以在菜单:业务流程-> 入口管理,看到我们刚才应用好的入口。

接下来,我们就要开始发起申请了。

#8. 在入口起草一个申请

进入菜单:在线办公-> 我的申请 -> 起草申请

点击“请假申请”,进入填写表单。

将表单填写完成,点击“发布”即启动流程。

#9. 办理一个任务

待办人登录系统,进入菜单:在线办公-> 我的任务 -> 待办任务,可看到收到一条待办任务。

点击“追踪”按钮,可看到该流程的图形化信息和审批记录。

点击“办理”按钮,进入到任务办理界面,可看到填写的申请单信息。

关于各按钮的说明

任务办理页面的按钮展示与否取决于【流程定义】菜单的【按钮配置】功能,见6.2节说明。

提交

提交即将任务完成并流转至下一节点,点击“提交”按钮,弹出审批意见框

点击确定,即完成任务,并将任务流转至下一节点。

注意:在流程定义的按钮配置时,如果配置了“指定”这个按钮,则在点击提交时,会有指定下一节点办理人的选项,即,“指定”这个按钮并非真正的 按钮,它是与“提交”按钮组合形成的效果。如下图所示:

提交并指定下一步办理人信息后,任务将流转至下一节点,并设置好任务办理人、办理期限等。

保存

保存即在用户审批任务时,若修改了填写的表单信息,但不想马上提交任务,则可以临时保存,填写的数据也会保存。

退回

退回,顾名思义即将任务退回,本流程支持将任务退回到任一历史节点,并兼容并行网关,子流程等。

任务退回后,相应的审批人会收到该待办任务。

转办

转办,即将本该属于自己办理的任务,因为一些特殊情况,转办给其他人,或其他角色。

点击转办后,要转办的人或角色都会收到一条待办任务,其中一人完成后,任务消失,并流转至下一节点。

委托

委托,即阅示的意思。用户审批某任务时,不知道该不该给通过,或者拒绝,可邀请其他人来阅示,并给出意见,被邀请的人完成(解决)该任务并给出 意见后,任务会回到原办理人手里,原办理人提交任务,流转至下一节点。

终止

终止,即直接终止该流程实例,终止后该流程实例直接结束。

追踪

追踪,即追踪该流程的流转信息,这个在流程定义、起草申请、实例管理等处均可看到。 追踪包含可视化图形(鼠标放到节点上会变色,非静态图片)和每个节点的审批意见,如图所示:

挂起

挂起,即将该流程实例挂起,跟【实例管理】里面的挂起功能一致,任务(实例)挂起后,待办人看不到该条待办任务。

跳转

跳转这个功能就比较牛皮了,一般给领导审批的节点配置。点击“跳转”按钮,可将流程跳转到任意节点,注意是任意节点,哪怕是审批过的,它跟退回 的区别就是:退回只能退回到审批过的节点,跳转可以跳到任意节点。此功能能够满足特事特办的需求。

加签

加签,即给会签(或签)任务动态增加办理人,增加的办理人会收到待办任务。

此功能仅针对会签(或签)任务,如果不是会签(或签)任务,即便 有此按钮,点击加签也会提示“该任务不是会签(或签)任务或节点配置错误”。

减签

加签,即给会签(或签)任务动态减少办理人,减去的办理人不会收到待办任务。 点击“减签”按钮,会弹出减签对话框,并列出本节点原本该审批的人是哪些,可以减少一个或多个人。

此功能仅针对会签(或签)任务,如果不是会签(或签)任务,即便 有此按钮,点击加签也会提示“该任务不是会签(或签)任务或节点配置错误”。

打印

打印就是打印当前申请单,可用作存档等。

#已办任务

进入菜单:在线办公-> 我的任务 -> 已办任务,可看到我们刚刚办理的任务。

在已办任务的“追踪”功能可以看到我们刚刚的审批信息。

#10. 看看流程的运行情况

进入菜单:业务流程->实例管理,可以对所有的流程实例进行管理与监控

可以对未结束的流程进行挂起、结束(终止)等操作。逻辑如下:

未结束的流程:

  • 未挂起的流程:可以挂起,可以结束
  • 已挂起的流程:可以激活,不可结束,激活后才能结束

已结束的流程:

不能操作

点击流程标题的链接,会进入到该实例的任务办理情况。

#11.常见问题汇总(不断更新)

#11.1 代码树

工作流代码树

工作流代码树
│  
├─button			->流程按钮
│   
├─category			->流程分类
│   
├─definition		->流程定义
│   
├─draft				->流程草稿
│   
├─event				->流程事件
│   
├─form				->流程表单
│              
├─instance			->流程实例
│
├─model				->流程模型
│   
├─option			->流程选项
│   
├─script			->流程脚本
│   
├─shortcut			->申请入口
│   
├─task				->任务相关
│  │ 
│  ├─donetask		->已办任务
│  │              
│  ├─handletask		->任务办理
│  │   
│  ├─instancetask	->实例任务
│  │   
│  └─todotask		->待办任务
│                  
└─user				->流程用户

#11.2 怎么用工作流

将designer.sql、guns-separation.sql导入到您的数据库,然后在FlowableConfig.java中找到如下代码:

    @Bean
    public FlowableProperties flowableProperties() {
        FlowableProperties flowableProperties = new FlowableProperties();
        //关闭自动任务
        flowableProperties.setAsyncExecutorActivate(false);
        //关闭自动创建表,第一次创建完表之后可以关闭
        flowableProperties.setDatabaseSchemaUpdate(Convert.toStr(false));
        //关闭自动部署resource/processes中的流程文件
        flowableProperties.setCheckProcessDefinitions(false);
        return flowableProperties;
    }

第一次使用,将setDatabaseSchemaUpdate改为true,启动项目,会自动创建工作流相关表,创建完毕,可将此处改为false,后续就不用再创建了。

#11.3 会签审批怎么配置

以上面的请假流程为例,我们看下会签审批如何配置:

  • 1.双击某用户任务节点

  • 2.多实例类型:Parallel(并行,并发执行,到此节点时同时生成多个任务);Sequential(串行,按顺序执行,生成一个任务,一人审批完成继续生成下一个任务)

  • 3.多实例基数:定义多实例的基数,指定多实例会签人数,循环多少次后结束,一般设定会签人集合的大小,例如:${num} (可在流程启动时设定该变量,类型为 Integer)

  • 4.多实例集合的变量名:即会签人id集合的变量名,如pers,可在流程启动时设置该变量,传入要会签的人的id的集合。

  • 5.多实例元素变量名:即循环遍历时每个元素的变量名,如per,则需要在该节点的审批人中指定为${per}

  • 6.多实例完成条件:定义多实例的完成条件,内置多实例变量包括:nrOfInstances(实例总数)、nrOfActiveInstances(当前还未完成的,对于顺序的多实例,此值总是1)、nrOfCompletedInstances(已完成的实例个数),例如:${nrOfCompletedInstances/nrOfInstances >= 0.8} (说明当有 80% 的任务完成时,会完成此多实例)。 如未配置,则所有人审批完成后,流程才流转至下一节点。

流程配置完成后,在流程启动事件添加脚本:启动时设置会签人员。

脚本内容如下:

import cn.hutool.core.collection.CollectionUtil;
import cn.stylefeng.guns.flowable.core.utils.BpmScriptUtil;

List<Long> userIdList = CollectionUtil.newArrayList();

//此处直接设置三个用户id,在实际业务中,您可以自己定义会签人员的获取方式,
//比如LoginContextHolder.me().getCurrentUserLeaders()
//获取当前用户的领导id集合,在getCurrentUserLeaders()中编写您获取当前用户领导id集合的逻辑即可

userIdList.add(1275735541155614721);
userIdList.add(1280700700074041345);
userIdList.add(1280709549107552257);

//调用脚本工具类,给执行实例设置会签人员
//execution(DelegateExecution)为内置变量,您可以通过execution来对流程执行实例进行各种操作
//关于DelegateExecution中的方法与使用,请见org.flowable.engine.delegate.DelegateExecution类。
BpmScriptUtil.setVariableForInstance(execution, "pers", userIdList);

//调用脚本工具类,给执行实例设置多实例基数为会签人员数量
BpmScriptUtil.setVariableForInstance(execution, "num", 3);

以上内容配置好后,启动流程,会执行此脚本,给该节点设置会签人员,流程运转到该节点时,该节点设置的会签人员每个人都会收到待办任务,进行会签审批。

#11.4 上线相关

由于flowable使用的数据库名为大写,在部署到linux时,请开启大小写忽略: 打开my.cnf或my.ini

lower_case_table_names = 1

#11.5 学习文档

flowable官方学习文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值