获取流程当前审批人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(): 获取文档IDgetUserById(userId): 根据用户ID获取用户对象user.getName(): 获取用户姓名user.getLoginno(): 获取用户登录名user.getDepartment(): 获取用户部门queryBySQL(sql): 执行SQL查询findBySQL(sql): 执行SQL查询并返回第一条记录countBySQL(sql): 统计查询结果数量
系统表说明¶
- t_flowstatert: 流程状态运行时表,存储流程的运行时状态
- t_actor: 流程执行人表,存储当前待处理的执行人信息
actor_id: 执行人IDactor_name: 执行人姓名state: 状态(0=待处理,1=已处理)node_id: 节点ID- t_flow_node: 流程节点表,存储流程节点信息
审批人状态说明¶
- state = 0: 待处理状态,表示该审批人还未处理
- state = 1: 已处理状态,表示该审批人已经处理过
- 当前审批人: 查询条件为
state = 0的执行人
注意事项¶
- ⚠️ 状态判断: 当前审批人是指
state = 0(待处理)的执行人 - ⚠️ 多个审批人: 一个节点可能有多个审批人,需要遍历获取
- ⚠️ 用户信息: 通过
getUserById()获取用户详细信息,包括登录名 - ⚠️ 空值判断: 用户可能不存在,需要判断返回值
- 查询时注意字段名称的正确性
- 如果流程已结束,可能没有当前审批人
- 建议在需要获取审批人信息时使用,如条件判断、信息展示等
使用场景¶
- 显示当前审批人信息
- 根据审批人执行业务逻辑
- 审批人权限判断
- 审批人信息记录
- 流程信息展示
如需查看完整脚本代码,请访问源文档链接。