Skip to main content
Example scripts
arrow icon
To homepage
Jira Service Desk
Data centre icon
Data Center

Copy Service Desk Project Queues to Another Project

Created 1 year ago, Updated 1 month(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira Service Desk (4.6 - 4.6)
compatibility bullet
ScriptRunner For Jira (5.6.14)
Language |
groovy
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.servicedesk.api.ServiceDeskManager
import com.atlassian.servicedesk.api.queue.QueueService
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.atlassian.servicedesk")

// Specify the master SD project to get the queue form
final sourceProjectKey = "SRC"
// Specify the key of the SD project to copy the queue to
final destinationProjectKey = "DST"

// Get current user logged-in
def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser

// Get project objects
def sourceProject = ComponentAccessor.projectManager.getProjectObjByKey(sourceProjectKey)
def destinationProject = ComponentAccessor.projectManager.getProjectObjByKey(destinationProjectKey)

def queueService = ComponentAccessor.getOSGiComponentInstanceOfType(QueueService)
def serviceDeskManager = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskManager)

// Get Service Desk Id related to projects
def sourceProjectServiceDeskId = serviceDeskManager.getServiceDeskForProject(sourceProject).id
def destinationProjectServiceDeskId = serviceDeskManager.getServiceDeskForProject(destinationProject).id

// Delete all destination project queues
def destinationProjectQueues = queueService.newQueueQueryBuilder().serviceDeskId(destinationProjectServiceDeskId).build()
queueService.getQueues(currentUser, destinationProjectQueues).results.each {
    queueService.deleteQueue(currentUser, destinationProjectServiceDeskId, it.id)
}

// Get all source project queues and copy to destination project
def sourceProjectQueues = queueService.newQueueQueryBuilder().serviceDeskId(sourceProjectServiceDeskId).build()
queueService.getQueues(currentUser, sourceProjectQueues).results.eachWithIndex { queue, index ->
    // Default JQL is removed because when a Queue is created 'project = <related key project>' is added by default
    def newJql = (queue.jql - "project = ${sourceProjectKey}" - "AND").trim()
    // Replace source key project with destination key project in JQL
    newJql = newJql.replace(sourceProjectKey, destinationProjectKey)
    def queueCreateParameters = queueService.newQueueCreateParameterBuilder(destinationProjectServiceDeskId, queue.name)
        .jql(newJql)
        .fields(queue.fields)
        .order(index)
        .build()
    queueService.addQueue(currentUser, queueCreateParameters)
}
Having an issue with this script?
Report it here