常用脚本

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

组织常用脚本

获取指定组织下岗位人员

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

// groupIds 组织id,逗号分隔,若为空则默认取当前用户的组织
// roleCodes 角色CODE
orgScript.getSisByGroupAndRole(groupIds,roleCodes);


// 获取当前审批者的部门经理(当前部门岗位 如“科技部-部门经理” 下的人员)
orgScript.getSisByGroupAndRole(null,"bmjl");


// 获取当前审批者组织上级的部门经理
IGroup group = ContextUtil.getCurrentGroup();
if(group==null)return Collections.EMPTY_SET;

String parentId = group.getParentId();
orgScript.getSisByGroupAndRole(parentId,"bmjl");


// 获取发起人组织的部门经理
String startOrgId = bpmInstance.getCreateOrgId();
orgScript.getSisByGroupAndRole(startOrgId,"bmjl");

获取指定组织的上级组织

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

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

// 如当前节点候选人为上一节点上级组织
return orgScript.getSpecificSuperOrg(null);

获取指定类型的上级组织

如获取当前部门上级中 组织类型为分公司的组织

// 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);

获取指定类型的上级岗位人员

返回 指定类型组织下的指定角色的岗位人员Set<SysIdentity>

// groupId 若为空则使用当前组织,level为组织级别,rolecode 为指定角色下的岗位
Set<SysIdentity> users = orgScript.getSpecificSuperPostIdentity(String groupId,int level,String roleCodes)

// 如获获取发起人所在组织的分公司的负责人
String startOrgId = bpmInstance.getCreateOrgId();
return getSpecificSuperPostIdentity(startOrgId,1);

设置表单中字段的值作为任务候选人

表单中如果存在用户信息,可以通过该脚本直接设置为流程候选人

// id 为用户ID,name 为用户名
orgScript.constructeIdentityUser(id,name);

eg: 业务对象Demo中存在 两个字段,用户ID:userId,用户名:userName,将此用户直接作为某个节点的候选人,那么就可以在 人员脚本中配置该脚本
return orgScript.constructeIdentityUser(Demo.get("userId"),Demo.get("name"));
// 源代码
public Set<SysIdentity> constructeIdentityUser(String id, String name) {
Set<SysIdentity> userSet = new HashSet<>();
userSet.add(new DefaultIdentity(id, name, SysIdentity.TYPE_USER));
return userSet;
}

将一个组织字段作为任务候选人

// id 为组织ID,name 为组织名
orgScript.constructeIdentityOrg(id,name);

检查用户是否拥有某角色

如判断用户是否为 部门负责人。返回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();

流程常用脚本

获取流程变量

建议非插件支持环境使用,否则直接使用 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)