流程配置

业务对象

业务对象是流程运行时的业务数据,业务对象与流程实例相关联,一个流程实例可以关联多个业务对象。

业务对象确定后才能选择表单,一个业务对象可以有多个表单,用于不同场景的展示。当然也可以通过业务对象权限配置来控制展示情况。

提示

如果业务对象过于复杂,比如超过了3层,动则关联十多张表,我们极其不建议还继续使用完整的业务对象去维护数据关系。可以考虑将某部分数据从主业务对象拆离开。比如:
学校 - 班级 - 学生,那么可以将学生作为独立维护的内容,表单只关联id、名字。这样流程提交会更快。(后期我们会支持异步加载,异步保存功能,解决超大业务对象影响流程性能的问题)

表单

在线表单

在线表单是由业务对象和表单模板生成,用于展示业务对象数据。
不同节点的表单会通过该节点权限配置情况来展示数据,不同的节点可以配置不同的表单,若节点未配置表单会使用全局表单,以及全局表单权限配置。

URL表单

URL 表单需要配合 “URL表单处理器” 一同使用,URL表单会通过配置的 URL + bizId(业务主键) 去获取展示表单内容,通过表单处理器去持久化表单数据。
以案例库“URL表单流程”为例,全局表单配置URL表单,
PC端URL为:/demo/demo/demoEdit.html?id={bizId}
url表单处理器为:demoManager.saveDemoJson

那么流程处理逻辑步骤为:

  1. 流程展示页面会 通过 iframe 去加载页面 /demo/demo/demoEdit.html?id={bizId} (url的 {bizId}会被替换成业务主键的值,若启动流程则为空)
  2. demoEdit.html 页面会通过 bizId 去后台加载表单数据
  3. 流程提交的时候会调用 demoEdit.html 页面的 getData() js 方法,将表单业务数据提供给流程,在getData方法调用前流程会尝试调用 isValid 方法去校验表单
  4. 流程提交表单后,后台会以 ActionCmd 为入参 调用配置的URL表单处理器 demoManager.saveDemoJson
  5. URL表单处理器 需要保存业务数据,若新增需要对cmd设置bizId
  6. 流程最后会在 流程实例(bpm_instance)中记录设置在 ActionCmd 中的bizId,当流程实例再次打开表单的时候则会以该bizId为参数打开url表单 URL 表单处理器案例

    @Override
    public void saveDemoJson(ActionCmd actionCmd) { //入参可以依赖 wf-api 模块
    // 业务主键
    String bizKey = actionCmd.getBusinessKey();
    // url 表单的业务数据
    JSONObject object = actionCmd.getBusData();
    Demo demo = JSON.toJavaObject(object, Demo.class);

    // 说明新增
    if(StringUtil.isEmpty(bizKey)) {
    String id = IdUtil.getSuid();
    // 新增必须设置流程的bizId
    actionCmd.setBusinessKey(id);
    demo.setId(id);
    demoDao.create(demo);

    //启动时候设置一些流程变量,请看 act_ru_variable 表、在整个流程声明周期您都可以使用该流程变量,可以用于分支判断等等
    Map<String,Object> hashMap = new HashMap<>();
    hashMap.put("startVariable", demo.getMz());
    actionCmd.setActionVariables(hashMap);
    }else {
    demoDao.update(demo);

    // URL表单处理器设置 activiti流程变量,可跳过
    Map<String,Object> hashMap = new HashMap<>();
    hashMap.put("doTaskVariable", demo.getMz() + "-" + actionCmd.getActionName());
    actionCmd.setActionVariables(hashMap);
    }
    }

另外 URL表单支持远程表单处理器,如配置表单处理器为:

// 远程表单处理可以参考 DemoController.formHandler
bpmScriptUtil.httpFormHandler(\"http://localhost:8080/agile-bpm-platform/demo/demo/formHandler\")"

这样做可以保证业务数据保存与流程处理处于同一请求

若URL表单地址为其他系统的前端链接?

URL表单为其他服务器提供的前端地址会存在跨域,鉴权等问题,可以通过路由网关解决跨域js调用问题,单点登录、统一token解决鉴权问题。
为了减少在 agilebpm 系统写太多的远程 url表单处理器,您可以写一个通用的表单处理器来转发业务数据保存的请求

节点业务对象授权

流程选择了自定义表单后,可以对业务对象进行权限配置,若不配置则自动继承 “全局表单配置”
字段权限含以下类型:

  • 无权限: 表单字段会被隐藏。无权限业务对象不会查询该字段数据,若整个对象字段均无权限,则不查询该表数据,也不会对该对象执行保存或者更新操作
  • 只读权限: 业务对象不会更新只读权限字段,前端字段展示为只读
  • 编辑权限: 拥有编辑更新权限
  • 必填权限: 表单会展示必填校验

业务对象可授权层级

  • 业务对象
  • 实体(表)
  • 字段

下级没有配置的情况下会自动继承上级配置的权限,所以业务对象权限配置粒度可粗可细。
若用户拥有某个字段的必填权限则不再去判断是否拥有编辑权限,若有编辑,则不再判断是否有只读权限。若全部都未配置则取上级

提示

当流程需要一个比较大的业务对象时,比如一个业务对象 主表关联了多张子表,不同节点,只维护部分信息,这时候配置权限可以减少数据获取、保存,也能保证节点数据提交的安全性

节点按钮 \ 实例按钮

系统内置的节点按钮在流程后台都会存在一个对应的处理器,处理器定义了该动作执行的具体逻辑以及按钮属性配置等信息
不同的节点类型会展示不同的按钮,比如启动节点不会存在同意、反对按钮

目前支持的按钮类型

节点按钮:

  • 启动: 启动流程实例
  • 保存: 保存草稿
  • 同意: 任务提交,会驱动流程走向下一个节点
  • 反对: 反对动作提交任务,与同意是不同的业务语义,可用于分支判断,在会签中会计票为反对(同意 Action agree ,反对 Action 是 oppose
  • 驳回: 根据流程节点属性配置的驳回情况执行驳回动作,默认驳回至上一节点,可以指定驳回至任意节点
  • 审批历史: 查看历史审批记录和审批意见
  • 流程图: 流程运转情况展示
  • 人工终止: 强制终止流程,会触发终止节点配置的人工终止脚本执行。
  • 打印: 打印当前任务页面
  • 转办: 将任务转交其他人处理
  • 锁定: 多个候选人时,将任务锁定到自己名下
  • 解锁: 取消锁定,将候选人修改为锁定前的状态
    实例按钮:
  • 撤销: 发起人将任务撤销作废
  • 撤回: 将任务撤回到自己手中
  • 催办: 人工催办任务处理者或者加急任务

按钮扩展配置

前置JS脚本

表单提交前执行,常用于扩展特殊 JS 逻辑(此处与表单内置校验JS 方法不冲突)

前置Groovy脚本

流程任务、实例每次打开页面时,服务器执行的 Groovy 脚本,若 return false 则不展示该按钮。
可以用在特殊场景下隐藏按钮的需求,比如通过业务对象动态判断是否展示某个按钮

提示!

默认按钮除了 “按钮名称” 外请勿随意修改!
如果添加了自定义按钮,请务必在前置JS脚本逻辑的最后添加 return false 。否则后端将无法识别请求的动作!

流程扩展属性

流程标题

配置的流程标题模板,可以使用流程属性、流程启动变量作为参数来生成个性化标题。
待办、流程实例列表页面也可以通过关键业务属性检索

状态

配置流程的状态,若禁用则无法处理流程任务。

允许执行人为空

不允许执行人为空时,如果下个任务执行人为空。提交流程会 提示业务异常

支持移动端

流程若不支持移动端,流程实例、任务则不会出现在 移动端中。若支持移动端没有配置移动端表单,系统会提示业务异常

记录每次提交数据

开启后当前流程定义产生的所有任务提交都将记录日志

是否提交意见

若为否,流程启动、任务提交时将无需展示意见录入对话框,直接提交任务,对应动作的名字即为意见!

流程插件

AgileBPM 流程支持很多插件,这里罗列介绍、详细说明请移步 插件文档

  • 节点消息通知 插件: 配置流程在某些节点发送消息给任务候选人

  • 节点表单初始化: 用于流程表单业务数据的初始化

  • 流程数据提交日志插件:该插件会异步记录流程每次提交的业务数据,保存在bpm_submit_data_log

  • 流程节点自动跳过 插件: 用于配置全局任务跳过策略

  • 流程任务自由跳转:当前节点任务提交后,会执行自由跳转脚本,如果脚本返回 true ,则流程会跳转至 配置的目标节点

流程变量定义

用于约定当前流程定义会使用到的流程变量。流程变量可用于分支判断,特殊流程标记等,他会贯穿流程实例整个生命周期。
可以在以下时机对流程设置流程变量

  • 流程启动时
  • 任务提交时
  • 表单处理器中
  • 前后置脚本中

前后置脚本 通过 variableScope 直接操作流程变量,更多参考 插件变量

流程启动、任务处理、表单处理器则通过 ActionCmdsetActionVariables方法设置流程变量

节点配置

节点表单

节点表单配置优先于全局表单,如果未配置表单,节点配置的权限也将无效。

节点人员

点击添加,可以添加一组人员条件配置,支持添加多组配置,如果前一组配置解析出候选人后将不再继续计算下一组。

更多请参考 人员条件配置

节点属性

驳回后执行人

  • 历史执行人:当前节点任务驳回后,被驳回节点将使用之前的处理者作为候选人
  • 节点配置人:驳回后,被驳回节点使用节点配置的人员作为候选人

指定驳回节点

默认为驳回前一节点,支持指定驳回至任意节点。

驳回后流转方式

  • 按流程图执行: 驳回后按流程图运行
  • 返回驳回节点: 驳回后,任务处理者完成任务后将直接跳转回到驳回者手中

查看原图

自由选择候选人

  • 不开启: 当前节点提交意见的时候,不支持对下一环节指定候选人
  • 节点人员: 当前节点提交意见的时候,可以从下一环节候选人中选择其中一位作为任务处理人
  • 所有用户: 当前节点提交意见的时候,可以自由指定下一环节任务的处理人

允许任务撤回

若允许撤回,当前节点任务完成后,下一环节任务未提交前可以撤回到自己手里。
若当前节点为开始节点,可以设置【允许撤回节点】,在指定节点创建前都可以撤回到第一个任务节点。

允许任务撤销

若允许撤销,流程发起后,发起人可以撤销流程申请。
如果设置了【允许撤销节点】,那么在指定节点创建前都可以撤销流程申请。

自由分支选择

可以自由的选择下一步的走向,该设值的优先级高于分支决策、自由跳转等。

是否提交意见

当前节点的任务是否必须录入意见,如果否,则直接使用处理按钮的名字作为意见。

提示!

如果不需要录入意见,则无法自由选择候选人,无法自由分支选择!