流程脚本介绍

流程配置中很多地方都使用了 groovy 脚本来实现代码逻辑扩展,
如:

  • 任务前后置脚本 (用于在任务创建、完成时,调用一段配置的 java 代码逻辑)
  • 流程节点表单初始化脚本(用于在某节点对表单数据 bussinessData 进行初始化数据,或者设置、计算值)
  • 自由跳转规则的条件配置 (用于决策是否跳转至配置的指定节点)
  • 分支、条件同步 的条件配置 (用于决策分支流向)
    等等…

流程配置中凡事使用到 groovy 脚本的配置项、插件 均可以参考该文档

流程脚本使用方式

Groovy 语法 参考: https://www.w3cschool.cn/groovy/

1、直接写 groovy 脚本的形式

在较少逻辑判断的场景时推荐使用这种形式 。比如:分支条件判断 demo.age > 10

2、扩展 IScript 实现类,添加业务逻辑脚本

实现了IScript 接口的实现类会自动注入到 groovy 引擎中,您可以扩展实现 自己业务逻辑的 IScript 实现类
在 Groovy 脚本中通过 beanID 的形式调用
eg: sysScript.getNextSerialNo('流水号别名')xxScript.initData(xxxBusData)

目前系统有一下脚本实现类

  • sysScript :获取流水号、当前用户、等,可以扩展一些系统公用的常用脚本
  • bpmUserScript :通过特殊脚本获取待办人员的脚本

这样做可以借助 IDE 减少代码中语法错误,也有助于 统一管理业务逻辑代码

流程脚本变量介绍

流程实例生命周期中可用的 流程变量,会注入到 groovy 引擎的临时变量中,这样您可以在脚本中使用到这些变量

  • 流程变量

流程定义的变量,流程变量在 groovy 脚本中均可以被使用(使用前需要对流程设置流程变量)

  • 业务对象

    业务对象即 IBusinessData 存储了流程的业务数据(URL 表单不支持)。
    一个流程实例支持配置多个业务对象,您可以通过业务对象的 key 作为变量名,在 groovy 脚本中使用到 BussinessData 对象 来获取业务数据
    eg: 表单前置脚本中 对业务对象 主表字段赋值: Demo.put('zd2','')
    业务对象子表赋值:

    List<IBusinessData> subDemo = Demo.getChildren('DemoSub')
    //subDemo[0].put("zd",1) 即为子表数据

推荐 添加 Iscript 实现类的形式来添加业务脚本逻辑,eg :

//业务脚本实现类
@Repository
public class MyTestScript implements IScript {

public void test(IBusinessData data) {
data.put("name", "张三");
data.put("name", "李四");
}
}

//Groovy 脚本中 myTestScript.test(Demo) 的形式调用 ( Demo 为业务对象 key)

  • 流程插件中可以使用的变量

流程插件中会使用 BpmExecutionPluginSession 作为 Groovy运行参数
详情参考 插件变量
适用在 脚本插件、自由跳转插件、节点消息插件、人员脚本插件等…

  • submitActionDesc: 流程提交的动作名字(eg:点击同意按钮,则为“同意”)
  • submitActionName: 流程提交的动作 key (eg: 点击同意按钮,则为“agree”)
  • submitOpinion: 任务提交意见
  • bpmInstance: 流程实例 IBpmInstance
  • isTask: 是否为任务(实例类型的插件,在任务事件执行的时候、可以通过此变量判断)
  • bpmTask: 流程任务 IBpmTask
  • variableScope: ACT流程变量操作类 VariableScope,可以使用它操作原声 activiti 流程变量 eg:

    Map<String, Object> getVariables();
    Object getVariable(String variableName);
    Set<String> getVariableNames();
    void setVariable(String variableName, Object value);
    void removeVariable(String variableName);
    boolean hasVariable(String variableName);

场景与案例

  • 某节点,领导点击同意,更新业务对象某业务字段
    可以在流程节点表单初始化 插件中 配置 节点的保存后脚本 (actionCmd 参数需要wf 版本1.4.0以上才支持)
 if("agree" == actionCmd.getActionName()) {
SchoolStudent.put('type','审批通过')
}else{
SchoolStudent.put('type','审批不通过')
}

当然您也可以在“任务后置脚本插件” 中自行调用业务方法去更新数据库的值,或者扩展一些对应的业务逻辑

更多案例您可以再楼底评论,我们遇到特殊需求会进行补充

常用脚本

在系统管理-开发辅助-常用脚本中,可以维护常用的、通用的 Groovy 脚本