业务对象
业务对象是流程运行时的业务数据,业务对象与流程实例相关联,一个流程实例可以关联多个业务对象。
业务对象确定后才能选择表单,一个业务对象可以有多个表单,用于不同场景的展示。当然也可以通过业务对象权限配置来控制展示情况。
提示如果业务对象过于复杂,比如超过了3层,动则关联十多张表,我们极其不建议还继续使用完整的业务对象去维护数据关系。可以考虑将某部分数据从主业务对象拆离开。比如:
学校 - 班级 - 学生,那么可以将学生作为独立维护的内容,表单只关联id、名字。这样流程提交会更快。(后期我们会支持异步加载,异步保存功能,解决超大业务对象影响流程性能的问题)
表单
在线表单
在线表单是由业务对象和表单模板生成,用于展示业务对象数据。
不同节点的表单会通过该节点权限配置情况来展示数据,不同的节点可以配置不同的表单,若节点未配置表单会使用全局表单,以及全局表单权限配置。
URL表单
URL 表单需要配合 “URL表单处理器” 一同使用,URL表单会通过配置的 URL + bizId(业务主键) 去获取展示表单内容,通过表单处理器去持久化表单数据。
以案例库 “URL表单流程” 为例,全局表单配置URL表单,
PC端URL为:/demo/demo/demoEdit.html?id={bizId}
url表单处理器为:demoManager.saveDemoJson
那么流程处理逻辑步骤为:
- 流程展示页面会 通过 iframe 去加载页面
/demo/demo/demoEdit.html?id={bizId}
(url的 {bizId}会被替换成业务主键的值,若启动流程则为空) - demoEdit.html 页面会通过 bizId 去后台加载表单数据
- 流程提交的时候会调用 demoEdit.html 页面的
getData()
js 方法,将表单业务数据提供给流程,在getData方法调用前流程会尝试调用isValid
方法去校验表单 - 流程提交表单后,后台会以
ActionCmd
为入参 调用配置的URL表单处理器demoManager.saveDemoJson
- URL表单处理器 需要保存业务数据,若新增需要对cmd设置bizId
- 流程最后会在 流程实例(bpm_instance)中记录设置在 ActionCmd 中的bizId,当流程实例再次打开表单的时候则会以该bizId为参数打开url表单
URL 表单处理器实现案例(仅限单体架构场景)
|
远程表单处理器
URL表单处理器支持Groovy脚本形式,系统内置了一个 “远程表单处理器” 的常用脚本,它会中继token以 restTemplate 的方式调用远程接口,具体请查看源码 com.dstz.bpm.rest.script.BpmScriptUtil.httpFormHandler(url)
如下配置,可以通过一个 HTTP URL 地址去持久化业务数据,远程表单处理器实现代码位于Demo模块 DemoController.formHandler
bpmScriptUtil.httpFormHandler("http://localhost:8080/agile-bpm-platform/demo/demo/formHandler") |
这样做可以保证业务数据保存与流程处理处于同一请求
若URL表单地址为其他系统的前端链接?URL表单为其他服务器提供的前端地址会存在跨域,鉴权等问题,可以通过路由网关解决跨域js调用问题,单点登录、统一token解决鉴权问题。
为了减少在 agilebpm 系统写太多的远程 url表单处理器,您可以写一个通用的表单处理器来转发业务数据保存的请求
URL 表单地址关键值替换
- 如果包含
{bizId}
则替换为业务主键即:bpmInstance.bizKey
- 如果包含
{token}
则从 session 中取token_
值进行替换 - 如果以
{urlFormDemo:PreAddr}
开头,则将其 替换为 系统属性中urlFormDemo
的值
URL表单前端跨域问题处理
在表单中添加如下代码
// 通知主页面 |
节点表单,表单授权
流程表单权限只能在流程表单中设置,表单列表的权限配置仅对单独使用表单时才有效(比如自定义列表新增页,编辑页,表单预览页)
流程配置节点表单后,可以对业务对象进行权限配置,若不配置则自动继承 “全局表单配置”
字段权限含以下类型:
- 无权限: 表单字段会被隐藏。无权限业务对象不会查询该字段数据,若整个对象字段均无权限,则不查询该表数据,也不会对该对象执行保存或者更新操作
- 只读权限: 业务对象不会更新只读权限字段,前端字段展示为只读
- 编辑权限: 拥有编辑更新权限
- 必填权限: 表单会展示必填校验
业务对象可授权层级
- 业务对象
- 实体(表)
- 字段
下级没有配置的情况下会自动继承上级配置的权限,所以业务对象权限配置粒度可粗可细。
若用户拥有某个字段的必填权限则不再去判断是否拥有编辑权限,若有编辑,则不再判断是否有只读权限。若全部都未配置则取上级
节点表单以及权限使用场景说明
- 流程启动时: 使用开始节点的表单以及权限配置
- 任务处理时: 使用节点表单以及权限配置
- 流程抄送时: 节点抄送使用节点表单只读形式,实例抄送使用实例表单
- 传阅:任务传阅使用任务表单只读形式,流程实例传阅使用实例表单
- 办理历史: 使用任务表单只读形式
表单类型说明
- 全局表单:全局默认的表单以及表单权限
- 节点表单:流程节点任务单独配置的表单,若未配置则默认使用全局表单(流程设计中选中流程节点可以配置节点表单)
- 实例表单:默认查看流程实例的表单,若未配置则默认使用全局表单
- 打印表单:打印时使用的表单,若未配置则默认使用全局表单
提示当流程需要一个比较大的业务对象时,比如一个业务对象 主表关联了多张子表,不同节点,只维护部分信息,这时候配置权限可以减少数据获取、保存,也能保证节点数据提交的安全性
节点按钮 \ 实例按钮
系统内置的节点按钮在流程后台都会存在一个对应的处理器,处理器定义了该动作执行的具体逻辑以及按钮属性配置等信息
不同的节点类型会展示不同的按钮,比如启动节点不会存在同意、反对按钮
目前支持的按钮类型
节点按钮:
- 启动: 启动流程实例
- 保存: 保存草稿
- 同意: 任务提交,会驱动流程走向下一个节点
- 反对: 反对动作提交任务,与同意是不同的业务语义,可用于分支判断,在会签中会计票为反对(同意 Action
agree
,反对 Action 是oppose
) - 驳回: 根据流程节点属性配置的驳回情况执行驳回动作,默认驳回至上一节点,可以指定驳回至任意节点,自由驳回
- 驳回发起人: 驳回到流程的第一个用户节点
- 加办: 临时添加一个任务给指定用户处理,指定用户处理完成后会回到自己手中。
- 抄送: 手动抄送流程实例给指定用户(这里与抄送插件不同,抄送插件为预定义抄送)
- 超管跳转: 超级管理员用于干预流程,指定跳转到 任意节点
超管终止: 超级管理员用于干预流程,临时终止流程实例
审批历史: 查看历史审批记录和审批意见
- 流程图: 流程运转情况展示
- 人工终止: 强制终止流程,会触发终止节点配置的人工终止脚本执行。
- 打印: 打印当前任务页面
- 转办: 将任务转交其他人处理
- 锁定: 多个候选人时,将任务锁定到自己名下
解锁: 取消锁定,将候选人修改为锁定前的状态
会签同意:会签参与者投同意票
- 会签反对:会签参与者投反对票
- 加签:会签时临时添加一个人参与会签投票
实例按钮:
- 撤销: 发起人将任务撤销作废
- 撤回: 将任务撤回到自己手中
- 催办: 人工催办任务处理者或者加急任务
- 超管终止: 超级管理员人工终止流程实例
按钮扩展配置
前置JS脚本
表单提交前执行,常用于扩展特殊 JS 逻辑,return false
可以阻断按钮操作 (此处与表单内置校验JS 方法不冲突)
在前置js中可以使用 scope
变量,可以用它访问到流程表单的数据,等同与表单组件的 this
对象,具体可用信息参考 表单开发指导一文的 data
前置Groovy脚本
流程任务、实例每次打开页面时,服务器执行的 Groovy 脚本,若 return false
则不展示该按钮。
可以用在特殊场景下隐藏按钮的需求,比如通过业务对象动态判断是否展示某个按钮
脚本可用变量: 业务对象eg:demo.getString("name")
, 任务按钮可用: bpmTask
,实例按钮可用:bpmInstance
自定义按钮
按钮支持添加自定义按钮,通过按钮编辑页的添加按钮可以新增定义按钮,自定义按钮需要手动录入别名,名字信息。
自定义按钮需要在前置JS脚本逻辑的最后添加 return false
,需要阻止提交到后台。
自定义按钮相关的逻辑代码 建议在表单的 method
方法区定义,如: scope.testaaa()
则可以调用到表单 method
的方法 testaaa
提示!默认按钮除了 “按钮名称” 外请勿随意修改!否则后端将无法识别按钮的动作!
流程扩展属性
流程标题
配置的流程标题模板,可以使用流程属性、流程启动变量作为参数来生成个性化标题。
待办、流程实例列表页面也可以通过关键业务属性检索
状态
配置流程的状态,若禁用则无法处理流程任务。
允许执行人为空
不允许执行人为空时,如果下个任务执行人为空。提交流程会 提示业务异常
支持移动端
流程若不支持移动端,流程实例、任务则不会出现在 移动端中。若支持移动端没有配置移动端表单,系统会提示业务异常
记录每次提交数据
开启后当前流程定义产生的所有任务提交都将记录日志
是否提交意见
若为否,流程启动、任务提交时将无需展示意见录入对话框,直接提交任务,对应动作的名字即为意见!
流程插件
AgileBPM 流程支持很多插件,这里罗列介绍、详细说明请移步 插件文档
节点消息通知 插件: 配置流程在某些节点发送消息给任务候选人
节点表单初始化: 用于流程表单业务数据的初始化
流程数据提交日志插件:该插件会异步记录流程每次提交的业务数据,保存在
bpm_submit_data_log
表流程节点自动跳过 插件: 用于配置全局任务跳过策略
流程任务自由跳转:当前节点任务提交后,会执行自由跳转脚本,如果脚本返回 true ,则流程会跳转至 配置的目标节点
流程变量定义
用于约定当前流程定义会使用到的流程变量。流程变量可用于分支判断,特殊流程标记等,他会贯穿流程实例整个生命周期。
可以在以下时机对流程设置流程变量
- 流程启动时
- 任务提交时
- 表单处理器中
- 前后置脚本中
前后置脚本 通过 variableScope
直接操作流程变量,更多参考 插件变量
流程启动、任务处理、表单处理器则通过 ActionCmd
的 setActionVariables
方法设置流程变量
节点配置
节点表单
节点表单配置优先于全局表单,如果未配置表单,节点配置的权限也将无效。
节点人员
点击添加,可以添加一组人员条件配置,支持添加多组配置,如果前一组配置解析出候选人后将不再继续计算下一组。
更多请参考 人员条件配置
节点属性
驳回后执行人
- 历史执行人:当前节点任务驳回后,被驳回节点将使用之前的处理者作为候选人
- 节点配置人:驳回后,被驳回节点使用节点配置的人员作为候选人
指定驳回节点
默认为驳回前一节点,支持指定驳回至任意节点。
驳回后流转方式
- 按流程图执行: 驳回后按流程图运行
- 返回驳回节点: 驳回后,任务处理者完成任务后将直接跳转回到驳回者手中
自由选择候选人
- 不开启: 当前节点提交意见的时候,不支持对下一环节指定候选人
- 节点人员: 当前节点提交意见的时候,可以从下一环节候选人中选择其中一位作为任务处理人
- 所有用户: 当前节点提交意见的时候,可以自由指定下一环节任务的处理人
允许任务撤回
若允许撤回,当前节点任务完成后,下一环节任务未提交前可以撤回到自己手里。
若当前节点为开始节点,可以设置【允许撤回节点】,在指定节点创建前都可以撤回到第一个任务节点。
允许任务撤销
若允许撤销,流程发起后,发起人可以撤销流程申请。
如果设置了【允许撤销节点】,那么在指定节点创建前都可以撤销流程申请。
自由分支选择
可以自由的选择下一步的走向,该设值的优先级高于分支决策、自由跳转等。
是否提交意见
当前节点的任务是否必须录入意见,如果否,则直接使用处理按钮的名字作为意见。
提示!如果不需要录入意见,则无法自由选择候选人,无法自由分支选择!
节点图片背景自定义
AgileBPM 针对流程图元素进行了全新的设计,预定义了一套新的风格,并支持上传自定义图片,扩展新节点类型图片
- 节点类型图片: 系统会根据节点类型展示对应的节点图片的默认背景,默认图片路径为
/assets/img/flow
,以_gray
结尾的图片为未办理时的背景图 - 上传图片:上传图片为流程节点的背景图片,不支持未办理灰度风格
- 自定义节点类型: 支持通过节点ID约定自定义节点类型
如节点ID为myStyle_Task1
,那么系统会定位到/agilebpm-ui/assets/img/flow/myStyle.png
未办理为/agilebpm-ui/assets/img/flow/myStyle_gray.png
如果系统不存在该路径图片,会导致流程图渲染异常。