跳转至

视图数据根据流程筛选

本文档内容来源于 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(): 获取当前用户的域ID
  • getWebUser().getId(): 获取当前用户ID
  • getParameter("参数名"): 获取视图查询参数

系统表说明

  • t_flowstatert: 流程状态运行时表,存储流程的运行时状态
  • docid: 文档ID
  • flow_id: 流程ID
  • state: 流程状态(运行中、已完成、已终止等)
  • state_label: 状态标签(节点名称)
  • current_node_id: 当前节点ID
  • created: 创建时间
  • t_actor: 流程执行人表,存储当前待处理的执行人信息
  • t_actorhis: 流程执行人历史表,存储审批历史记录

流程状态说明

  • 运行中: 流程正在运行,还未完成
  • 已完成: 流程已经完成
  • 已终止: 流程已被终止
  • state_label: 当前节点的状态标签(节点名称)

筛选方式

按流程状态筛选

WHERE fs.state = '运行中'
WHERE fs.state = '已完成'
WHERE fs.state = '已终止'

按状态标签筛选

WHERE fs.state_label = '节点名称'

按当前节点筛选

WHERE fs.current_node_id = '节点ID'

按审批人筛选

INNER JOIN t_actor a ON fs.id = a.flowstatert_id
WHERE a.actor_id = '用户ID' AND a.state = 0

注意事项

  • ⚠️ domainid字段: SQL查询必须包含 domainid 字段
  • ⚠️ 表关联: 需要正确关联 t_flowstatert
  • ⚠️ 状态值: 流程状态值需要与实际系统状态值匹配
  • ⚠️ 性能优化: 关联查询可能影响性能,注意索引使用
  • 使用 INNER JOIN 只显示有流程的文档
  • 使用 LEFT JOIN 可以显示所有文档(包括无流程的)
  • 注意SQL语句的正确性,避免语法错误

使用场景

  • 查看运行中的流程
  • 查看已完成的流程
  • 查看待办任务
  • 流程数据统计
  • 流程监控

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