视图数据根据流程筛选¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1kdgqlvs2s2
脚本说明¶
该脚本用于在视图中根据流程状态筛选数据。通过关联流程状态表,可以筛选出特定流程状态的数据,如运行中的流程、已完成的流程等。
常见实现方式¶
方式1:筛选运行中的流程¶
(function(){
var sql = "select domainid,d.id,d.item_字段1,d.item_字段2 ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
sql += "and fs.state = '运行中'";
return sql;
})();
方式2:筛选已完成的流程¶
(function(){
var sql = "select domainid,d.id,d.item_字段1,d.item_字段2 ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
sql += "and fs.state = '已完成'";
return sql;
})();
方式3:筛选当前用户的待办流程¶
(function(){
var currentUserId = getWebUser().getId();
var sql = "select domainid,d.id,d.item_字段1,d.item_字段2 ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "inner join t_actor a on fs.id = a.flowstatert_id ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
sql += "and a.actor_id = '"+currentUserId+"' ";
sql += "and a.state = 0";
return sql;
})();
方式4:根据流程状态标签筛选¶
(function(){
var stateLabel = getParameter("流程状态");
var sql = "select domainid,d.id,d.item_字段1,fs.state_label ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";
if(stateLabel != null && stateLabel.trim().length > 0){
sql += " and fs.state_label = '"+stateLabel+"'";
}
return sql;
})();
扩展示例¶
示例1:筛选多个流程状态¶
(function(){
var sql = "select domainid,d.id,d.item_字段1,fs.state,fs.state_label ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
sql += "and fs.state in ('运行中', '已完成', '已终止')";
return sql;
})();
示例2:筛选指定流程的数据¶
(function(){
var flowId = getParameter("流程ID");
var sql = "select domainid,d.id,d.item_字段1,d.item_字段2 ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";
if(flowId != null && flowId.trim().length > 0){
sql += " and fs.flow_id = '"+flowId+"'";
}
return sql;
})();
示例3:筛选当前节点的数据¶
(function(){
var nodeId = getParameter("节点ID");
var sql = "select domainid,d.id,d.item_字段1,fs.state_label ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";
if(nodeId != null && nodeId.trim().length > 0){
sql += " and fs.current_node_id = '"+nodeId+"'";
}
return sql;
})();
示例4:筛选已审批的数据¶
(function(){
var sql = "select domainid,d.id,d.item_字段1,fs.state ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "inner join t_actorhis ah on fs.id = ah.flowstatert_id ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
sql += "and ah.actor_id = '"+getWebUser().getId()+"' ";
sql += "and ah.attitude is not null ";
sql += "group by d.id";
return sql;
})();
示例5:筛选流程时间范围¶
(function(){
var startDate = getParameter("开始日期");
var endDate = getParameter("结束日期");
var sql = "select domainid,d.id,d.item_字段1,fs.created,fs.state ";
sql += "from tlk_表单名 d ";
sql += "inner join t_flowstatert fs on d.id = fs.docid ";
sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";
if(startDate != null && startDate.trim().length > 0){
sql += " and fs.created >= '"+startDate+"'";
}
if(endDate != null && endDate.trim().length > 0){
sql += " and fs.created <= '"+endDate+"'";
}
sql += " order by fs.created desc";
return sql;
})();
关键函数说明¶
getWebUser().getDomainid(): 获取当前用户的域IDgetWebUser().getId(): 获取当前用户IDgetParameter("参数名"): 获取视图查询参数
系统表说明¶
- t_flowstatert: 流程状态运行时表,存储流程的运行时状态
docid: 文档IDflow_id: 流程IDstate: 流程状态(运行中、已完成、已终止等)state_label: 状态标签(节点名称)current_node_id: 当前节点IDcreated: 创建时间- t_actor: 流程执行人表,存储当前待处理的执行人信息
- t_actorhis: 流程执行人历史表,存储审批历史记录
流程状态说明¶
- 运行中: 流程正在运行,还未完成
- 已完成: 流程已经完成
- 已终止: 流程已被终止
- state_label: 当前节点的状态标签(节点名称)
筛选方式¶
按流程状态筛选¶
按状态标签筛选¶
按当前节点筛选¶
按审批人筛选¶
注意事项¶
- ⚠️ domainid字段: SQL查询必须包含
domainid字段 - ⚠️ 表关联: 需要正确关联
t_flowstatert表 - ⚠️ 状态值: 流程状态值需要与实际系统状态值匹配
- ⚠️ 性能优化: 关联查询可能影响性能,注意索引使用
- 使用
INNER JOIN只显示有流程的文档 - 使用
LEFT JOIN可以显示所有文档(包括无流程的) - 注意SQL语句的正确性,避免语法错误
使用场景¶
- 查看运行中的流程
- 查看已完成的流程
- 查看待办任务
- 流程数据统计
- 流程监控
如需查看完整脚本代码,请访问源文档链接。