流程脚本介绍
流程配置中很多地方都使用了 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()) { |
当然您也可以在“任务后置脚本插件” 中自行调用业务方法去更新数据库的值,或者扩展一些对应的业务逻辑
更多案例您可以再楼底评论,我们遇到特殊需求会进行补充
常用脚本
在系统管理-开发辅助-常用脚本中,可以维护常用的、通用的 Groovy 脚本