Groovy script to assign issues to project roles

Thomas Hardin March 26, 2018

Good morning All,

I have been reviewing the answers and suggestions provided throughout the discussion boards and need some assistance with a similar scenario where an issue needs to be assigned to a project role based on the issue type. Here, I have multiple issue types, each one is assigned to a specific project role.

Example - If issue type = "A" then assign to "Project Role A", If issue type = "B" then assign to "Project Role B", etc. 

Now, this is all based on a selection made from a parent issue field where the requestor will choose one or many security actions, which will then trigger the new issue types. We just happen to have 12 different issues types that are worked by specific teams so I think it is better to have one script rather than 12 different post functions. And, this type of scenario is common on other departments so maintenance is more efficient this way.

I am not worried about assigning the issues to the first or last member of the role as these teams are designated to work these issues regularly.

Here is a snippet of my code:

import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.UpdateIssueRequest
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.bc.projectroles.ProjectRoleService;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
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.roles.RoleActor;

ProjectRoleManager projectRoleManager = ComponentAccessor.getComponentOfType(ProjectRoleManager.class) as ProjectRoleManager

// Get RS-Cancel Visit Auth Role
ProjectRole rsCancelVisitAuth = projectRoleManager.getProjectRole("RS-Cancel-Visit-Auth")
ProjectRoleActors rsCancelVisitAuthActors = projectRoleManager.getProjectRoleActors(rsCancelVisitAuth, project)
def rsCancelVisitAuthAssignee = rsCancelVisitAuthActors.getUsers().toList().first()

// Get RS-Change Combinations Role
ProjectRole rsChangeCombinations = projectRoleManager.getProjectRole("RS-Change Combinations")
ProjectRoleActors rsChangeCombinationsActors = projectRoleManager.getProjectRoleActors(rsChangeCombinations, project)
def rsChangeCombinationsAssignee = rsChangeCombinationsActors.getUsers().toList().first()

 

//Set RS-Cancel Visit Auth Role
if(issue.getComponentObjects().getName().equals("Cancel Visit Authorizations in SIMS/ JPAS"))
{
issue.setAssignee(rsCancelVisitAuthActors.getUsers().toList()?.first())
}

//Set RS-Change Combinations Role
if(issue.getComponentObjects().getName().equals("Change Combinations to Safe, Doors or Trilogies"))
{
issue.setAssignee(rsChangeCombinationsActors.getUsers().toList()?.first())
}

 When I ran this, the issue was created, but unassigned. When I tested the script, I got the following error:

Message:
groovy.lang.MissingPropertyException: No such property: project for class: script1522070610930435935766

Now, I've created this based on all of the discussion boards so I may have some extra code, so please feel free to pick it apart. 

 

Any help is greatly appreciated.

1 answer

1 vote
Alexey Matveev
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.
March 26, 2018

It must be something like this

import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.UpdateIssueRequest
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.bc.projectroles.ProjectRoleService;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
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.roles.RoleActor;



ProjectRoleManager projectRoleManager = ComponentAccessor.getComponentOfType(ProjectRoleManager.class) as ProjectRoleManager

// Get RS-Cancel Visit Auth Role
ProjectRole rsCancelVisitAuth = projectRoleManager.getProjectRole("RS-Cancel-Visit-Auth")
ProjectRoleActors rsCancelVisitAuthActors = projectRoleManager.getProjectRoleActors(rsCancelVisitAuth, issue.getProjectObject())
def rsCancelVisitAuthAssignee = rsCancelVisitAuthActors.getUsers().toList().first()

// Get RS-Change Combinations Role
ProjectRole rsChangeCombinations = projectRoleManager.getProjectRole("RS-Change Combinations")
ProjectRoleActors rsChangeCombinationsActors = projectRoleManager.getProjectRoleActors(rsChangeCombinations, issue.getProjectObject())
def rsChangeCombinationsAssignee = rsChangeCombinationsActors.getUsers().toList().first()

 

//Set RS-Cancel Visit Auth Role
if(issue.getComponents().find{it.getName().equals("Cancel Visit Authorizations in SIMS/ JPAS")})
{
issue.setAssignee(rsCancelVisitAuthActors.getUsers().toList()?.first())
}

//Set RS-Change Combinations Role
if(issue.getComponents().find{it.getName().equals("Change Combinations to Safe, Doors or Trilogies")})
{
issue.setAssignee(rsChangeCombinationsActors.getUsers().toList()?.first())
}
Thomas Hardin March 26, 2018

Unfortunately, that did not work. The issue was created, but not assigned.

Alexey Matveev
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.
March 26, 2018

You should log for the variable and find out what went wrong

for example. try to do it like this

import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.UpdateIssueRequest
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.bc.projectroles.ProjectRoleService;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
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.roles.RoleActor;

log.error("script in")

ProjectRoleManager projectRoleManager = ComponentAccessor.getComponentOfType(ProjectRoleManager.class) as ProjectRoleManager

// Get RS-Cancel Visit Auth Role
ProjectRole rsCancelVisitAuth = projectRoleManager.getProjectRole("RS-Cancel-Visit-Auth")
ProjectRoleActors rsCancelVisitAuthActors = projectRoleManager.getProjectRoleActors(rsCancelVisitAuth, issue.getProjectObject())
def rsCancelVisitAuthAssignee = rsCancelVisitAuthActors.getUsers().toList().first()

// Get RS-Change Combinations Role
ProjectRole rsChangeCombinations = projectRoleManager.getProjectRole("RS-Change Combinations")
ProjectRoleActors rsChangeCombinationsActors = projectRoleManager.getProjectRoleActors(rsChangeCombinations, issue.getProjectObject())
def rsChangeCombinationsAssignee = rsChangeCombinationsActors.getUsers().toList().first()

 

//Set RS-Cancel Visit Auth Role
if(issue.getComponents().find{it.getName().equals("Cancel Visit Authorizations in SIMS/ JPAS")})
{
log.error("assignee set")
issue.setAssignee(rsCancelVisitAuthActors.getUsers().toList()?.first())
}

//Set RS-Change Combinations Role
if(issue.getComponents().find{it.getName().equals("Change Combinations to Safe, Doors or Trilogies")})
{
log.error("assignee set")
issue.setAssignee(rsChangeCombinationsActors.getUsers().toList()?.first())
}

If you see in the logs only the "script in", then conditions did not work. You need to find out why. You can read groovy documentation. If you can not find an answer, then kindly ask.  

Like Anton Kulikov likes this

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events