跳转至

获取流程当前审批人ID姓名和登录名

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4jprlndeb

脚本说明

该脚本用于获取流程当前审批人的ID、姓名和登录名。在流程审批过程中,经常需要获取当前待处理的审批人信息,用于业务逻辑判断或信息展示。

常见实现方式

方式1:通过流程执行人表查询

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    // 查询当前流程状态
    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        // 查询当前审批人(state=0表示待处理)
        var sql = "select domainid,actor_id,actor_name ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0";

        var actors = queryBySQL(sql);
        var approverList = [];

        if(actors != null && actors.size() > 0){
            for(var it = actors.iterator(); it.hasNext(); ){
                var actor = it.next();
                var actorId = actor.getItemValueAsString("actor_id");
                var actorName = actor.getItemValueAsString("actor_name");

                // 根据用户ID获取用户信息
                var user = getUserById(actorId);
                var loginName = user != null ? user.getLoginno() : "";

                approverList.push({
                    id: actorId,
                    name: actorName,
                    loginName: loginName
                });
            }
        }

        return approverList;
    }

    return [];
})();

方式2:获取第一个当前审批人

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id,actor_name ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0 limit 1";

        var actor = findBySQL(sql);

        if(actor != null){
            var actorId = actor.getItemValueAsString("actor_id");
            var actorName = actor.getItemValueAsString("actor_name");
            var user = getUserById(actorId);
            var loginName = user != null ? user.getLoginno() : "";

            return {
                id: actorId,
                name: actorName,
                loginName: loginName
            };
        }
    }

    return null;
})();

方式3:通过流程对象获取

(function(){
    var doc = getCurrentDocument();
    var flowProcess = getFlowProcess();
    var flow = flowProcess.doViewByDocument(doc);

    if(flow != null){
        var actors = flow.getCurrentActors();
        var approverList = [];

        if(actors != null && actors.size() > 0){
            for(var i = 0; i < actors.size(); i++){
                var actor = actors.get(i);
                var user = actor.getUser();

                approverList.push({
                    id: user.getId(),
                    name: user.getName(),
                    loginName: user.getLoginno()
                });
            }
        }

        return approverList;
    }

    return [];
})();

方式4:获取所有当前审批人(完整信息)

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id,actor_name,node_id ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0";

        var actors = queryBySQL(sql);
        var approverList = [];

        if(actors != null && actors.size() > 0){
            for(var it = actors.iterator(); it.hasNext(); ){
                var actor = it.next();
                var actorId = actor.getItemValueAsString("actor_id");
                var actorName = actor.getItemValueAsString("actor_name");
                var nodeId = actor.getItemValueAsString("node_id");

                var user = getUserById(actorId);
                var loginName = user != null ? user.getLoginno() : "";
                var department = user != null && user.getDepartment() != null ? user.getDepartment().getName() : "";

                approverList.push({
                    id: actorId,
                    name: actorName,
                    loginName: loginName,
                    nodeId: nodeId,
                    department: department
                });
            }
        }

        return approverList;
    }

    return [];
})();

扩展示例

示例1:获取当前审批人并设置到字段

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id,actor_name ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0 limit 1";

        var actor = findBySQL(sql);

        if(actor != null){
            var actorId = actor.getItemValueAsString("actor_id");
            var actorName = actor.getItemValueAsString("actor_name");
            var user = getUserById(actorId);
            var loginName = user != null ? user.getLoginno() : "";

            // 设置到字段
            doc.findItem("当前审批人ID").setValue(actorId);
            doc.findItem("当前审批人姓名").setValue(actorName);
            doc.findItem("当前审批人登录名").setValue(loginName);

            return actorName;
        }
    }

    return "无当前审批人";
})();

示例2:获取所有当前审批人(字符串格式)

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id,actor_name ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0";

        var actors = queryBySQL(sql);
        var idList = [];
        var nameList = [];
        var loginNameList = [];

        if(actors != null && actors.size() > 0){
            for(var it = actors.iterator(); it.hasNext(); ){
                var actor = it.next();
                var actorId = actor.getItemValueAsString("actor_id");
                var actorName = actor.getItemValueAsString("actor_name");
                var user = getUserById(actorId);
                var loginName = user != null ? user.getLoginno() : "";

                idList.push(actorId);
                nameList.push(actorName);
                loginNameList.push(loginName);
            }
        }

        return {
            ids: idList.join(";"),
            names: nameList.join(";"),
            loginNames: loginNameList.join(";")
        };
    }

    return {
        ids: "",
        names: "",
        loginNames: ""
    };
})();

示例3:判断当前用户是否为审批人

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();
    var currentUserId = getWebUser().getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0 ";
        sql += "and actor_id = '"+currentUserId+"'";

        var count = countBySQL(sql);

        return count > 0;
    }

    return false;
})();

示例4:获取当前审批人及节点信息

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,a.actor_id,a.actor_name,a.node_id,n.node_name ";
        sql += "from t_actor a ";
        sql += "left join t_flow_node n on a.node_id = n.id ";
        sql += "where a.flowstatert_id = '"+flowStateId+"' ";
        sql += "and a.state = 0";

        var actors = queryBySQL(sql);
        var approverList = [];

        if(actors != null && actors.size() > 0){
            for(var it = actors.iterator(); it.hasNext(); ){
                var actor = it.next();
                var actorId = actor.getItemValueAsString("actor_id");
                var actorName = actor.getItemValueAsString("actor_name");
                var nodeId = actor.getItemValueAsString("node_id");
                var nodeName = actor.getItemValueAsString("node_name");

                var user = getUserById(actorId);
                var loginName = user != null ? user.getLoginno() : "";

                approverList.push({
                    id: actorId,
                    name: actorName,
                    loginName: loginName,
                    nodeId: nodeId,
                    nodeName: nodeName
                });
            }
        }

        return approverList;
    }

    return [];
})();

示例5:格式化显示当前审批人

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();

    var flowStateSql = "select domainid,id ";
    flowStateSql += "from t_flowstatert ";
    flowStateSql += "where docid = '"+docId+"'";
    var flowState = findBySQL(flowStateSql);

    if(flowState != null){
        var flowStateId = flowState.getId();

        var sql = "select domainid,actor_id,actor_name ";
        sql += "from t_actor ";
        sql += "where flowstatert_id = '"+flowStateId+"' ";
        sql += "and state = 0";

        var actors = queryBySQL(sql);
        var nameList = [];

        if(actors != null && actors.size() > 0){
            for(var it = actors.iterator(); it.hasNext(); ){
                var actor = it.next();
                nameList.push(actor.getItemValueAsString("actor_name"));
            }
        }

        if(nameList.length > 0){
            return "当前审批人:" + nameList.join("、");
        }
    }

    return "无当前审批人";
})();

关键函数说明

  • getCurrentDocument(): 获取当前文档对象
  • doc.getId(): 获取文档ID
  • getUserById(userId): 根据用户ID获取用户对象
  • user.getName(): 获取用户姓名
  • user.getLoginno(): 获取用户登录名
  • user.getDepartment(): 获取用户部门
  • queryBySQL(sql): 执行SQL查询
  • findBySQL(sql): 执行SQL查询并返回第一条记录
  • countBySQL(sql): 统计查询结果数量

系统表说明

  • t_flowstatert: 流程状态运行时表,存储流程的运行时状态
  • t_actor: 流程执行人表,存储当前待处理的执行人信息
  • actor_id: 执行人ID
  • actor_name: 执行人姓名
  • state: 状态(0=待处理,1=已处理)
  • node_id: 节点ID
  • t_flow_node: 流程节点表,存储流程节点信息

审批人状态说明

  • state = 0: 待处理状态,表示该审批人还未处理
  • state = 1: 已处理状态,表示该审批人已经处理过
  • 当前审批人: 查询条件为 state = 0 的执行人

注意事项

  • ⚠️ 状态判断: 当前审批人是指 state = 0(待处理)的执行人
  • ⚠️ 多个审批人: 一个节点可能有多个审批人,需要遍历获取
  • ⚠️ 用户信息: 通过 getUserById() 获取用户详细信息,包括登录名
  • ⚠️ 空值判断: 用户可能不存在,需要判断返回值
  • 查询时注意字段名称的正确性
  • 如果流程已结束,可能没有当前审批人
  • 建议在需要获取审批人信息时使用,如条件判断、信息展示等

使用场景

  • 显示当前审批人信息
  • 根据审批人执行业务逻辑
  • 审批人权限判断
  • 审批人信息记录
  • 流程信息展示

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