Copy Organisation into another project

Service Desk v3.3.0

jira v 7.3.0

 

Hi there

Wondering if anyone is aware of a s 'simple' method to copy all organisations defined in one service desk project to another service desk project?  

thanks
Maria

2 answers

0 vote

Hi Maria,

I have not seen this implelmented but I did find a post where ScriptRunner was being used.  It may require some additional tweaking on your end to get the final result to be what you want but hopefully this can help you get started.

Cheers,

Branden

Hi Maria, 

I would suggest to try the following script. I 'll be honest with you, I have not tested it thoroughly but give it a chance and if it fails shout will troubleshoot it together... 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.Project
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.servicedesk.api.organization.CustomerOrganization
import com.atlassian.servicedesk.api.organization.OrganizationService
import com.atlassian.servicedesk.api.ServiceDeskManager
import com.atlassian.servicedesk.api.ServiceDeskService
import com.atlassian.servicedesk.api.organization.OrganizationService
import com.atlassian.servicedesk.api.util.paging.SimplePagedRequest
import com.atlassian.servicedesk.api.ServiceDesk
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.atlassian.servicedesk")

def projectFromKey = "ABCC"
def projectToKey = "ABCCD"
def asUser = ComponentAccessor.userManager.getUserByKey("admin")

def fromProject = ComponentAccessor.projectManager.getProjectObjByKey(projectFromKey)
def toProject = ComponentAccessor.projectManager.getProjectObjByKey(projectToKey)

getOrganizationsForProject(asUser, fromProject).each {
addOrganizationToProject(it, toProject)
}

void addOrganizationToProject (CustomerOrganization organization, Project project) {
def organisationService = ComponentAccessor.getOSGiComponentInstanceOfType(OrganizationService)
def adminUser = ComponentAccessor.getJiraAuthenticationContext().loggedInUser
def sdProjectId = getServiceDeskForProject(project)?.id

if (! organization || ! sdProjectId) {
log.debug "Could not find organization $organization or service desk project $project"
return
}

def organizationServiceDeskUpdateParameters = organisationService
.newOrganizationServiceDeskUpdateParametersBuilder()
.organization(organization)
.serviceDeskId(sdProjectId)
.build()

def result = organisationService.addOrganizationToServiceDesk(adminUser, organizationServiceDeskUpdateParameters)
if (result.isLeft()) {
log.error "Could not add organization to project ${project.key}. Reason ${result.left().get()}"
}
}

ServiceDesk getServiceDeskForProject(Project sdProject) {
def serviceDeskManager = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskManager)
def serviceDeskProject = serviceDeskManager.getServiceDeskForProject(sdProject)

if (serviceDeskProject.isLeft()) {
log.error "${serviceDeskProject.left().get()}"
return null
}

serviceDeskProject.right().get()
}

List <CustomerOrganization> getOrganizationsForProject (ApplicationUser user, Project project) {
def serviceDeskService = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceDeskService)
def srcServiceDesk = serviceDeskService.getServiceDeskForProject(user, project)

if (srcServiceDesk.isLeft()) {
log.error "Could not find service desk id for project ${project?.key}.\n${srcServiceDesk.left().get()}"
return []
}

def srcServiceDeskProjectId = srcServiceDesk.right().get().id
def organisationService = ComponentAccessor.getOSGiComponentInstanceOfType(OrganizationService)
def pagedRequest = new SimplePagedRequest(0, 50)
def organizationQuery = organisationService
.newOrganizationsQueryBuilder()
.pagedRequest(pagedRequest)
.serviceDeskId(srcServiceDeskProjectId)
.build()

// because this is a paged response it will return only the first 50 organizations in a project. If you want more you have to
// iterate over all pages and collect the results to a list
def pagedResponse = organisationService.getOrganizations(user, organizationQuery)
if (pagedResponse.isLeft()) {
log.error "${pagedResponse?.left()?.get()}"
}

pagedResponse.right().get().results
}

Paste this in the script console and ignore any errors you may get. Check the logs for "real" errors 

Let me know the result ...

Kind regards, Thanos

Suggest an answer

Log in or Sign up to answer
How to earn badges on the Atlassian Community

How to earn badges on the Atlassian Community

Badges are a great way to show off community activity, whether you’re a newbie or a Champion.

Learn more
Community showcase
Published Jul 10, 2018 in Marketplace Apps

If you’re an Atlassian app developer, you’ll want to know about Atlas Camp!

This September 6-7, hundreds of Atlassian App developers will flock to Barcelona Spain to build skills, discover product roadmaps, meet face-to-face with the Atlassian team, and learn how to extend t...

165 views 0 4
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you