业务对象

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

在不同节点可以对业务对象进行授权,只有有权限的数据才会在该节点被展示或保存更新

表单

在线表单

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

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 脚本: 流程任务打开前服务器执行的 Java 脚本,return false 则不展示该按钮。比如通过业务数据动态判断是否展示某按钮

流程扩展属性

  • 流程标题: 配置的流程标题模板,可以使用流程属性、流程变量、作为参数来生成个性化标题
  • 状态: 配置状态
  • 允许执行人为空: 不允许执行人为空时,如果下个任务执行人为空。提交流程会 提示业务异常
  • 支持移动端: 流程若不支持移动端,流程实例、任务则不会出现在 移动端中。若支持移动端没有配置移动端表单,系统会提示业务异常

流程插件

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

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

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

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

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

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

流程变量定义

用于约定当前流程定义会使用到的流程变量。可以在流程启动时、任务提交时、前后置脚本中 对流程设置流程变量,流程变量可用于分支判断,特殊流程标记等