视图中根据当前待办做一个伪提交脚本¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a66rqd84fl
脚本说明¶
该脚本用于在视图中根据当前待办任务进行伪提交操作。伪提交是指模拟流程提交操作,但不实际流转到下一个节点,通常用于测试或特殊业务场景。
常见实现方式¶
方式1:基本伪提交脚本¶
(function(){
var selectId = getParameter("_selects"); // 获取选中的待办ID
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
var taskId = selectId.split(";")[0]; // 获取第一个待办ID
// 根据待办ID获取文档
var sql = "select domainid,doc_id ";
sql += "from t_task ";
sql += "where id = '"+taskId+"'";
var task = findBySQL(sql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 伪提交:更新文档状态但不实际流转
var params = createParamsTable();
params.setParameter("_attitude", "伪提交");
params.setParameter("_pseudoSubmit", "true");
// 更新文档状态
doc.setStateLabel("伪提交状态");
docProcess.doUpdate(doc);
return "伪提交成功";
}
}
return "伪提交失败";
})();
方式2:通过待办ID获取文档并伪提交¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
var taskId = selectId.split(";")[0];
// 获取待办信息
var taskSql = "select domainid,doc_id,flowstatert_id ";
taskSql += "from t_task ";
taskSql += "where id = '"+taskId+"'";
var task = findBySQL(taskSql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var flowStateId = task.getItemValueAsString("flowstatert_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 更新审批历史,模拟提交
var dName = sys_function.DATASOURCENAME;
var attitude = "伪提交操作";
var updateSql = " UPDATE T_ACTORHIS SET [ATTITUDE] = '"+attitude+"' ";
updateSql += " WHERE PROCESSTIME = ";
updateSql += " (SELECT MAX(PROCESSTIME) FROM T_ACTORHIS ";
updateSql += " WHERE DOC_ID = '"+docId+"' ";
updateSql += " AND FLOWSTATERT_ID = '"+flowStateId+"') ";
updateSql += " AND FLOWSTATERT_ID = '"+flowStateId+"' ";
updateByDSName(dName, updateSql);
// 更新执行人状态为已处理
var actorSql = " UPDATE T_ACTOR SET STATE = 1 ";
actorSql += " WHERE FLOWSTATERT_ID = '"+flowStateId+"' ";
actorSql += " AND ACTOR_ID = '"+getWebUser().getId()+"' ";
actorSql += " AND STATE = 0";
updateByDSName(dName, actorSql);
return "伪提交成功";
}
}
return "伪提交失败";
})();
方式3:批量伪提交¶
(function(){
var selectIds = getParameter("_selects");
if(selectIds == null || selectIds.trim().length == 0){
return "请选择待办任务";
}
var taskIds = selectIds.split(";");
var successCount = 0;
var failCount = 0;
for(var i = 0; i < taskIds.length; i++){
var taskId = taskIds[i];
if(taskId == null || taskId.trim().length == 0){
continue;
}
var taskSql = "select domainid,doc_id ";
taskSql += "from t_task ";
taskSql += "where id = '"+taskId+"'";
var task = findBySQL(taskSql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 执行伪提交操作
var params = createParamsTable();
params.setParameter("_attitude", "批量伪提交");
doc.setStateLabel("已伪提交");
docProcess.doUpdate(doc);
successCount++;
}else{
failCount++;
}
}else{
failCount++;
}
}
return "成功:" + successCount + ",失败:" + failCount;
})();
方式4:伪提交并记录日志¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
var taskId = selectId.split(";")[0];
var taskSql = "select domainid,doc_id,flowstatert_id ";
taskSql += "from t_task ";
taskSql += "where id = '"+taskId+"'";
var task = findBySQL(taskSql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var flowStateId = task.getItemValueAsString("flowstatert_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 执行伪提交
var dName = sys_function.DATASOURCENAME;
var attitude = "伪提交操作";
// 更新审批历史
var updateSql = " UPDATE T_ACTORHIS SET [ATTITUDE] = '"+attitude+"' ";
updateSql += " WHERE PROCESSTIME = ";
updateSql += " (SELECT MAX(PROCESSTIME) FROM T_ACTORHIS ";
updateSql += " WHERE DOC_ID = '"+docId+"' ";
updateSql += " AND FLOWSTATERT_ID = '"+flowStateId+"') ";
updateSql += " AND FLOWSTATERT_ID = '"+flowStateId+"' ";
updateByDSName(dName, updateSql);
// 更新执行人状态
var actorSql = " UPDATE T_ACTOR SET STATE = 1 ";
actorSql += " WHERE FLOWSTATERT_ID = '"+flowStateId+"' ";
actorSql += " AND ACTOR_ID = '"+getWebUser().getId()+"' ";
actorSql += " AND STATE = 0";
updateByDSName(dName, actorSql);
// 记录日志
var logSql = "insert into tlk_日志表 (item_文档ID, item_操作, item_操作人, item_操作时间) ";
logSql += "values ('"+docId+"', '伪提交', '"+getWebUser().getName()+"', '"+format(new Date(), "yyyy-MM-dd HH:mm:ss")+"')";
updateByDSName(dName, logSql);
return "伪提交成功";
}
}
return "伪提交失败";
})();
扩展示例¶
示例1:伪提交并更新文档字段¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
var taskId = selectId.split(";")[0];
var taskSql = "select domainid,doc_id ";
taskSql += "from t_task ";
taskSql += "where id = '"+taskId+"'";
var task = findBySQL(taskSql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 更新文档字段
doc.findItem("处理状态").setValue("已伪提交");
doc.findItem("处理时间").setValue(format(new Date(), "yyyy-MM-dd HH:mm:ss"));
doc.findItem("处理人").setValue(getWebUser().getName());
// 更新文档
docProcess.doUpdate(doc);
return "伪提交成功";
}
}
return "伪提交失败";
})();
示例2:伪提交前验证权限¶
(function(){
var currentUser = getWebUser();
var userRole = currentUser.getRole();
// 验证是否有伪提交权限
var hasPermission = false;
if(userRole != null){
var roleName = userRole.getName();
if(roleName === "管理员" || roleName === "流程管理员"){
hasPermission = true;
}
}
if(!hasPermission){
return "您没有伪提交权限";
}
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
// 执行伪提交操作...
return "伪提交成功";
})();
示例3:伪提交并发送通知¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择待办任务";
}
var taskId = selectId.split(";")[0];
var taskSql = "select domainid,doc_id ";
taskSql += "from t_task ";
taskSql += "where id = '"+taskId+"'";
var task = findBySQL(taskSql);
if(task != null){
var docId = task.getItemValueAsString("doc_id");
var docProcess = getDocumentProcess();
var doc = docProcess.doView(docId);
if(doc != null){
// 执行伪提交
doc.setStateLabel("已伪提交");
docProcess.doUpdate(doc);
// 发送通知给文档作者
var authorId = doc.getAuthor();
if(authorId != null && authorId.trim().length > 0){
sendMessage(authorId, "您的文档已进行伪提交操作");
}
return "伪提交成功,已发送通知";
}
}
return "伪提交失败";
})();
关键函数说明¶
getParameter("_selects"): 获取视图中选中的待办任务IDgetDocumentProcess(): 获取文档处理对象docProcess.doView(docId): 根据文档ID查看文档docProcess.doUpdate(doc): 更新文档updateByDSName(dName, sql): 在指定数据源中执行SQL更新语句sys_function.DATASOURCENAME: 获取数据源名称
系统表说明¶
- t_task: 待办任务表,存储待办任务信息
id: 任务IDdoc_id: 文档IDflowstatert_id: 流程状态运行时ID- t_actor: 流程执行人表,存储当前待处理的执行人信息
- t_actorhis: 流程执行人历史表,存储审批历史记录
伪提交说明¶
- 伪提交: 模拟流程提交操作,但不实际流转到下一个节点
- 用途: 通常用于测试、特殊业务场景或流程干预
- 特点: 更新审批历史和执行人状态,但不改变流程的实际流转
注意事项¶
- ⚠️ 待办ID获取: 通过
getParameter("_selects")获取选中的待办ID - ⚠️ 权限控制: 伪提交操作需要相应权限,建议添加权限验证
- ⚠️ 状态更新: 需要更新审批历史和执行人状态
- ⚠️ 数据一致性: 确保更新操作的数据一致性
- 伪提交不会实际流转流程,只是模拟提交操作
- 建议记录伪提交日志,便于追溯
- 注意SQL语句的正确性,避免数据错误
使用场景¶
- 视图中的批量处理
- 流程测试
- 特殊业务场景
- 流程干预
- 待办任务处理
如需查看完整脚本代码,请访问源文档链接。