自定义更新侦听器,用于设置子任务的修复版本

时间:2017-05-30 07:56:26

标签: groovy jira

我正在开发自定义侦听器,它会将子任务的修复版本更新为与父问题相同的值。

目前我们正在工作流中使用post-function,以便根据子任务创建的父级设置子任务的修复版本。但是,这不包括子任务已存在且父级修复版本更新的情况。父任务的新值不会传播到子任务。

我正在使用脚本运行器,我正在为我的特定项目和指定的事件创建'自定义lisatener':'Issue Updated'。我添加了脚本如下:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.SubTaskManager
import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.project.version.Version
import org.apache.log4j.Logger

class CopyFixVersionFromParentToChild extends AbstractIssueEventListener {
    Logger log = Logger.getLogger(CopyFixVersionFromParentToChild.class);
    SubTaskManager subTaskManager = ComponentAccessor.getComponent(SubTaskManager.class)
    IssueManager issueManager = ComponentAccessor.getComponent(IssueManager.class)

    @Override
    void issueUpdated(IssueEvent event) {
        log.warn("\nIssue updated!!!\n")
        try {
            Issue updatedIssue = event.getIssue()
            if (updatedIssue.issueTypeObject.name == "Parent issue type") {
                Collection<Version> fixVersions = new ArrayList<Version>()
                fixVersions = updatedIssue.getFixVersions()
                Collection<Issue> subTasks = updatedIssue.getSubTaskObjects()
                if (subTaskManager.subTasksEnabled && !subTasks.empty) {
                    subTasks.each {
                        if (it instanceof MutableIssue) {
                            ((MutableIssue) it).setFixVersions(fixVersions)
                            issueManager.updateIssue(event.getUser(), it, EventDispatchOption.ISSUE_UPDATED, false)
                        }
                    }
                }
            }
        } catch (ex) {
            log.debug "Event: ${event.getEventTypeId()} fired for ${event.issue} and caught by script 'CopyVersionFromParentToChild'"
            log.debug(ex.getMessage())
        }
    }
}

问题是,它不起作用。我不确定我的脚本逻辑是否封装在类中的rit问题。我是否必须以某种特定方式注册?或者我使用脚本运行器完全错误并且我将此脚本粘贴到错误的部分?我检查了JIRA API的代码,它看起来应该可以工作,我的IDE没有显示任何警告/错误。

另外,有人可以给我提示如何从这样的自定义脚本中找到日志输出?无论我在记录器中输入什么消息,我似乎无法在JIRA日志中找到任何地方(虽然我知道脚本现在可能不起作用)。

非常感谢任何回复,谢谢。

马丁

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。 发布的方法,实现了侦听器作为groovy类的方式与我预期的方式不同。这些脚本文件用于在JIRA安装中的特定路径中定位,ScriptRunner将它们作为侦听器注册到JIRA中。 为了创建“简单”的监听器脚本,它响应发出更新的事件,我不得不将其删除到此代码

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.project.version.Version

IssueManager issueManager = ComponentAccessor.getComponent(IssueManager.class)

Issue updatedIssue = event.getIssue()
Collection<Version> fixVersions = new ArrayList<Version>()
fixVersions = updatedIssue.getFixVersions()
Collection<Issue> subTasks = updatedIssue.getSubTaskObjects()
subTasks.each {
    if (it instanceof MutableIssue) {
        ((MutableIssue) it).setFixVersions(fixVersions)
        issueManager.updateIssue(event.getUser(), it, EventDispatchOption.ISSUE_UPDATED, false)
    }
}

你通过这个脚本跑步者界面,它的工作原理:-)。希望这可以帮助任何学习ScriptRunner的人。欢呼声。

马修