获取流程提交的基本信息¶
本文档内容来源于 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可能有所不同
使用场景¶
- 记录流程提交信息
- 根据提交信息执行业务逻辑
- 提交信息展示
- 流程提交日志
- 提交信息验证
如需查看完整脚本代码,请访问源文档链接。