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

如何使用JQL或ScriptRunner对比Jira父子问题的解决日期

基于Adaptavist ScriptRunner筛选「解决日期晚于父问题完成时间」子任务实现方案

方法1:直接用增强JQL快速筛选(推荐,适合日常搜索场景)

安装ScriptRunner后可直接在高级搜索页运行以下JQL,适配ScriptRunner 6.0及以上版本:

type = Sub-task
AND resolution is not empty
AND parent is not null
AND resolutiondate > parent.resolutiondate

如果你的ScriptRunner版本不支持直接引用父级字段属性,切换到ScriptRunner自带的Script JQL功能页,粘贴以下Groovy脚本直接执行即可得到结果:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.web.bean.PagerFilter

def searchService = ComponentAccessor.getComponent(com.atlassian.jira.bc.issue.search.SearchService)
def jqlParser = ComponentAccessor.getComponent(com.atlassian.jira.jql.parser.JqlQueryParser)
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser

// 拉取基础范围:所有已解决、存在父级的子任务
def baseQuery = jqlParser.parseQuery("type = Sub-task AND resolution is not empty AND parent is not null")
def searchResult = searchService.search(loggedInUser, baseQuery, PagerFilter.getUnlimitedFilter())

def validSubtaskKeys = []
searchResult.results.each { subtask ->
    def parent = subtask.parentObject
    // 跳过父级未解决、无有效解决日期的条目
    if (!parent.resolutionDate) return
    // 统一转毫秒时间戳对比,规避时区、日期格式导致的判断误差
    if (subtask.resolutionDate.time > parent.resolutionDate.time) {
        validSubtaskKeys << subtask.key
    }
}

// 返回匹配的子任务列表
return validSubtaskKeys

常见实现失败原因排查

  • 日期对比逻辑错误:不要把日期转成字符串做对比,必须取Date对象的time属性(毫秒级时间戳)做数值对比,否则会因时区、日期格式不统一出现判断偏差
  • 缺少空值校验:未解决的Issue没有resolutiondate字段值,直接调用字段属性会触发空指针,导致脚本/查询中断,必须先判断字段非空再做对比
  • 字段映射错误:如果你的父问题「完成时间」是自定义字段而非系统默认的resolutiondate,需要替换对应取值逻辑:先通过自定义字段ID拿到字段对象,再调用getCustomFieldValue()方法取值后对比

扩展:子任务解决时实时校验

如果需要在子任务流转到「已解决」状态时做拦截提示,可以给子任务工作流的解决步骤添加ScriptRunner脚本校验器,脚本如下:

import com.opensymphony.workflow.InvalidInputException

def parentIssue = issue.parentObject
// 父问题未解决时直接放行
if (!parentIssue?.resolutionDate) return true
// 子任务解决日期晚于父问题时拦截
if (issue.resolutionDate.time > parentIssue.resolutionDate.time) {
    throw new InvalidInputException("子任务解决日期不能晚于父问题的解决日期,请核对日期后重新提交")
}
return true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:36:23