I need to create an issue when someone adds a user to any project's Administrators Role and I thought I'd use scriptrunner's Listener functionality.
So I have set this up:
This code works if I run it in the console (substituting some variables like event of course) but the listener never executes:
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.component.ComponentAccessor as CmpAcc
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.project.Project
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.issue.issuetype.IssueType
import com.atlassian.jira.issue.fields.config.manager.IssueTypeSchemeManager
import com.atlassian.crowd.event.role.RoleMembershipCreatedEvent
def createIssue(Project project, String summary, String description, String reporterName) {
IssueService issueService = CmpAcc.getIssueService();
IssueInputParameters inpParms = issueService.newIssueInputParameters();
inpParms.setProjectId(project.id)
inpParms.setSummary(summary)
inpParms.setDescription(description)
inpParms.setReporterId(reporterName as String)
IssueTypeSchemeManager issueTypeSchemeManager = CmpAcc.getIssueTypeSchemeManager()
def ity = issueTypeSchemeManager.getIssueTypesForProject(project).find{it.name == 'Task'}
inpParms.setIssueTypeId(ity.getId())
IssueService.CreateValidationResult createValidationResult = issueService.validateCreate(adminUser, inpParms);
IssueService.IssueResult createResult = issueService.create(adminUser, createValidationResult)
log.warn createValidationResult.toString()
}
def adminUser = CmpAcc.userManager.getUserByName("xxx")
def authContext = CmpAcc.getJiraAuthenticationContext()
authContext.setLoggedInUser(adminUser)
def event = event as RoleMembershipCreatedEvent
createIssue(
CmpAcc.projectManager.getProjectObjByKey('JIRA'),
"Project Admin Role changed",
"Project changed - ${event.source.toString()}",
adminUser.getName()
)
Hello @Jan Carlin (EfiCode)
Does listener execute without errors?
It does execute successfully if I specify a different Event, let's say UserEvent. It does nothing then of course and the cast fails
def event = event as RoleMembershipCreatedEvent
If I specify only RoleMembershipCreatedEvent the Listener doesn't execute at all.
Jan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I did some research and find out, when user is added so Project Role istead of RoleMembershipCreatedEvent fires ProjectRoleUpdatedEvent, so you should adapt script for this event, like this:
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.component.ComponentAccessor as CmpAcc
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.fields.config.manager.IssueTypeSchemeManager
def createIssue(Project project, String summary, String description, String reporterName) {
IssueService issueService = CmpAcc.getIssueService();
IssueInputParameters inpParms = issueService.newIssueInputParameters();
inpParms.setProjectId(project.id)
inpParms.setSummary(summary)
inpParms.setDescription(description)
inpParms.setReporterId(reporterName as String)
IssueTypeSchemeManager issueTypeSchemeManager = CmpAcc.getIssueTypeSchemeManager()
def ity = issueTypeSchemeManager.getIssueTypesForProject(project).find{it.name == 'Task'}
inpParms.setIssueTypeId(ity.getId())
IssueService.CreateValidationResult createValidationResult = issueService.validateCreate(adminUser, inpParms);
IssueService.IssueResult createResult = issueService.create(adminUser, createValidationResult)
log.warn createValidationResult.toString()
}
def adminUser = CmpAcc.userManager.getUserByName("xxx")
def authContext = CmpAcc.getJiraAuthenticationContext()
authContext.setLoggedInUser(adminUser)
createIssue(
CmpAcc.projectManager.getProjectObjByKey('JIRA'),
"Project Admin Role changed",
"Project changed - ${event.getProject().getKey()}",
adminUser.getName()
)
And for you information. this script will run on every user added to any projectrole, so you should add some checks.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thank you so much! It worked nicely!
I guess that Event name makes sense.
Cheers, Jan
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.