编写版本: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