跳转至

用户的上级对象获取

本文档内容来源于 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(): 获取用户ID
  • user.getName(): 获取用户名称
  • user.getLoginno(): 获取用户登录名
  • user.getDepartment(): 获取用户部门对象
  • user.getRoles(): 获取用户角色列表

用户上级关系说明

在MyApps平台中: - 用户对象通过 getSuperior() 方法获取直接上级 - 上级关系是单向的(用户 -> 上级) - 一个用户只能有一个直接上级 - 可以通过递归方式获取所有上级(上级的上级) - 如果用户没有上级,getSuperior() 返回 null

注意事项

  • ⚠️ 空值处理: 用户可能没有上级对象,需要判断 getSuperior() 是否返回 null
  • ⚠️ 用户存在性: 确保用户对象存在,避免空指针异常
  • ⚠️ 递归深度: 获取所有上级时注意递归深度,避免无限循环
  • ⚠️ 循环引用: 确保用户上级关系没有循环引用(A的上级是B,B的上级是A)
  • ⚠️ 性能优化: 如果层级很深,注意性能优化
  • 上级对象可能不存在,需要做空值判断
  • 可以通过递归方式获取所有上级对象
  • 上级对象也是用户对象,可以获取其所有属性

使用场景

  • 流程审批时获取上级作为审批人
  • 获取用户的上级信息用于显示
  • 权限控制(根据上级关系)
  • 组织架构展示
  • 数据权限过滤

如需查看完整脚本代码,请访问源文档链接。