2

创建问题时,修复版本字段设置为特定值(例如 2.0)。然后创建子任务,它们继承这个值。到目前为止,一切都很好。但如果稍后修改问题的修复版本值(例如 1.0),子任务仍保持 2.0 修复版本值。

有没有我可以用来保持这些字段同步的插件或技术?

注意:这已被要求作为 JIRA 功能,但 Atlassian 似乎不想这样做。 https://jira.atlassian.com/browse/JRA-9016

4

3 回答 3

4

我知道这是一个相当古老的问题。但这是我最近部署的代码。这是从 ScriptRunner 插件部署在 Script Listener 上的 issueUpdated 事件的事件侦听器。很多代码来自 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())
  }
 }
}
于 2014-04-16T03:54:41.487 回答
1

对于 Jira 6.4

您的子任务 fixversion 字段将自动更新。

  1. 安装 ScriptRunner 插件。
  2. 打开 your-jira.host/secure/admin/ViewCustomFields.jspa
  3. 使用(高级>脚本字段)添加新的自定义字段
  4. 打开 /plugins/servlet/scriptrunner/builtin?section=script_fields 并在那里找到新字段。
  5. 添加此脚本,对其进行测试并保存。

    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;
    
于 2015-12-04T17:06:16.450 回答
0

要手动执行此操作,您可以执行诸如“parent=TEST-123”之类的查询,然后进行批量编辑。要自动执行此操作,您需要有一个自定义侦听器(例如 Script Runner)来检测问题更新事件,并且仅在更改是问题更新时才执行某些操作。更新子任务修复版本还需要重新索引子任务,否则您的搜索将无法按预期工作。

我不知道有一个插件可以做到这一点。

于 2013-08-26T20:23:19.853 回答