跳转至

获取流程提交的基本信息

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

脚本说明

该脚本用于获取流程提交时的基本信息,包括提交人、提交时间、提交意见、目标节点等信息。

常见实现方式

方式1:从流程参数获取

(function(){
    var submitInfo = {
        submitter: getWebUser().getName(),  // 提交人
        submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss"),  // 提交时间
        attitude: getParameter("_attitude"),  // 提交意见
        flowType: getParameter("_flowType"),  // 流程操作类型
        targetNode: getParameter("_targetNode")  // 目标节点
    };

    return submitInfo;
})();

方式2:从当前文档获取

(function(){
    var doc = getCurrentDocument();
    var submitInfo = {
        docId: doc.getId(),
        docName: doc.getItemValueAsString("名称"),
        submitter: getWebUser().getName(),
        submitterId: getWebUser().getId(),
        submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss"),
        currentState: doc.getState(),
        currentStateLabel: doc.getStateLabel()
    };

    return submitInfo;
})();

方式3:从流程状态表查询

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

    // 查询流程提交信息
    var sql = "select domainid,fs.id,fs.flow_id,fs.state,fs.created,fs.author ";
    sql += "from t_flowstatert fs ";
    sql += "where fs.docid = '"+docId+"'";

    var flowState = findBySQL(sql);

    if(flowState != null){
        var submitInfo = {
            flowId: flowState.getItemValueAsString("flow_id"),
            state: flowState.getItemValueAsString("state"),
            created: flowState.getItemValueAsDate("created"),
            author: flowState.getItemValueAsString("author")
        };

        return submitInfo;
    }

    return null;
})();

方式4:获取完整的提交信息

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

    // 获取流程信息
    var flowProcess = getFlowProcess();
    var flowState = flowProcess.doViewByDocument(doc);

    var submitInfo = {
        // 文档信息
        docId: docId,
        docName: doc.getItemValueAsString("名称"),

        // 提交人信息
        submitterId: user.getId(),
        submitterName: user.getName(),
        submitterLoginName: user.getLoginno(),

        // 提交时间
        submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss"),

        // 提交意见
        attitude: getParameter("_attitude"),

        // 流程信息
        flowId: flowState != null ? flowState.getFlowid() : "",
        flowName: flowState != null ? flowState.getFlowName() : "",
        currentState: doc.getState(),
        currentStateLabel: doc.getStateLabel(),

        // 目标节点
        targetNode: getParameter("_targetNode"),

        // 操作类型
        flowType: getParameter("_flowType")
    };

    return submitInfo;
})();

扩展示例

示例1:获取提交信息并记录日志

(function(){
    var doc = getCurrentDocument();
    var user = getWebUser();
    var attitude = getParameter("_attitude");

    var submitInfo = {
        docId: doc.getId(),
        submitter: user.getName(),
        submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss"),
        attitude: attitude != null ? attitude : ""
    };

    // 记录到日志表
    var logSql = "insert into tlk_日志表 (item_文档ID, item_提交人, item_提交时间, item_提交意见) ";
    logSql += "values ('"+submitInfo.docId+"', '"+submitInfo.submitter+"', '"+submitInfo.submitTime+"', '"+submitInfo.attitude+"')";
    updateByDSName("数据源", logSql);

    return submitInfo;
})();

示例2:根据提交信息执行不同逻辑

(function(){
    var doc = getCurrentDocument();
    var attitude = getParameter("_attitude");
    var flowType = getParameter("_flowType");

    var submitInfo = {
        attitude: attitude,
        flowType: flowType
    };

    // 根据提交意见执行不同逻辑
    if(attitude != null && attitude.indexOf("同意") >= 0){
        doc.findItem("处理结果").setValue("通过");
    }else if(attitude != null && attitude.indexOf("不同意") >= 0){
        doc.findItem("处理结果").setValue("不通过");
    }

    // 根据操作类型执行不同逻辑
    if(flowType === "80"){
        // 保存/提交操作
        doc.findItem("最后操作时间").setValue(format(new Date(), "yyyy-MM-dd HH:mm:ss"));
    }

    return submitInfo;
})();

示例3:获取提交历史信息

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

    // 查询提交历史
    var sql = "select domainid,actor_name,attitude,processtime ";
    sql += "from t_actorhis ";
    sql += "where flowstatert_id in (select id from t_flowstatert where docid = '"+docId+"') ";
    sql += "order by processtime desc";

    var history = queryBySQL(sql);
    var historyList = [];

    if(history != null && history.size() > 0){
        for(var it = history.iterator(); it.hasNext(); ){
            var h = it.next();
            historyList.push({
                actor: h.getItemValueAsString("actor_name"),
                attitude: h.getItemValueAsString("attitude"),
                processTime: format(h.getItemValueAsDate("processtime"), "yyyy-MM-dd HH:mm:ss")
            });
        }
    }

    return {
        currentSubmit: {
            submitter: getWebUser().getName(),
            submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss"),
            attitude: getParameter("_attitude")
        },
        history: historyList
    };
})();

示例4:获取目标节点信息

(function(){
    var doc = getCurrentDocument();
    var targetNodeId = getParameter("_targetNode");

    if(targetNodeId != null && targetNodeId.trim().length > 0){
        var flowProcess = getFlowProcess();
        var flow = flowProcess.doViewByDocument(doc);

        if(flow != null){
            var nodes = flow.getNodes();
            var targetNode = null;

            if(nodes != null){
                for(var i = 0; i < nodes.size(); i++){
                    var node = nodes.get(i);
                    if(node.getId() === targetNodeId){
                        targetNode = {
                            id: node.getId(),
                            name: node.getName(),
                            type: node.getType()
                        };
                        break;
                    }
                }
            }

            return {
                targetNodeId: targetNodeId,
                targetNode: targetNode,
                submitter: getWebUser().getName(),
                submitTime: format(new Date(), "yyyy-MM-dd HH:mm:ss")
            };
        }
    }

    return null;
})();

示例5:完整的提交信息对象

(function(){
    var doc = getCurrentDocument();
    var user = getWebUser();
    var params = getParamsTable();

    var submitInfo = {
        // 文档信息
        document: {
            id: doc.getId(),
            name: doc.getItemValueAsString("名称"),
            formName: doc.getFormname()
        },

        // 提交人信息
        submitter: {
            id: user.getId(),
            name: user.getName(),
            loginName: user.getLoginno(),
            department: user.getDepartment() != null ? user.getDepartment().getName() : ""
        },

        // 提交信息
        submit: {
            time: format(new Date(), "yyyy-MM-dd HH:mm:ss"),
            attitude: params.getParameterAsString("_attitude"),
            flowType: params.getParameterAsString("_flowType"),
            targetNode: params.getParameterAsString("_targetNode")
        },

        // 流程信息
        flow: {
            id: doc.getFlowid(),
            state: doc.getState(),
            stateLabel: doc.getStateLabel()
        }
    };

    return submitInfo;
})();

关键函数说明

  • getWebUser(): 获取当前登录用户对象
  • getParameter("参数名"): 获取流程参数
  • getParamsTable(): 获取参数表对象
  • getCurrentDocument(): 获取当前文档对象
  • format(date, format): 格式化日期
  • getFlowProcess(): 获取流程处理对象
  • flowProcess.doViewByDocument(doc): 根据文档获取流程对象

流程提交参数说明

_attitude 参数

  • 说明: 提交意见/审批意见
  • 获取方式: getParameter("_attitude")
  • 可能为空: 如果用户没有填写意见,可能为null或空字符串

_flowType 参数

  • 说明: 流程操作类型
  • 值说明:
  • "80": 保存/提交/暂存操作
  • "81": 回退操作
  • 获取方式: getParameter("_flowType")

_targetNode 参数

  • 说明: 目标节点ID
  • 获取方式: getParameter("_targetNode")
  • 可能为空: 如果流程没有指定目标节点,可能为null

系统表说明

  • t_flowstatert: 流程状态运行时表,存储流程的运行时状态
  • t_actorhis: 流程执行人历史表,存储审批历史记录

注意事项

  • ⚠️ 参数可能为空: _attitude_targetNode 等参数可能为null,需要判断
  • ⚠️ 提交时间: 使用当前时间作为提交时间,实际提交时间可能略有差异
  • ⚠️ 流程状态: 提交时流程状态可能还未更新,需要注意时机
  • ⚠️ 权限控制: 确保有获取流程信息的权限
  • 建议在"提交前"脚本中使用,可以获取提交时的信息
  • 提交后的信息可能需要从历史表中查询
  • 不同版本的API可能有所不同

使用场景

  • 记录流程提交信息
  • 根据提交信息执行业务逻辑
  • 提交信息展示
  • 流程提交日志
  • 提交信息验证

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