用户的上级对象获取¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4fvte5b65
脚本说明¶
该脚本用于获取用户的上级对象。在MyApps平台中,用户对象通常有上级用户(主管、领导等),可以通过用户对象的getSuperior()方法获取。
常见实现方式¶
方式1:获取当前用户的上级对象¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
return superior.getId();
}
return "";
})();
方式2:获取指定用户的上级对象¶
(function(){
var userId = "用户ID";
var user = getUserById(userId);
if(user != null){
var superior = user.getSuperior();
if(superior != null){
return superior.getId();
}
}
return "";
})();
方式3:获取上级对象的详细信息¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
var superiorInfo = {
id: superior.getId(),
name: superior.getName(),
loginno: superior.getLoginno(),
department: superior.getDepartment() != null ? superior.getDepartment().getName() : ""
};
return JSON.stringify(superiorInfo);
}
return "{}";
})();
方式4:获取上级对象并判断是否存在¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
println("上级用户ID: " + superior.getId());
println("上级用户名称: " + superior.getName());
return superior.getId();
}else{
println("当前用户没有上级对象");
return "";
}
})();
扩展示例¶
示例1:获取所有上级对象(递归获取)¶
(function(){
var userId = "用户ID";
var user = getUserById(userId);
var superiors = [];
function getAllSuperiors(currentUser){
if(currentUser == null){
return;
}
var superior = currentUser.getSuperior();
if(superior != null){
superiors.push({
id: superior.getId(),
name: superior.getName(),
loginno: superior.getLoginno()
});
getAllSuperiors(superior); // 递归获取上级的上级
}
}
getAllSuperiors(user);
return JSON.stringify(superiors);
})();
示例2:获取当前用户的所有上级对象¶
(function(){
var currentUser = getWebUser();
var superiors = [];
var current = currentUser;
while(true){
var superior = current.getSuperior();
if(superior == null){
break;
}
superiors.push({
id: superior.getId(),
name: superior.getName(),
loginno: superior.getLoginno(),
department: superior.getDepartment() != null ? superior.getDepartment().getName() : ""
});
current = superior;
}
return JSON.stringify(superiors);
})();
示例3:获取上级对象并获取其部门信息¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
var department = superior.getDepartment();
var result = {
superiorId: superior.getId(),
superiorName: superior.getName(),
departmentId: department != null ? department.getId() : "",
departmentName: department != null ? department.getName() : ""
};
return JSON.stringify(result);
}
return "{}";
})();
示例4:根据用户名称获取上级对象¶
(function(){
var userName = "用户名称";
var user = getUserByName(userName);
if(user != null){
var superior = user.getSuperior();
if(superior != null){
return superior.getId() + "|" + superior.getName();
}
}
return "";
})();
示例5:获取上级对象并判断是否为指定用户¶
(function(){
var currentUser = getWebUser();
var targetUserId = "目标用户ID";
var superior = currentUser.getSuperior();
if(superior != null && superior.getId() === targetUserId){
return true;
}
return false;
})();
示例6:获取上级对象并格式化输出¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
var department = superior.getDepartment();
var output = "上级用户: " + superior.getName() +
" (" + superior.getLoginno() + ")";
if(department != null){
output += " - 部门: " + department.getName();
}
return output;
}
return "当前用户没有上级对象";
})();
示例7:获取上级对象并检查权限¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
var roles = superior.getRoles();
var hasAdminRole = false;
if(roles != null && roles.size() > 0){
for(var i = 0; i < roles.size(); i++){
var roleName = roles.get(i).getName();
if(roleName === "管理员" || roleName === "系统管理员"){
hasAdminRole = true;
break;
}
}
}
var result = {
superiorId: superior.getId(),
superiorName: superior.getName(),
hasAdminRole: hasAdminRole
};
return JSON.stringify(result);
}
return "{}";
})();
示例8:获取上级对象路径(从当前用户到最高级)¶
(function(){
var currentUser = getWebUser();
var path = [];
var current = currentUser;
// 先添加当前用户
path.push({
id: current.getId(),
name: current.getName()
});
// 向上遍历获取所有上级
while(true){
var superior = current.getSuperior();
if(superior == null){
break;
}
path.push({
id: superior.getId(),
name: superior.getName()
});
current = superior;
}
return JSON.stringify(path);
})();
示例9:获取上级对象并获取其角色¶
(function(){
var currentUser = getWebUser();
var superior = currentUser.getSuperior();
if(superior != null){
var roles = superior.getRoles();
var roleList = [];
if(roles != null && roles.size() > 0){
for(var i = 0; i < roles.size(); i++){
var role = roles.get(i);
roleList.push({
id: role.getId(),
name: role.getName()
});
}
}
var result = {
superiorId: superior.getId(),
superiorName: superior.getName(),
roles: roleList
};
return JSON.stringify(result);
}
return "{}";
})();
示例10:错误处理和日志记录¶
(function(){
var userId = "用户ID";
try{
var user = getUserById(userId);
if(user == null){
println("错误: 未找到用户ID " + userId);
return "";
}
var superior = user.getSuperior();
if(superior != null){
println("成功获取上级用户: " + superior.getName() + " (ID: " + superior.getId() + ")");
return superior.getId();
}else{
println("用户 " + user.getName() + " 没有上级对象");
return "";
}
}catch(e){
println("错误: 获取上级对象失败 - " + e.getMessage());
return "";
}
})();
关键函数说明¶
getWebUser(): 获取当前登录用户对象getUserById(userId): 根据用户ID获取用户对象getUserByName(userName): 根据用户名称获取用户对象user.getSuperior(): 获取用户的上级对象user.getId(): 获取用户IDuser.getName(): 获取用户名称user.getLoginno(): 获取用户登录名user.getDepartment(): 获取用户部门对象user.getRoles(): 获取用户角色列表
用户上级关系说明¶
在MyApps平台中:
- 用户对象通过 getSuperior() 方法获取直接上级
- 上级关系是单向的(用户 -> 上级)
- 一个用户只能有一个直接上级
- 可以通过递归方式获取所有上级(上级的上级)
- 如果用户没有上级,getSuperior() 返回 null
注意事项¶
- ⚠️ 空值处理: 用户可能没有上级对象,需要判断
getSuperior()是否返回null - ⚠️ 用户存在性: 确保用户对象存在,避免空指针异常
- ⚠️ 递归深度: 获取所有上级时注意递归深度,避免无限循环
- ⚠️ 循环引用: 确保用户上级关系没有循环引用(A的上级是B,B的上级是A)
- ⚠️ 性能优化: 如果层级很深,注意性能优化
- 上级对象可能不存在,需要做空值判断
- 可以通过递归方式获取所有上级对象
- 上级对象也是用户对象,可以获取其所有属性
使用场景¶
- 流程审批时获取上级作为审批人
- 获取用户的上级信息用于显示
- 权限控制(根据上级关系)
- 组织架构展示
- 数据权限过滤
如需查看完整脚本代码,请访问源文档链接。