流程审批人脚本¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a42tmngcks
脚本说明¶
该脚本用于设置或获取流程审批人。在流程审批过程中,经常需要动态设置审批人,或者获取当前节点的审批人信息。
常见实现方式¶
方式1:设置流程审批人¶
(function(){
var doc = getCurrentDocument();
var docId = doc.getId();
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
// 设置审批人(用户ID,多个用分号分隔)
var approverIds = "用户ID1;用户ID2";
currentNode.setActors(approverIds);
// 或者设置审批人对象
var actors = createObject("java.util.ArrayList");
var user1 = getUserById("用户ID1");
var user2 = getUserById("用户ID2");
actors.add(user1);
actors.add(user2);
currentNode.setActors(actors);
}
}
})();
方式2:根据条件设置审批人¶
(function(){
var doc = getCurrentDocument();
var condition = doc.getItemValueAsString("条件字段");
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
var approverIds = "";
// 根据条件设置不同的审批人
if(condition != null && condition === "类型1"){
approverIds = "用户ID1;用户ID2";
}else if(condition != null && condition === "类型2"){
approverIds = "用户ID3;用户ID4";
}else{
approverIds = getWebUser().getId(); // 默认当前用户
}
currentNode.setActors(approverIds);
}
}
})();
方式3:根据角色设置审批人¶
(function(){
var doc = getCurrentDocument();
var roleName = "角色名称";
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
// 获取角色下的所有用户
var users = getUsersByRole(roleName);
var approverIds = "";
if(users != null && users.size() > 0){
var idList = [];
for(var i = 0; i < users.size(); i++){
idList.push(users.get(i).getId());
}
approverIds = idList.join(";");
}
currentNode.setActors(approverIds);
}
}
})();
方式4:根据部门设置审批人¶
(function(){
var doc = getCurrentDocument();
var departmentName = doc.getItemValueAsString("部门字段");
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
// 获取部门下的所有用户
var department = getDepartmentByName(departmentName);
var approverIds = "";
if(department != null){
var users = department.getUsers();
if(users != null && users.size() > 0){
var idList = [];
for(var i = 0; i < users.size(); i++){
idList.push(users.get(i).getId());
}
approverIds = idList.join(";");
}
}
currentNode.setActors(approverIds);
}
}
})();
扩展示例¶
示例1:设置审批人并记录日志¶
(function(){
var doc = getCurrentDocument();
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
var approverIds = "用户ID1;用户ID2";
currentNode.setActors(approverIds);
// 记录到日志
var logSql = "insert into tlk_日志表 (item_文档ID, item_审批人, item_设置时间) ";
logSql += "values ('"+doc.getId()+"', '"+approverIds+"', '"+format(new Date(), "yyyy-MM-dd HH:mm:ss")+"')";
updateByDSName("数据源", logSql);
}
}
})();
示例2:根据金额设置不同审批人¶
(function(){
var doc = getCurrentDocument();
var amount = doc.getItemValueAsDouble("金额");
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
var approverIds = "";
// 根据金额设置不同的审批人
if(amount <= 1000){
approverIds = "部门经理ID";
}else if(amount <= 10000){
approverIds = "部门经理ID;财务经理ID";
}else{
approverIds = "部门经理ID;财务经理ID;总经理ID";
}
currentNode.setActors(approverIds);
}
}
})();
示例3:设置审批人并发送通知¶
(function(){
var doc = getCurrentDocument();
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
var approverIds = "用户ID1;用户ID2";
currentNode.setActors(approverIds);
// 发送通知给审批人
var ids = approverIds.split(";");
for(var i = 0; i < ids.length; i++){
if(ids[i] != null && ids[i].trim().length > 0){
sendMessage(ids[i], "您有新的待办事项需要处理");
}
}
}
}
})();
示例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 ";
sql += "from t_actor ";
sql += "where flowstatert_id = '"+flowStateId+"' ";
sql += "and state = 0";
var actors = queryBySQL(sql);
var approverIds = "";
if(actors != null && actors.size() > 0){
var idList = [];
for(var it = actors.iterator(); it.hasNext(); ){
var actor = it.next();
idList.push(actor.getItemValueAsString("actor_id"));
}
approverIds = idList.join(";");
}
// 设置到字段
doc.findItem("审批人ID").setValue(approverIds);
return approverIds;
}
return "";
})();
示例5:动态计算审批人¶
(function(){
var doc = getCurrentDocument();
var flowProcess = getFlowProcess();
var flow = flowProcess.doViewByDocument(doc);
if(flow != null){
var currentNode = flow.getCurrentNode();
if(currentNode != null){
// 获取申请人
var applicantId = doc.getAuthor();
var applicant = getUserById(applicantId);
// 获取申请人的部门
var department = applicant != null ? applicant.getDepartment() : null;
// 获取部门经理
var approverIds = "";
if(department != null){
var manager = department.getManager();
if(manager != null){
approverIds = manager.getId();
}
}
// 如果没有部门经理,使用默认审批人
if(approverIds == null || approverIds.trim().length == 0){
approverIds = "默认审批人ID";
}
currentNode.setActors(approverIds);
}
}
})();
关键函数说明¶
getFlowProcess(): 获取流程处理对象flowProcess.doViewByDocument(doc): 根据文档获取流程对象flow.getCurrentNode(): 获取当前节点对象node.setActors(ids): 设置节点审批人- 参数: 用户ID字符串,多个用分号分隔,或用户对象列表
getUsersByRole(roleName): 根据角色获取用户列表getDepartmentByName(name): 根据部门名称获取部门对象getUserById(userId): 根据用户ID获取用户对象
审批人设置方式¶
方式1:用户ID字符串¶
方式2:用户对象列表¶
var actors = createObject("java.util.ArrayList");
actors.add(getUserById("用户ID1"));
actors.add(getUserById("用户ID2"));
node.setActors(actors);
方式3:单个用户¶
系统表说明¶
- t_flowstatert: 流程状态运行时表,存储流程的运行时状态
- t_actor: 流程执行人表,存储当前待处理的执行人信息
- t_flow_node: 流程节点表,存储流程节点信息
注意事项¶
- ⚠️ 设置时机: 通常在"提交前"或"节点进入前"脚本中设置审批人
- ⚠️ 用户ID格式: 多个用户ID用分号(;)分隔
- ⚠️ 用户存在性: 确保设置的用户ID存在且有效
- ⚠️ 节点对象: 需要先获取节点对象才能设置审批人
- 设置审批人后,流程会按照设置的审批人进行流转
- 如果节点已有审批人,设置会覆盖原有审批人
- 建议在设置前先判断节点是否存在
使用场景¶
- 根据条件动态设置审批人
- 根据角色或部门设置审批人
- 根据金额或其他业务规则设置审批人
- 流程审批人动态分配
- 审批人权限控制
如需查看完整脚本代码,请访问源文档链接。