JIRA MyGroovy JQL脚本函数,适用于各种版本

JIRA MyGroovy JQL脚本函数,适用于各种版本,groovy,jira,jira-plugin,jql,Groovy,Jira,Jira Plugin,Jql,我正在尝试编写一个JQL函数,它将返回一个要比较的版本列表。我们有一个4位数字作为技术发布版本,以周期更新。我需要找到一个给定的编号(当前已安装)和一个新编号(将是新安装的版本)后修复的所有问题 我正在JIRA服务器8.7.1中使用myGroovy插件(免费) 该脚本名为releaseRange 我的代码没有产生我想要的结果(零结果),我不知道为什么。如果验证失败,健全性检查会起作用,我会收到警告 import com.atlassian.jira.JiraDataType import com

我正在尝试编写一个JQL函数,它将返回一个要比较的版本列表。我们有一个4位数字作为技术发布版本,以周期更新。我需要找到一个给定的编号(当前已安装)和一个新编号(将是新安装的版本)后修复的所有问题

我正在JIRA服务器8.7.1中使用myGroovy插件(免费)

该脚本名为releaseRange

我的代码没有产生我想要的结果(零结果),我不知道为什么。如果验证失败,健全性检查会起作用,我会收到警告

import com.atlassian.jira.JiraDataType
import com.atlassian.jira.JiraDataTypes
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.version.VersionManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchQuery
import com.atlassian.jira.jql.operand.QueryLiteral
import com.atlassian.jira.jql.query.QueryCreationContext
import com.atlassian.jira.jql.validator.NumberOfArgumentsValidator
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.util.MessageSet
import com.atlassian.jira.util.MessageSetImpl
import com.atlassian.query.clause.TerminalClause
import com.atlassian.query.operand.FunctionOperand
import ru.mail.jira.plugins.groovy.api.jql.ScriptedJqlValuesFunction

class ReleaseRange implements ScriptedJqlValuesFunction {

    @Override
    public JiraDataType getDataType() {
        return JiraDataTypes.VERSION;
    }

    @Override
    public int getMinimumNumberOfExpectedArguments() {
      return 2;
    }

    @Override
    public MessageSet validate(ApplicationUser searcher, FunctionOperand operand, TerminalClause terminalClause) {
        def i18n = ComponentAccessor.getI18nHelperFactory().getInstance(searcher)
        def numberValidMessage = new NumberOfArgumentsValidator(2i, i18n).validate(operand);
        if (numberValidMessage.hasAnyErrors()) {
            return numberValidMessage
        }
        def messageSet = new MessageSetImpl();
        def from, until;

        try {
            from = operand.getArgs().get(0).toInteger();
        } catch (any) {
            messageSet.addErrorMessage("no valid technical release number:${operand.getArgs().get(0)}");
            messageSet.addErrorMessage("${any}");
        }

        try {
            until = operand.getArgs().get(1).toInteger();
        } catch (any) {
            messageSet.addErrorMessage("no valid technical release number:${operand.getArgs().get(1)}");
            messageSet.addErrorMessage("${any}");
        }

        if (from >= until) {
          messageSet.addErrorMessage("from version needs to be less than until version");
        }

        return messageSet;
    }

    List<QueryLiteral> getValues(QueryCreationContext queryCreationContext, FunctionOperand functionOperand, TerminalClause terminalClause) {
        def versionManager = ComponentAccessor.getVersionManager();

        def List<QueryLiteral> literals = new LinkedList<>();
        def from = functionOperand.getArgs().get(0).toInteger();
        def until = functionOperand.getArgs().get(1).toInteger();
        while (from < until) {
          from++;
          literals << new QueryLiteral(functionOperand, versionManager.getVersion(10800, from.toString()).getId().toLong());
        }

        return literals;
    }
}

被接受,但不会产生任何结果

看来getVersion没有像我预期的那样工作,使用GetVersionByName解决了这个问题。代码需要进行如下调整:

       while (from < until) {
          from++;
          def versions = versionManager.getVersionsByName(from.toString());
          versions.each{ version ->
             literals << new QueryLiteral(functionOperand, version.getId().toLong());
       }
while(从<到){
来自++;
def versions=versionManager.getVersionsByName(from.toString());
版本。每个{version->
字面量
       while (from < until) {
          from++;
          def versions = versionManager.getVersionsByName(from.toString());
          versions.each{ version ->
             literals << new QueryLiteral(functionOperand, version.getId().toLong());
       }