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

ScriptRunner执行JQL查询遭遇JQLParseException问题求助

问题:ScriptRunner执行JQL统计Jira问题时触发JqlParseException异常

我尝试在ScriptRunner中执行代码,统计摘要字段值为“aa”的Jira问题数量,但遭遇了JQLParseException异常。在Jira中直接执行相同查询可返回274条结果,说明查询本身有效。

异常日志

2022-08-05 15:18:52,115+0200 https-openssl-nio-443-exec-22 WARN mouh 918x48846x1 19eejnp 10.248.75.214 /secure/CommentAssignIssue.jspa [atlassian-jira.log] myyy exception: com.atlassian.jira.jql.parser.JqlParseException: com.atlassian.jira.jql.parser.antlr.RuntimeRecognitionException: NoViableAltException(59@[])

相关代码

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import org.apache.log4j.Logger
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.opensymphony.workflow.InvalidInputException;
import com.softwareag.jira.insight.helper.Helper;
import java.sql.ResultSet;
import java.util.Map;
import com.atlassian.jira.project.version.Version;
import com.atlassian.jira.workflow.function.issue.AbstractJiraFunctionProvider;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.WorkflowException;
import groovy.sql.GroovyRowResult
import groovy.sql.*
import groovy.sql.Sql
import java.sql.*; 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;
import org.ofbiz.core.entity.ConnectionFactory;
import org.ofbiz.core.entity.GenericEntityException;
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter


log.warn("HELLO 111")       

def log = Logger.getLogger("atlassian-jira.log")


def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
log.warn("MOUNA 3 ")
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
log.warn("MOUNA 4 ")

def issueManager = ComponentAccessor.getIssueManager()
log.warn("MOUNA 5")


// edit this query to suit
// I am looking for all issues with value "aa" for the summary field
def myquery = "summary ~ aa" 
log.warn("total issues  "+ myquery)

try{
def query = jqlQueryParser.parseQuery(myquery)

}catch (Exception e){
    log.warn("myyy exception: "+e)
}
解决方案
  • 异常原因:JQL中使用模糊匹配符~时,匹配的字符串必须用双引号包裹。Jira前端会自动兼容无引号的写法,但ScriptRunner中的JQL解析器对语法要求更严格,未加引号的aa会被识别为无效语法,触发解析异常。

  • 修复步骤:

    1. 修改JQL语句,将匹配字符串用双引号包裹,正确的JQL应为:summary ~ "aa"
    2. 优化代码:移除重复的import语句,添加完整的查询统计逻辑,通过SearchProvider执行查询并获取结果数量。

修复后的代码示例:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.web.bean.PagerFilter
import org.apache.log4j.Logger

def log = Logger.getLogger("atlassian-jira.log")
log.warn("HELLO 111")       

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchProvider = ComponentAccessor.getComponent(SearchProvider)

// 修正后的JQL,字符串用双引号包裹
def myquery = 'summary ~ "aa"' 
log.warn("执行的JQL查询: " + myquery)

try {
    def query = jqlQueryParser.parseQuery(myquery)
    // 获取当前登录用户作为查询执行者
    def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
    // 执行查询并获取总数量
    def results = searchProvider.search(query, currentUser, PagerFilter.getUnlimitedFilter())
    log.warn("匹配的问题数量: " + results.total)
} catch (Exception e) {
    log.warn("异常信息: " + e.getMessage(), e)
}
  • 额外说明:
    • 确保脚本使用的用户拥有对应的Jira查询权限,否则会返回0条结果或权限异常。
    • 移除冗余的import语句可减少代码复杂度,提升脚本执行效率。

内容的提问来源于stack exchange,提问作者منى

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:33:17