You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript/ASP筛选指定TaskName的DCR任务数据问题求助

问题定位

现有代码无法实现指定过滤效果的核心原因:

  • 你虽然提前定义了存储目标任务名的ReportArrayNames数组,但全程没有实际调用:既没有在SQL查询阶段加入TaskName的筛选规则,也没有在遍历输出数据集时做值匹配校验,所有查询返回的记录都会被直接输出到页面
  • 原代码存在HTML语法错误:表格起始标签多写了一个右括号,会导致页面样式渲染异常
修复方案

方案1:SQL层直接过滤(推荐,性能最优)

直接在数据库查询阶段过滤掉不符合要求的记录,不需要把无关数据加载到ASP脚本层,查询效率最高,同时可以直接复用你已经定义的ReportArrayNames数组,后续调整显示的任务类型只需要改数组内容即可。

修改步骤:

  1. 先修复原代码的HTML标签错误,把主代码里的表格输出行
    Response.Write "<table class=""GeneralTable"")"
    
    改为
    Response.Write "<table class=""GeneralTable"">"
    
  2. 修改WriteAgedItems子过程内的SQL拼接逻辑,在WHERE条件分支后追加TaskName过滤规则,修改后的SQL拼接部分代码如下:
    ' 自动拼接数组值生成SQL IN子句,复用已定义的ReportArrayNames数组
    Dim taskInClause
    taskInClause = "('" & Join(ReportArrayNames, "','") & "')"
    
    If AgeEnd = 0 Then
      SQL = SQL & " Where FlowInstances.FlowDefinitionID=" & FlowID & " AND FlowInstances.FlowComplete=0 And DateDiff(d,FlowInstances.CurrentTaskStartDate, GetDate())>=" & AgeStart & " And DR.Department<>'END'"
    Else
      SQL = SQL & " Where FlowInstances.FlowDefinitionID=" & FlowID & " AND FlowInstances.FlowComplete=0 And DateDiff(d,FlowInstances.CurrentTaskStartDate, GetDate())>=" & AgeStart & " And DateDiff(d,FlowInstances.CurrentTaskStartDate, GetDate()) <= " & AgeEnd
    End If
    ' 追加任务名过滤条件
    SQL = SQL & " AND Tasks.TaskName IN " & taskInClause
    
    SQL = SQL & " Order by Dr.Department ASC, CurrentTaskStartDate DESC"
    

改完后查询只会返回DCR - Designer和DCR - Checker两类任务的记录,直接输出即可,不需要额外在循环里加判断。

方案2:ASP脚本层过滤(适合需要保留全量查询结果做额外统计的场景)

如果你需要查询所有任务的记录做其他统计计算,只在页面输出阶段过滤目标任务,可以在遍历记录集的循环中加匹配判断,只有TaskName符合要求的记录才输出、计入统计数。

修改步骤:

  1. 同样先修复上述的HTML表格标签错误
  2. 修改WriteAgedItems子过程内的记录遍历循环部分,代码如下:
    Do Until RSItems.Eof
      Dim isMatch, currentTask, arrItem
      isMatch = False
      ' 取出当前记录的任务名,去除首尾空格,同时处理Null值情况
      currentTask = Trim(RSItems("TaskName") & "")
      
      ' 遍历目标任务名数组做匹配
      For Each arrItem In ReportArrayNames
        If currentTask = Trim(arrItem) Then
          isMatch = True
          Exit For
        End If
      Next
    
      ' 匹配成功才输出表格行、累加计数
      If isMatch Then
        Response.Write "<TR>"
        Response.Write "<TD>" & RSItems("EAR_NO") & "</TD>"
        Response.Write "<TD>" & RSItems("TDC_PN") & "</TD>"
        Response.Write "<TD>" & RSItems("Initiator") & "</TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD> </TD>"
        Response.Write "<TD>" & RSItems("TaskName") & "</TD>"
        Response.Write "</TR>"
        RecCount = RecCount + 1
      End If
    
      RSItems.MoveNext
    Loop
    

注意:如果运行时提示ReportArrayNames变量未定义,要么把该数组的定义移到WriteAgedItems子过程内部,要么把数组作为参数传入子过程,避免VBScript变量作用域导致的读取失败问题。

内容的提问来源于stack exchange,提问作者saguiar2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:24:22