Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Kodeblok
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.servicedesk.api.ServiceDeskManager
import com.atlassian.jira.user.util.UserManager
import com.atlassian.servicedesk.api.organization.CustomerOrganization
import com.atlassian.servicedesk.api.organization.OrganizationService
import com.atlassian.servicedesk.api.organization.OrganizationsQuery
import com.atlassian.servicedesk.api.organization.UsersInOrganizationQuery
import com.atlassian.servicedesk.api.util.paging.LimitedPagedRequest
import com.atlassian.servicedesk.api.util.paging.LimitedPagedRequestImpl
import com.atlassian.servicedesk.api.util.paging.PagedRequest
import com.atlassian.servicedesk.internal.feature.organization.api.OrganizationsQueryImpl
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.atlassian.servicedesk")

@PluginModule
ServiceDeskManager serviceDeskManager

@PluginModule
OrganizationService organizationService
MutableIssue issue2 = issue

//Use a static Agent, otherwise this will fail for Non-agents if used in Create Post-Function
def userManager        = ComponentAccessor.getUserManager()
def currentUser        = ComponentAccessor.userManager.getUserByKey("Service Desk")
//def currentUser        = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def serviceDeskProject = serviceDeskManager.getServiceDeskForProject(issue.projectObject)
def serviceDeskId      = serviceDeskProject.getId()
if (!serviceDeskId) {
    log.debug "Could not find service desk id ${serviceDeskId}, maybe the project ${issue.projectObject.key} is not a service desk one."
    return
}
def organizationsToSet = []
def allOrganisations = []

def size = 50
def start = 0
while (size > 0) {
    // get the available organizations for that project
    OrganizationsQuery.Builder builder = new OrganizationsQueryImpl.Builder()
    builder.serviceDeskId(serviceDeskId)
    builder.pagedRequest(new PagedRequest() {
        @Override
        int getStart() {
            return start
        }

        @Override
        int getLimit() {
            return 50
        }
    })
    def organizationsQuery = builder.build()
    def foundResults = organizationService.getOrganizations(currentUser, organizationsQuery).results
    if (foundResults.size() > 0) {
        allOrganisations.addAll(foundResults)
        start += size
    } else {
        size = 0
    }
}


// iterate over the organizations and if the reporter is part of any keep this organization in a collection
allOrganisations.each { organization -> 
    def usersInOrganizationQuery = new UsersInOrganizationQuery() {
        @Override
        CustomerOrganization organization() {
            return organization
        }
        @Override
        LimitedPagedRequest pagedRequest() {
            return new LimitedPagedRequestImpl(0, 10000, 50000)
        }
    }
    if (issue.reporter in organizationService.getUsersInOrganization(currentUser, usersInOrganizationQuery).results) {
        organizationsToSet.add(organization)
    }   
    
}
if (organizationsToSet.size() >0)
{
	def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Organizations")
	cf.updateValue(null, issue2, new ModifiedValue(issue.getCustomFieldValue(cf), organizationsToSet), new DefaultIssueChangeHolder())
}