Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How to process Component assignments when moving an issue to another project

Wade Tracy _Boise_ ID_
Community Champion
June 4, 2019

The scenario is we create an issue in a project, it gets auto-assigned using the Component settings.  Later, we need to move the issue to another project and another Component, but the auto-assignment does not trigger.  I also tried with issues that were 'unassigned' but the Component auto-assignment still doesn't trigger on move.  But that's not my problem--I've accepted the behavior and moved on =)

What I want to know if there is a way I can trigger the behavior via a script.  I'm currently working on a Listener in Scriptrunner but I'd rather not recreate the behavior from scratch (are assignments being made by project default, component lead, some other criteria).  Is there a function in the Java API that I can call to cause the assignee to be re-evaluated?  I know it's a stretch, but I thought I would check before I did too much more work.

1 answer

1 accepted

1 vote
Answer accepted
Wade Tracy _Boise_ ID_
Community Champion
June 4, 2019

Okay, I figured it out...if you pass in a -1 for the 'name' value when using the REST API, it is like setting the assignee to Automatic in the UI and will process the assignment rules.  I ran this in the Script Console so there is additional code to grab a test issue, but just remove that and uncomment the line that gets the issue from the event:

import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.ContentType.*
import groovyx.net.http.ContentType
import static groovyx.net.http.Method.*
import com.atlassian.jira.component.ComponentAccessor;

// Remove these lines and uncomment the line below when using in a listener
def issueManager = ComponentAccessor.getIssueManager();
def eventIssue = issueManager.getIssueObject('SB-347');
def components = eventIssue.getComponents();

//def eventIssue = event.getIssue();
def assignee = eventIssue.assignee;
def issueKey = eventIssue.key;
def baseURL = ComponentAccessor.getApplicationProperties().getString("jira.baseurl");

log.debug("Processing auto-assignment for moved issue: " + issueKey);
log.debug("Assignee = " + assignee);

if(!assignee) {
log.debug("Updating issue for auto-assignment");

def http = new HTTPBuilder("${baseURL}/rest/api/2/issue/${issueKey}/assignee")
def authString = 'service:*********'.getBytes().encodeBase64().toString();
http.request(PUT, ContentType.JSON) {
requestContentType = ContentType.JSON;
request.addHeader("authorization: Basic ${authString}", "ContentType: application/json");
body = [ name: -1 ];

response.success = { resp, JSON ->
log.debug(resp.statusLine);
log.debug("Successful = " + JSON)
};

response.failure = { resp, JSON ->
log.warn(resp.statusLine);
log.warn("Failed to assign issue to automatic assignment = " + JSON)
};
};
}

Suggest an answer

Log in or Sign up to answer