直接跳到内容
本页目录

作者:lightning
更新于:4/21/2023

脚本介绍

简介

在流程或其他系统功能可以使用 Groovy 脚本来实现代码逻辑扩展,如:

  • 任务前后置脚本 :用于在任务创建、完成时,调用一段配置的 java 代码逻辑
  • 流程节点表单初始化脚本 :用于节点表单的初始化赋值
  • 自由跳转规则的条件配置 :用于决策是否跳转至配置的指定节点
  • 分支、条件同步 的条件配置 :用于决策分支流向
  • 流水号脚本配置:根据脚本生成的参数对流水号进行生成和重编 等等...

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

如何编写 Groovy 脚本

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

1、直接写 groovy 脚本的形式

在较少逻辑的场景时推荐使用这种形式

获取表单的字段值 demo.age
设置表单字段值 demo.put('age','')
分支条件判断 demo.age > 10
获取容器中的 bean SpringUtil.getBean(xxxx.class)
等等....

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

如果您脚本实现的业务逻辑相对复杂,可以在源码中添加 IScript 实现类
实现了 IScript 接口的实现类会自动注入到 Groovy 引擎中
这样就可以在 Groovy 脚本中通过 beanID 的形式调用,如:
sysScript.getNextSerialNo('流水号别名')
xxScript.initData(xxxBusData)

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

  • SysScript :获取流水号、获取当前用户、等, 可以扩展一些系统公用的常用脚本
  • OrgScript :获取组信息、设置节点候选人、等, 可以扩展一些组织架构公用的常用脚本

我们推荐不同业务独立添加专用的常用脚本如 :

java
//XX业务脚本实现类
@Component("myTestScript")
public class MyTestScript implements IScript {

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

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

TIP

扩展 IScript 的形式可以借助 IDE 减少代码中语法错误,还方便 debugger 调试,还可以沉淀常用的业务逻辑,方便复用,有利于统一管理、代码评审!

流程脚本变量介绍

在指定 流程脚本的时候,会将流程实例生命周期中可用变量注入到 Groovy 引擎的“临时变量”中,您可以非常安全的在脚本中使用到这些变量

流程变量

流程定义的变量,流程变量在 Groovy 脚本中均可以被使用(使用前需要确认是否对该流程变量赋过值)
流程变量文档参考。。。

业务对象

业务对象即 BizData 存储了流程的业务数据(URL 表单不支持)。

一个流程实例支持配置多个业务对象,业务对象的 key 为变量名,BizData 为值,在 Groovy 脚本中可以用它来获取业务数据。

如表单前置脚本中 对业务对象 主表字段赋值:

Demo.put('zd2','')

获取子表对象:
BizData data = Demo.getChildren('xxcode')
修改子表字段:
Demo.put('xxcode',data)
获取子表字段:
Demo.getChildren('xxcode').collect{ it.get('xxid') }

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

流程插件中会使用 BpmPluginGlobalInvokeDataDTO 作为 Groovy 运行参数
适用在 前后置脚本插件、自由跳转插件、节点消息插件、人员脚本插件等...

  • submitActionDesc: 流程提交的动作名字(eg:点击同意按钮,则为“同意”)
  • submitActionName: 流程提交的动作 key (eg: 点击同意按钮,则为“agree”)
  • submitOpinion: 任务提交意见
  • bpmInstance: 流程实例 IBpmInstance
  • bpmTask: 流程任务 IBpmTask
  • startUser: 流程发起者 id,用户账户,角色,部门等信息
  • currentUser: 任务处理者 id,用户账户,角色,部门等信息
  • variableScope: Activiti 流程变量操作类 VariableScope,可以使用它操作原声 Activiti 流程变量 如:
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);

常用脚本

在系统-系统功能-常用脚本中,可以维护常用的、通用的 Groovy 脚本,加入常用脚本的脚本可以在流程中直接选择使用

Groovy脚本 has loaded