作者:管理员  历史版本:1  更新时间:2024-09-25 16:46

编写版本:v3.5.0
适用版本:v3.5.0+

一、 Groovy脚本使用说明

1.1、概要说明

Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性.
语法跟写java代码类似,可以使用java中的lib包帮助类,也可以调用spring 的server的服务

简介:groovy脚本是维护在后端的ibps-excessive-root\modules\platform-excessive工程目录下,产品自带维护在下面脚本类中:

1、BpmnScript.java  //主要与工作流接口业务相关脚本
2、BusinessScript.java //主要业务逻辑相关脚本,比如:库存增/减,查询某个表在增加在另表等
3、CommonScript.java //通用脚本类,比如:获取当前用户信息、组织等
4、JdbcScript.java //主要与jdbc增加、更新、查询的脚本
5、ThridServiceScript.java //主要调用第三方接口相关脚本
6、ValidationScript.java //主要与数据唯一性做校验相关脚本

1.2、常用Bean列表

BeanID Bean说明 使用文档
cmd IBPS流程执行对象(任务、实例) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ActionCmd
execution Activiti任务执行对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BpmDelegateTask
mybatisTemplateProvider SQL执行对象(基于Mybatis,事务一致) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/MybatisTemplateProvider
jdbcScript SQL脚本对象(基于JdbcTemplate,事务不一致) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/JdbcScript
bpmnScript 流程脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BpmnScript
businessScript 业务脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BusinessScript
cscript 通用脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/CommonScript
thridServiceScript 第三方服务脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ThridServiceScript
validationScript 校验脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ValidationScript

说明:

  • 调用规则:BeanID.方法名进行调用方式,即:cscript.getCurrentName();
  • 本身产品维护的脚本类中没有用户相关的业务方法,可自定义脚本类进行增加,开发指导移步:自定义脚本开发范例

二、平台中使用

2.1、表单管理

2.1.1 默认值-动态脚本

登录系统,在【表单管理】-【表单管理】使用Groovy脚本主要在“默认值-动态脚本”、“选择器-范围脚本”、“标签和按钮-文本固定值动态脚本”的使用操作说明,如下图所示:


选择某条数据直接进入“表单设计器”,如下图:

选中某个控件,在设计右边选择“默认值”属性下拉选择“动态脚本”,比如:选中是“单行文本”控件,如下图:

点击“动态脚本”进入编写脚本代码编辑器,比如:获取当前用户账号可调用脚本代码“cscript.getAccount();”,如下图:

注意:脚本方法中返回的类型需要与业务对象定义的类型一致,比如:名称是字符串,年龄是数字,那么在后端脚本类方法返回的类型必须匹配一致!

  • CommonScript.java类中常调用方法说明:
方法 说明 返回类型 脚本调用方式
getAccount() 获取当前登录用户账号信息 字符串 cscript.getAccount();
getCurrentUserId() 获取当前登录用户ID信息 字符串 cscript.getCurrentUserId();
getCurrentName() 获取当前登录用户名称信息 字符串 cscript.getCurrentName();
getCurrentOrgName() 获取当前登录用户所在组织名信息 字符串 cscript.getCurrentOrgName();
getCurrentOrgId() 获取当前登录用户所在组织ID信息 字符串 cscript.getCurrentOrgId();
getCurrentPositionName() 获取当前登录用户所在的主岗位名称信息 字符串 cscript.getCurrentPositionName();
getCurrentPositionId() 获取当前登录用户所在的主岗位ID信息 字符串 cscript.getCurrentPositionId();
getCurDate() 获取系统当前日期,默认格式:yyyy-MM-dd 字符串 cscript.getCurDate();
getCurDateTime() 获取系统当前日期时间,默认格式:yyyy-MM-dd HH:mm:ss 字符串 cscript.getCurDateTime();

2.1.2 表单脚本

可以通过表单脚本的this.$request 调用后端脚本

 this.$request({
        url:'/business/v3/form/def/getScriptValue',
        method: 'post',
        data:  { 
         'script': `Groovy脚本代码`
         }
      }).then(response => {
         //TODO:处理数据返回的逻辑
        }).catch(error => {
            console.log(error)
        })

说明
表单脚本的细节操作说明,移步地址:表单脚本

2.1.3 唯一校验脚本



说明
唯一校验脚本的细节操作说明,移步地址:唯一校验脚本

2.2、流程定义管理

2.2.1、设置事件脚本

登录系统,在【工作流程】-【流程定义管理】使用Groovy脚本主要在“事件设置”进行使用,如下图:

进入设置页面,选中节点信息在系统页面右边区域选择“事件设置”的“前置/后置脚本”,如下图:

说明

2.2.2、表单前后置处理器


说明

  • 表单前后置处理器一般用于URL表单,移步地址:URL表单解决方案

    2.2.3、人员脚本



    说明

  • 人员脚本处理细节操作说明:移步地址:人员脚本

2.3、脚本规范3.5.6+

groovy可以直接使用spring中的beanId调用对应方法。

2.3.1、普通脚本

性能有所欠缺。

return cscript.getAccount();

2.3.2、预编译脚本

可以通过预编译方式提高脚本执行效率。

//script-type=pre
//script-name=Script1
//execute-method=execute

public void execute(Map<String, Object> vars) {
    vars.get("cmd");
    vars.get("execution");
    vars.get("businessKey_");
    vars.get("instanceId_");
    vars.get("flowKey_");
}

// 方法规范
// 不能使用run命名,会与groovy的防范冲突
// 开始/结束节点变量说明
//execution 类型 com.lc.ibps.bpmn.api.model.delegate.BpmDelegateExecution
// 任务节点变量说明
//execution 类型 com.lc.ibps.bpmn.api.model.delegate.BpmDelegateTask
// 通用节点变量说明
//yzfwb 类型 com.lc.ibps.base.bo.model.DataObjectModel
//nodeDef 类型 com.lc.ibps.bpmn.api.model.node.IBpmNodeDefine
//businessKey_ 类型 java.lang.String
//saveBusinessDataMode_ 类型 java.lang.String
//subject_ 类型 java.lang.String
//processDefId_ 类型 java.lang.String
//curUser 类型 java.lang.String
//task_id_ 类型 java.lang.String
//instanceId_ 类型 java.lang.String
//startUser 类型 java.lang.String
//task_qualfied_executor_ids_ 类型 java.lang.String
//flowKey_ 类型 java.lang.String
//isSaveBusinessData_ 类型 java.lang.Boolean