Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,639,804
Community Members
 
Community Events
196
Community Groups

Approvals by User Group

Edited

I am looking for a way to present a list of User Groups to customers seeking approval for their various team and then to have JIRA Service Desk populate the approvers field with the members of that user group at the time of issue creation.

I cannot find a way to do this in JIRA by default.

Presenting a list of ALL users in the user cache is unacceptable (multi-user picker).

We are not interested in the Herzum plugin.

Has anyone done this with Script Runner?

Tapping user groups really feels like it should be a viable choice for Jira Service Desk approvers out of the box.

2 answers

2 accepted

3 votes
Answer accepted
Jonny Carter
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.
May 15, 2017 • edited

Unfortunately, Group Pickers can't be added to the screen of a Service Desk portal, so there's no easy way to present users with a list of groups to pick from. See (and comment/vote) https://jira.atlassian.com/browse/JSDSERVER-86.

That said, as a work around, you could setup a single select list custom field that had a list of group names that you wanted to be valid as approval groups, then use ScriptRunner to populate the Approvers field on the Create transition.

Something like

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.util.IssueChangeHolder

def groupManager = ComponentAccessor.groupManager

def customFieldManager = ComponentAccessor.customFieldManager
def groupNameField = customFieldManager.getCustomFieldObjectByName("SelectListA")
def groupNameSelected = issue.getCustomFieldValue(groupNameField)

def group = groupManager.getGroup(groupNameSelected.toString())
def users = groupManager.getDirectUsersInGroup(group)

def approversField = customFieldManager.getCustomFieldObjectByName("Approvers")
log.debug("Approvers: ${issue.getCustomFieldValue(approversField)}")

IssueChangeHolder changeHolder = new DefaultIssueChangeHolder();
approversField.updateValue(null, issue, new ModifiedValue("", users), changeHolder);

You'd need to setup the approval workflow as normal.

Jonny Carter
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.
May 15, 2017

You can keep your select list in sync with your groups via a script like this one running as a listener or a service:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.context.GlobalIssueContext

def customFieldManager = ComponentAccessor.customFieldManager
def groupNameField = customFieldManager.getCustomFieldObjectByName("Approval Group Name")
def optionsManager = ComponentAccessor.optionsManager
def groupManager = ComponentAccessor.groupManager
groupManager.getAllGroups().eachWithIndex{ group, int index ->
    def config = groupNameField.getRelevantConfig(GlobalIssueContext.getInstance())
    if (!optionsManager.getOptions(config)*.value.contains(group.name)) {
        optionsManager.createOption(config, null, index, group.name)
    }
}

The select list is exactly what I was planning on doing.  We have too many groups to realistically update the select list.  Jira Admins will have to do it as teams on-board.

Thank you very much for your insight and assistance!

1 vote
Answer accepted
Jonny Carter
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.
May 15, 2017

So... Community apparently nuked my previous answer? Because this question got flagged as spam for no good reason???

Anyway, here's the script again. Create a select list with group names, then add a post function to the create transition that does this:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.util.IssueChangeHolder

def groupManager = ComponentAccessor.groupManager

def customFieldManager = ComponentAccessor.customFieldManager
def groupNameField = customFieldManager.getCustomFieldObjectByName("SelectListA")
def groupNameSelected = issue.getCustomFieldValue(groupNameField)

def group = groupManager.getGroup(groupNameSelected.toString())
def users = groupManager.getDirectUsersInGroup(group)

def approversField = customFieldManager.getCustomFieldObjectByName("Approvers")
log.debug("Approvers: ${issue.getCustomFieldValue(approversField)}")

IssueChangeHolder changeHolder = new DefaultIssueChangeHolder();
approversField.updateValue(null, issue, new ModifiedValue("", users), changeHolder);

Had some help from this old answer from Mike Whitlock: https://community.atlassian.com/t5/Questions/How-to-set-add-to-a-multiple-user-picker-custom-field-using/qaq-p/283009

I'm not sure why it got removed.  It certainly resolved my problem.  So I'll say it again, thanks!

I am running the following as a custom script post function on the create transition.  Team Approvers is a select list where I have placed the specific user groups that are allowed to be approvers.  It is pretty much the same as above, but we will only be manually updating the select list.  Works like a charm and solvs a major problem for us.

import com.atlassian.jira.component.ComponentAccessor

def groupManager = ComponentAccessor.groupManager

def customFieldManager = ComponentAccessor.customFieldManager
def groupNameField = customFieldManager.getCustomFieldObjectByName("Team Approvers")
def groupNameSelected = issue.getCustomFieldValue(groupNameField)

def group = groupManager.getGroup(groupNameSelected.toString())
def users = groupManager.getDirectUsersInGroup(group)

def approversField = customFieldManager.getCustomFieldObjectByName("Approvers")
issue.setCustomFieldValue(approversField, users)

 

Like Jonny Carter likes this

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events