创建问题时,"修复版本"字段设置为特定值(比如2.0)。然后创建子任务,并继承该值。到目前为止还不错。但是,如果以后修改了问题的"修复版本"值(比如1.0),则子任务仍然保持2.0修复版本的值。
有没有一个插件或技术可以用来保持这些字段的同步?
注意:这是作为JIRA功能要求的,但Atlassian似乎不想这么做。https://jira.atlassian.com/browse/JRA-9016
我知道这是一个相当古老的问题。但这是我最近部署的代码。这是issueUpdated事件的事件侦听器,部署在ScriptRunner插件的Script侦听器上。很多代码都来自Jamie Echlin的例子。它仍然需要调整,因为当父级上的"修复版本"字段为"空"时,它的子任务也需要为空。
package com.custom.listeners
import org.apache.log4j.Category
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.project.version.Version
import com.opensymphony.workflow.InvalidInputException
import com.atlassian.jira.config.SubTaskManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.event.type.EventDispatchOption
import java.util.ArrayList
import java.util.Collection
class FixVersionPBI_To_SBI_1 extends AbstractIssueEventListener
{
Category log = Category.getInstance(FixVersionPBI_To_SBI_1.class)
@Override
void issueUpdated(IssueEvent event)
{
try
{
Issue fix_Issue = event.getIssue()
if (fix_Issue.issueTypeObject.name == "Parent issue type" )
{
List changeItems = event.getChangeLog().getRelated("ChildChangeItem")
if( fix_Issue.fixVersions?.name && changeItems.any {it.get('field')=='Fix Version'} )
{
Collection<Version> fixVersions = new ArrayList<Version>();
fixVersions = fix_Issue.getFixVersions()
Collection subTasks = fix_Issue.getSubTasks();
SubTaskManager subTaskManager = ComponentManager.getInstance().getSubTaskManager();
if (subTaskManager.subTasksEnabled && !subTasks.empty)
{
IssueManager issueManager = ComponentManager.getInstance().getIssueManager()
Collection _subTasks = fix_Issue.getSubTaskObjects()
_subTasks.each
{
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 FixVersionPBI_To_SBI_1"
log.debug (ex.getMessage())
}
}
}
对于Jira 6.4
您的子任务修复版本字段将自动更新。
- 安装ScriptRunner插件
- 打开您的-jira.host/secure/admin/ViewCustomFields.jspa
- 使用(高级>脚本化字段)添加新的自定义字段
- OPEN/plugins/servlet/scriptrunner/builtin?section=script_fields并在那里查找新字段
-
添加此脚本,测试并保存。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.config.SubTaskManager; import com.atlassian.jira.issue.IssueManager; import com.atlassian.jira.event.type.EventDispatchOption; def result = ""; def subTasks = issue.getSubTaskObjects() Collection fixVersions = issue.getFixVersions(); if (!fixVersions.empty) { SubTaskManager subTaskManager = ComponentAccessor.getSubTaskManager(); if(subTaskManager.subTasksEnabled && !subTasks.empty) { def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser(); subTasks.each { if (it.statusObject.name != "Closed") { it.setFixVersions(fixVersions); IssueManager issueManager = ComponentAccessor.getIssueManager() result += it.getKey() + " "; issueManager.updateIssue(user, it, EventDispatchOption.ISSUE_UPDATED, false); } } if (count > 0) { result += " versions updated"; } } } return result;
要手动执行,可以执行诸如"parent=TEST-123"之类的查询,然后进行批量编辑。要自动执行此操作,您需要有一个自定义侦听器(例如Script Runner)来检测Issue Updated事件,并且只有在更改是问题更新时才执行操作。更新子任务修复版本还需要重新索引子任务,否则搜索将无法按预期工作。
我不知道有什么插件可以做到这一点。