常用脚本

AgileBPM 大量的使用Groovy脚本来扩展业务逻辑,所以您可以参考改 API 使用常用脚本

扩展新的业务脚本

我们建议您在开发具体业务的时候,单独创建新的脚本类来扩展。请参考文档 流程脚本

组织常用脚本

以下脚本已经过时,不在提供API,请直接使用 相对岗位表单人员插件!

  • 获取指定组织下岗位人员
  • 获取指定类型的上级岗位人员
  • 获取指定类型的下级岗位人员
  • 设置表单中字段的值作为任务候选人
  • 将一个组织字段作为任务候选人

脚本中可用的组织信息

  • 流程发起人所在组织ID
String startOrgId = bpmInstance.getCreateOrgId();
  • 当前登录用户的组织信息

import com.dstz.sys.util.ContextUtil;
import com.dstz.org.api.model.IGroup;

IGroup group = ContextUtil.getCurrentGroup();
if(group==null)return Collections.EMPTY_SET;

// 当前登录用户ID,也是上一步任务处理者所在组织ID
String currentGroupId = group.getGroupId();
// 上一步任务处理者上一级组织ID
String parentId = group.getParentId();

获取上级组织作为候选人

用于流程人员脚本,返回Set<SysIdentity>


// 发起人所在组的上级?
String startOrgId = bpmInstance.getCreateOrgId();

// groupId 若为null 则默认获取当前组织即 currentOrgId
Set<SysIdentity> parentIdentity = orgScript.getSuperOrgIdentity(groupId);

获取指定类型的上级组织

如获取当前部门上级中 组织类型为分公司的组织
即查询所属公司信息

// groupId 若为null 则默认获取当前组织
IGroup group = orgScript.getSpecificSuperOrg(groupId,level);

// 如获取当前分公司的组织
orgScript.getSpecificSuperOrg(null,1);

获取指定类型的上级组织作为候选人

返回 指定类型组织的Set<SysIdentity>

// groupId 为组织ID,若为null 则使用当前组织,level为组织级别  集团0、分公司1、组织3、班组5
Set<SysIdentity> group = orgScript.getSpecificSuperOrgIdentity(String groupId,int level)

// 如获获取发起人所在组织的分公司作为候选人
String startOrgId = bpmInstance.getCreateOrgId();
return getSpecificSuperOrgIdentity(startOrgId,1);

检查用户是否拥有某角色

如判断用户是否为 部门负责人。返回Boolean

// userId 若为空则获取当前用户,roleCode 为角色编码
orgScript.checkUserHasRole(userId,roleCode)

获取用户 角色/职务 级别

获取用户 职级、角色级别,当有多个角色时,返回最大的职级。 返回 Int
使用场景:如 部门经理(职级50)、副总(职级80)、普通员工(职级 20)不同角色他们拥有不同的级别。在请假流程中可以判断用户的职级,当大于某个值时作出对应的跳转

// userId 若为null则获取当前用户
orgScript.getUserRoleLevel(userId);

// 如,流程分支中判断 发起人的职级是否为副总50以上级别。
String startUserId = bpmInstance.getCreateBy();
return orgScript.getUserRoleLevel(startUserId)>50;

获取组织类型

用来判断某个组织的组织类型(集团0、分公司1、部门3、班组5)返回Int

//orgId 若为 null 则获取当前组织
orgScript.getOrgLevel(orgId)

// 获取流程发起人的组织级别
return orgScript.getOrgLevel(bpmInstance.getCreateOrgId())

业务对象常用脚本

业务对象转 JSON

JSONObject busJson = busDataScript.busData2Json(BusinessData busData);

JSON 转业务对象

IBusinessData busData = busDataScript.json2BusData(JSONObject busData,String boKey)

校验业务对象是否重复

用于表单保存时,通过某个字段判断数据是否重复

/**
* @param businessData 业务对象
* @param columnName 字段名
* @param 提示的异常消息,会阻断事物
* @return boolean
*/
busDataScript.checkBusDataIsExist(BusinessData busData,String columnName,String msg){

系统常用脚本

获取系统流水号

String serialNo = sysScript.getNextSerialNo(String alias);

获取系统属性(分环境)

String getProperty(String key)

获取当前用户信息

// 更多请查看 util工具类
com.dstz.sys.util.ContextUtil.getCurrentUser();

执行SQL更新语句

可根据外键更新指定字段的值

sysScript.executeUpdateSql(String sql,Object ... params)

  • 参数

    • sql:SQL 包含绑定的参数
    • params:SQL绑定的入参
  • 返回值

    • int : 更新条数

如 更新某表的字段值:(参数可从业务对象中取值)

String sql = "update org_user set fullname_ = ? where id_ = ? ";
sysScript.executeUpdateSql(sql,"小王","1");

指定数据源执行SQL语句

sysScript.executeUpdateSqlOnDataSource(String dataSourceKey,String sql,Object ... params)

  • 参数

    • dataSourceKey:数据源别名,可通过系统配置-数据源管理新增数据源,请确保数据源拥有更新权限
    • sql:SQL 包含绑定的参数
    • params:SQL绑定的入参
  • 返回值

    • int: 成功更新条数
  • 警告: 请勿以外部数据源形式更新主数据源正在更新事物中的同一条业务数据,会导致数据库行锁。

执行Count SQL更新语句

sysScript.executeIntegerSql(String sql,Object ... params)
executeIntegerSqlOnDataSource(String dataSourceKey,String sql, Object ... params)

  • 参数

    • sql:SQL 包含绑定的参数
    • params:SQL绑定的入参
  • 返回值

    • int : count

流程常用脚本

获取流程变量

建议非插件支持环境使用,否则直接使用 variableScope 即可

// 全局变量
Object o = bpmScriptUtil.getVariableByTaskId(String taskId,String variableName);
// 本地变量
Object o = bpmScriptUtil.getVariableLocalByTaskId(String taskId,String variableName);

远程 http 表单处理器

请参考流程配置章节的详细描述

bpmScriptUtil.httpFormHandler(String url)

执行任务同意

可以用在催办脚本中

bpmScriptUtil.complateTaskById(String taskId,String opinion)

执行流程终止

可以用在催办脚本中

bpmScriptUtil.endProcessByInstanceId(String instanceId,String opinion)

执行流程终止

bpmScriptUtil.endProcessByTaskId(String taskId,String opinion)