Forums

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

Rewire a groovy script as a post function

Derek Mart
Contributor
November 1, 2018

Greetings!  First I wanted to thank the community for being so helpful.  I found a lot of good reference material in these forums to create the following script.  Now that I know it functions properly from the MyGroovy console, I need to remove stuff to make it work as a post transition function. 

The problem is, I'm unfamiliar with the objects available at that time.  My script is complicated because I had to emulate the workflow transition environment.  I think I can remove the stuff I used for emulation: usermanager stuff, getprojectbykey, and getissuebycurrentkey.  I'm just not sure how to begin. 

The script is designed to get the users from a role and add them to a Cc field upon ticket creation.  The need for this is based on project admins not having the ability to customize custom field contexts in our current version 7.10.2 and a great multitude of tickets are generated with requests for customizing this field.  I could find no other cheap solutions.

Suggestions and comments from the community are greatly appreciated.

import com.atlassian.jira.ComponentManager

import com.atlassian.jira.project.Project
import com.atlassian.jira.project.ProjectManager

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager

import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField

import com.atlassian.jira.security.roles.ProjectRole
import com.atlassian.jira.security.roles.ProjectRoleActors
import com.atlassian.jira.security.roles.ProjectRoleManager
import com.atlassian.jira.event.type.EventDispatchOption

ComponentManager componentManager = ComponentManager.getInstance()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()

IssueManager issueManager = ComponentAccessor.getIssueManager()
UserManager userManager = ComponentAccessor.getUserManager()

ProjectManager projectManager = ComponentAccessor.getProjectManager()
ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager

ProjectRole ccRole = projectRoleManager.getProjectRole("Default Cc")

MutableIssue issue = (MutableIssue) issueManager.getIssueByCurrentKey("TEST-123")

CustomField customField_CC = customFieldManager.getCustomFieldObject(10400)
List<ApplicationUser> userList = new ArrayList<>();
for (ApplicationUser userKey : (List<ApplicationUser>) issue.getCustomFieldValue(customField_CC))
{
userList.add(userKey)
}

Project project = projectManager.getProjectByCurrentKey("TEST")
ProjectRoleActors actors = projectRoleManager.getProjectRoleActors(ccRole, project)
for (ApplicationUser userKey : actors.getUsers())
{
userList.add(userKey)
}

userList = userList.unique()
ApplicationUser currentUser = userManager.getUserByName("johnsmith")
issue.setCustomFieldValue(customField_CC, userList);
issueManager.updateIssue(currentUser,issue,EventDispatchOption.ISSUE_UPDATED,false)
return userList

 

3 answers

1 accepted

0 votes
Answer accepted
Derek Mart
Contributor
November 20, 2018

Working Post Function:

import com.atlassian.jira.ComponentManager;

import com.atlassian.jira.project.Project;

import com.atlassian.jira.component.ComponentAccessor;

import com.atlassian.jira.event.type.EventDispatchOption;

import com.atlassian.jira.user.ApplicationUser;

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;

import com.atlassian.jira.security.roles.ProjectRole;
import com.atlassian.jira.security.roles.ProjectRoleActors;
import com.atlassian.jira.security.roles.ProjectRoleManager;
import com.atlassian.jira.security.JiraAuthenticationContext;

ComponentManager componentManager = ComponentManager.getInstance();
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();

ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager;

ProjectRole ccRole = projectRoleManager.getProjectRole("Default Cc");

IssueManager issueManager = ComponentAccessor.getIssueManager()

def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

MutableIssue issueToUpdate = (MutableIssue) issue;

CustomField customField_CC = customFieldManager.getCustomFieldObject(10400);
List<ApplicationUser> userList = new ArrayList<>();
for (ApplicationUser userKey : (List<ApplicationUser>) issue.getCustomFieldValue(customField_CC))
{
userList.add(userKey);
}

ProjectRoleActors actors = projectRoleManager.getProjectRoleActors(ccRole,issue.getProjectObject());
for (ApplicationUser userKey : actors.getUsers())
{
userList.add(userKey);
}

userList = userList.unique();
issue.setCustomFieldValue(customField_CC, userList);
issueManager.updateIssue(currentUser,issue,EventDispatchOption.ISSUE_UPDATED,false);

 

0 votes
Derek Mart
Contributor
November 20, 2018

network issue. duplicate post.

0 votes
Nic Brough -Adaptavist-
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
November 1, 2018

There's not a huge amount to do here really.

I think all you need is to drop the lines about getting the project and issue, as the current issue is available already.

So replace "MutableIssue issue = ... " because the object "issue" will already be the issue.  But it is not a MutableIssue, so you'll need to cast it to use it later.  e.g. MutableIssue myIssue - (MutableIssue) issue ;

Then the project - 

Project project = projectManager.getProjectByCurrentKey("TEST")
ProjectRoleActors actors = projectRoleManager.getProjectRoleActors(ccRole, project)

 

Can become

 

 

ProjectRoleActors actors = projectRoleManager.getProjectRoleActors(ccRole, issue.getProjectObject() )

Derek Mart
Contributor
November 20, 2018

Thank you.

Suggest an answer

Log in or Sign up to answer