编写版本:v3.5.8
适用版本:v3.5.8+
自定义Groovy脚本开发范例
说明:在平台配置开发中,如果平台原提供的脚本无法满足业务需要,可根据具体业务情况自定义开发符合自身业务需要的脚本。比如:流程分支网关中需要根据扩展属性值配置走不同分支,这时需要自己开发一个获取扩展属性值的脚本方法!
1、后端java方法编写
说明:此类仅作代码规范讲解,若用户业务未满足遵从该文档规范说明可自行增加相关代码实现。
在/iform-excessive-platform/src/main/java/com/ak/iform/platform/script/script
下新增一个jave类,比如:MyScript.java
需要注意的是,该类需要继承BaseScript
类
详细代码如下:
package com.ak.iform.platform.script.script;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.ak.iform.api.org.constant.PartyType;
import com.ak.iform.base.core.util.BeanUtils;
import com.ak.iform.base.core.util.string.StringUtil;
import com.ak.iform.cloud.entity.APIResult;
import com.ak.iform.org.api.IPartyAttrService;
import com.ak.iform.org.party.persistence.entity.PartyAttrPo;
import com.ak.iform.org.party.persistence.entity.PartyAttrValuePo;
/**
* 自定义开发脚本,可直接在Groovy脚本中调用。
*
*/
@Service
public class MyScript extends BaseScript {
@Resource
private IPartyAttrService partyAttrService ;
/**
* 获取当前用户员工扩展属性值
* @param attrKey 具体的扩展属性key
* <pre>
* 脚本中使用方法: myScript.getCurrentEmployeeAttrVal("securityLevel");
* </pre>
* @return
*/
public String getCurrentEmployeeAttrVal(String attrKey) {
if (BeanUtils.isEmpty(currentContext.getCurrentUserId())){
return "";
}
return getAttrVal(currentContext.getCurrentUserId(),PartyType.EMPLOYEE.getValue(),attrKey);
}
/**
* 获取员工扩展属性值
* @param id
* @param attrKey
* <pre>
* 脚本中使用方法: myScript.getEmployeeAttrVal(userId,"securityLevel");
* </pre>
* @return
*/
public String getEmployeeAttrVal(String id,String attrKey) {
if (BeanUtils.isEmpty(currentContext.getCurrentUserId())){
return "";
}
return getAttrVal(id,PartyType.EMPLOYEE.getValue(),attrKey);
}
/**
* 获取扩展属性值
*
* @param id
* @param partyType employee-员工,org-机构,position-岗位,role-角色
* @param attrKey 具体的扩展属性key
* <pre>
* 脚本中使用方法: myScript.getCurrentAttrVal(userId,"employee","securityLevel");
* </pre>
*
* @return
*/
public String getCurrentAttrVal(String id,String partyType,String attrKey) {
if(StringUtil.isBlank(id) ||StringUtil.isBlank(partyType) || StringUtil.isBlank(attrKey)) {
return "";
}
//根据用户ID查询扩展属性
APIResult<List<PartyAttrPo>> apiResult = partyAttrService.findByPartyTypeUserId4Get(partyType, id);
if (apiResult.isFailed() || BeanUtils.isEmpty(apiResult.getData())) {
return "";
}
List<PartyAttrPo> partyAttrPoList = apiResult.getData();
for (PartyAttrPo partyAttrPo : partyAttrPoList) {
if (!attrKey.equals(partyAttrPo.getKey())) {
continue;
}
List<PartyAttrValuePo> values = partyAttrPo.getValues();
if (BeanUtils.isEmpty(values)) {
return "";
}
return values.get(0).getValue();
}
return "";
}
}
2、在平台配置中使用该脚本
2.1、流程定义管理
(1)选择【工作流程】-【流程定义管理】选择某条数据,点击标题或“设计”按钮进去配置页面,在流程图选中“分支网关”节点,配置脚本代码,如下所示:
//获取流程启动用户的扩展属性“securityLevel”的值等于“三级”条件
myScript.getEmployeeAttrVal(startUser,"securityLevel").equals("三级")
将上述代码,复制在分支网关代码编辑器下,如下图:
点击“设置规则”按钮,进去网关配置页面,将代码复制进去,如下图:
(2)选中流程图中的某个节点,移步选择“跳转规则设置”
点击“添加规则”按钮,进入配置界面,如下图:
脚本代码,如下所示:
if(myScript.getEmployeeAttrVal(startUser,"securityLevel").equals("三级")){
return true;
}
2.2、数据模板管理
选择【表单管理】-【数据管理】-【数据模版管理】,选择某条数据进入选择“过滤条件”,也是将获取该属性值的代码复制在文本区域即可,如下所示:
说明:筛选紧急程度等于当前用户所属等级的数据列表信息。
作者:黄春艳 创建时间:2024-12-18 14:45
最后编辑:黄春艳 更新时间:2025-02-14 10:41
最后编辑:黄春艳 更新时间:2025-02-14 10:41