跳转至

视图中根据当前待办做一个伪提交脚本

本文档内容来源于 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"): 获取视图中选中的待办任务ID
  • getDocumentProcess(): 获取文档处理对象
  • docProcess.doView(docId): 根据文档ID查看文档
  • docProcess.doUpdate(doc): 更新文档
  • updateByDSName(dName, sql): 在指定数据源中执行SQL更新语句
  • sys_function.DATASOURCENAME: 获取数据源名称

系统表说明

  • t_task: 待办任务表,存储待办任务信息
  • id: 任务ID
  • doc_id: 文档ID
  • flowstatert_id: 流程状态运行时ID
  • t_actor: 流程执行人表,存储当前待处理的执行人信息
  • t_actorhis: 流程执行人历史表,存储审批历史记录

伪提交说明

  • 伪提交: 模拟流程提交操作,但不实际流转到下一个节点
  • 用途: 通常用于测试、特殊业务场景或流程干预
  • 特点: 更新审批历史和执行人状态,但不改变流程的实际流转

注意事项

  • ⚠️ 待办ID获取: 通过 getParameter("_selects") 获取选中的待办ID
  • ⚠️ 权限控制: 伪提交操作需要相应权限,建议添加权限验证
  • ⚠️ 状态更新: 需要更新审批历史和执行人状态
  • ⚠️ 数据一致性: 确保更新操作的数据一致性
  • 伪提交不会实际流转流程,只是模拟提交操作
  • 建议记录伪提交日志,便于追溯
  • 注意SQL语句的正确性,避免数据错误

使用场景

  • 视图中的批量处理
  • 流程测试
  • 特殊业务场景
  • 流程干预
  • 待办任务处理

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