how do I use the Issue Assignment Listener to automatically set the assignee of all sub-tasks to match the parent?

Jeannette Lamb March 25, 2014

We are using JIRA 6.0.8. I do not want to base this on a workflow transition because the assignee could be updated on a parent issue at any time without changing the workflow state.

Also, can this be done for only selected projects or will it affect all projects in JIRA?

Thank you,

Jeannette

1 answer

0 votes
Hiren Sharma June 9, 2014

You can try this:

package com.atlassian.jira.event.listeners
 
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.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager
import com.atlassian.jira.issue.history.ChangeItemBean
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.user.util.UserManager
import org.apache.log4j.Category
import org.apache.log4j.Level
import org.apache.log4j.Logger
 
public class SubtaskAutoAssignListener extends AbstractIssueEventListener {
    Category log = Category.getInstance(SubtaskAutoAssignListener.class)
  
    @Override
    void workflowEvent(IssueEvent event) {
        log.error("\n \n \n \n ---- Assignee Updater starts -----  \n \n \n \n \n")
        CustomFieldManager customFieldManager = ComponentManager.getInstance().getCustomFieldManager()
        def customField_Follow = customFieldManager.getCustomFieldObjectByName( "Subtask Follow" )
        def subtaskFollow = event.issue.getCustomFieldValue(customField_Follow)
        log.error("\n \n \n Assign subtask to parent assignee?: $subtaskFollow \n \n")
        if ("$subtaskFollow" == "Yes") {
            if (!event.issue.isSubTask()){
                def issueAssigneeId = event.issue.getAssigneeId()
                log.error("\n \n \n Parent Issue Assignee: $issueAssigneeId \n")
 
                IssueManager issueManager = ComponentAccessor.getIssueManager()
                UserManager userManager = ComponentAccessor.getUserManager()
 
                event.issue.getSubTaskObjects().each { t ->
                    log.error("\n \n \n Subtask ID: $t \n \n \n")
                    def subtaskAssignee = t.getAssigneeId()
                    log.error("\n \n \n Current subtask assignee: $subtaskAssignee \n \n \n")
                    if (!subtaskAssignee.equals(issueAssigneeId)) {
                        MutableIssue myIssue = t
                        myIssue.setAssigneeId(issueAssigneeId)
                        issueManager.updateIssue(userManager.getUser(issueAssigneeId),myIssue,EventDispatchOption.DO_NOT_DISPATCH, false)
                        def newSubtaskAssignee = myIssue.getAssigneeId()
                        log.error("\n \n \n New subtask assignee: $newSubtaskAssignee \n \n \n")
                    }
                }
            }
        }
        log.error("\n \n \n \n ---- Assignee Updater Ends -----  \n \n \n \n \n")
    }
}

Suggest an answer

Log in or Sign up to answer