我正在开发自定义侦听器,它会将子任务的修复版本更新为与父问题相同的值。
目前我们正在工作流中使用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日志中找到任何地方(虽然我知道脚本现在可能不起作用)。
非常感谢任何回复,谢谢。
马丁
答案 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的人。欢呼声。
马修