In JIRA 6.4.6, I am trying to create a script listener using Script Runner using an inline script. Basically, if the Affects Version/s is updated on a parent issue, I want to update all of its subtasks with those same values in Affects Version/s, as well.
This is the script that I have so far. It works as is, but I don't know how to actually set the Affects Version/s field value on the subtasks.
import com.atlassian.jira.component.ComponentAccessor
def affectsVersions = issue.getAffectedVersions()
def commentManager = ComponentAccessor.getCommentManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getUser()
def subtasks = issue.getSubTaskObjects()
subtasks.each {
commentManager.create(
it,
user,
"New Affects Version/s: " + affectsVersions,
false)
//works correctly up to here. don't know how to set Affects Version/s field value
}The comment I create shows up on all of the subtasks correctly. What method(s) should I use to set the field value? I'm still fairly new to groovy scripting and the JIRA API documentation and I'm failing to locate the methods I need.
Thanks for your help!
I recently did that for FixVersion, but using a groovy class file because my ScriptRunner/JIRA doesn't let me do inline custom listeners. I modified the code from here, to give credit where it is due:
I had to modernize it a little, plus fixed it so it would null out values:
package com.myorg.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.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 SyncParentFixVersionToSubTask extends AbstractIssueEventListener
{
Category log = Category.getInstance(SyncParentFixVersionToSubTask.class);
SubTaskManager subTaskManager = ComponentManager.getInstance().getSubTaskManager();
@Override
void workflowEvent(IssueEvent event)
{
try
{
Issue eventIssue = event.getIssue();
if ( !eventIssue.getIssueTypeObject().isSubTask() )
{
List changeItems = event.getChangeLog().getRelated("ChildChangeItem");
if( changeItems.any {it.get('field')=='Fix Version'} )
{
Collection<Version> fixVersions = new ArrayList<Version>();
fixVersions = eventIssue.getFixVersions();
Collection<Issue> subTasks = eventIssue.getSubTaskObjects();
if (subTaskManager.subTasksEnabled && !subTasks.isEmpty())
{
IssueManager issueManager = ComponentManager.getInstance().getIssueManager();
Collection<Issue> _subTasks = eventIssue.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 SyncParentFixVersionToSubTask"
log.debug (ex.getMessage())
}
}
}
@Jeremy Gaudet Thanks for the above script but looks like there are changes to methods in JIRA 7.1.8. We are using 7.1.8 and I am not able to make the following code work:
What I am trying to do is pretty much the same what your script above does - Update the fixVersion on all the subtasks when the fixVersion on the parent changes.
it.setFixVersions(fixVersions);issueManager.updateIssue(event.getUser(), it, EventDispatchOption.ISSUE_UPDATED, false);You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.