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

Script for retrieving members of the Advanced Roadmaps Team field

Viktoria January 31, 2025

Hello everyone, 
I spent a lot of time trying to figure out how to work with the Advanced Roadmaps Team field, so there is some useful information for someone who is struggling the same as I was.

Methods for Teams: Overview (Portfolio 2 / Common Public API 9.12.0 API)

REST API (where you also can see the data structure for better understanding how to use methods): Advanced Roadmap Teams REST API

 

How to retrieve id & name of all teams:


 

import com.onresolve.scriptrunner.runner.customisers.WithPlugin

import com.onresolve.scriptrunner.runner.customisers.PluginModule

import com.atlassian.rm.teams.api.team.GeneralTeamService

 
@WithPlugin("com.atlassian.teams")

@PluginModule GeneralTeamService teamService


def teams = teamService.getAllShareableTeams()


if (!teams) {

    log.warn("No teams found in Advanced Roadmaps")

    return

}

 
teams.each { teamId, team ->

    def title = team.getDescription()?.getTitle() ?: "No title found"

    log.warn("${teamId}: ${title}")

}
Script to check whether assignee is member of teams or no and if so, set this team to the issue (this script can be optimized, ask chatGPT):

 

import com.onresolve.scriptrunner.runner.customisers.WithPlugin

import com.onresolve.scriptrunner.runner.customisers.PluginModule

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.issue.MutableIssue

import com.atlassian.rm.teams.api.team.GeneralTeamService

import com.atlassian.jira.user.ApplicationUser

import com.atlassian.jira.issue.fields.CustomField

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

 

@WithPlugin("com.atlassian.teams")

@PluginModule GeneralTeamService teamService

 

// List of target team IDs

def targetTeamIds = [256, 257, 258, 259, 260, 261, 262]

 

// Map to store users by team ID (userKey of users)

def teamUsersMap = [:]

 

// Get UserManager for retrieving ApplicationUser

def userManager = ComponentAccessor.getUserManager()

 

// Get all teams

def teams = teamService.getAllShareableTeams()

 

if (!teams) {

    log.warn("No teams found in Advanced Roadmaps")

    return

}

 

teams.each { teamId, team ->

    // Log to check the data type of team ID

    log.warn("Team ID type: ${teamId.getClass().name}, Team ID value: ${teamId}")

 

    // Convert teamId to the correct type for comparison

    def teamIdString = teamId.toString()

 

    // Check if teamId is in the list of targetTeamIds

    if (teamIdString in targetTeamIds.collect { it.toString() }) {

        def title = team.getDescription()?.getTitle() ?: "No title found"

        log.warn("Team ID: ${teamId}, Team Name: ${title}")

 

        // Map to store userKey of users in the current team

        def usersInTeam = []

 

        // Get team resources (persons associated with the team)

        def resources = team.getResources()

        resources.each { resource ->

            def person = resource.getPerson()

 

            // Get person ID (if available)

            def personId = person?.getId() ?: "No person ID"

            // Get jiraUser via getDescription()

            def personDescription = person?.getDescription()

            def jiraUserString = personDescription?.getJiraUser()?.orNull()

 

            // Convert jiraUserString (userKey) to ApplicationUser

            def jiraUser = userManager.getUserByKey(jiraUserString)

 

            if (jiraUser) {

                def userKey = jiraUser.getKey()  // Get userKey of the user

                usersInTeam << userKey

                log.warn("Resource ID: ${resource.getId()}, Person ID: ${personId}, Jira User Key: ${userKey}")

            } else {

                log.warn("No ApplicationUser found for ${jiraUserString}")

            }

        }

 

        // Add the list of users to the map with the team ID as the key

        teamUsersMap[teamId] = usersInTeam

    }

}

 

// Log the users in teams map

log.warn("Users in teams: ${teamUsersMap}")

 

// Get the issue key

def issueKey = "TEST-1111"  // Replace with the real issue key

 

// Get the issue by key

def issueManager = ComponentAccessor.getIssueManager()

MutableIssue issue = issueManager.getIssueObject(issueKey)

 

if (!issue) {

    log.warn("Issue ${issueKey} not found")

    return

}

 

// Get the assignee of the issue

def assignee = issue.getAssignee()

 

if (!assignee) {

    log.warn("No assignee found for issue ${issueKey}")

    return

}

 

// Get the userKey of the assignee

def assigneeUserKey = assignee.getKey()

 

// Check if the assignee is in any of the teams

def isAssigneeInTeam = false

def targetTeamId = null

teamUsersMap.each { teamId, users ->

    if (assigneeUserKey in users) {

        log.warn("Assignee ${assigneeUserKey} is in team ${teamId}")

        isAssigneeInTeam = true

        targetTeamId = teamId // Store the team ID

    }

}

 

def targetTeam = teams[targetTeamId.find { it in teams.keySet() }] // Get the team by ID from targetTeamIds

 

if (isAssigneeInTeam) {

    // Get the custom field Team (customfield_11111)

    def customFieldManager = ComponentAccessor.getCustomFieldManager()

    CustomField teamField = customFieldManager.getCustomFieldObject("customfield_11111")

 

    if (teamField) {

        // Update the Team field with the team ID

        issue.setCustomFieldValue(teamField, targetTeam)

         

        // Use EventDispatchOption to update the issue

        issueManager.updateIssue(ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser(), issue, EventDispatchOption.ISSUE_UPDATED, false)

         

        log.warn("Team field (customfield_11111) updated with team ID: ${targetTeam}")

    } else {

        log.warn("Team custom field (customfield_11111) not found")

    }

} else {

    log.warn("Assignee ${assigneeUserKey} is not in any of the target teams")

}

1 answer

0 votes
Danylo Borodai
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
January 31, 2025

Perfect!!

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, team '25, conference, certifications, bootcamps, training experience, anaheim ca,

Want to make the most of Team ‘25?

Spend the day sharpening your skills in Atlassian Cloud Organization Admin or Jira Administration, then take the exam onsite. Already ready? Take one - or more - of 12 different certification exams while you’re in Anaheim at Team' 25.

Learn more
AUG Leaders

Upcoming Jira Events