Versioner sammenlignet

Nøgle

  • Linjen blev tilføjet.
  • Denne linje blev fjernet.
  • Formatering blev ændret.

...

Tip

Thanks to Adaptavist for the Script (smil)

Notice the LimitedPagedRequestImpl(0, 100, 500) lines, if the numbers are to small, nothing will be returned

Advarsel

This is a potential expensive call, if You have a lot or organisations, currently I have a customer with 600 Orgs, and the script takes 3-5 seconds to execute. So we had to change the idea of a scripted field to another solution, as each Issue view took 5-6 seconds.

I assume this will be better in JIRA 8 where the "Atlassian Fugue" is replaced by a proper API: https://confluence.atlassian.com/servicedesk/jira-service-desk-4-0-x-release-notes-961777466.html

Kodeblok
import com.atlassian.fugue.Option
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.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.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.atlassian.servicedesk")

@PluginModule
ServiceDeskManager serviceDeskManager

@PluginModule
OrganizationService organizationService
MutableIssue issue = issue
def currentUser        = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def serviceDeskProject = serviceDeskManager.getServiceDeskForProject(issue.projectObject)
def serviceDeskId      = serviceDeskProject.right()?.get()?.serviceDeskId as Integer
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 = []
// get the available organizations for that project
def organizationsQuery = new OrganizationsQuery() {
    @Override
    Option<Integer> serviceDeskId() {
        return new Option.Some<Integer>(serviceDeskId)
    }
    @Override
    LimitedPagedRequest pagedRequest() {
        return new LimitedPagedRequestImpl(0, 100, 500)
    }
}
// iterate over the organizations and if the reporter is part of any keep this organization in a collection
organizationService.getOrganizations(currentUser, organizationsQuery).right().get().results.each { organization ->
    def usersInOrganizationQuery = new UsersInOrganizationQuery() {
        @Override
        CustomerOrganization organization() {
            return organization
        }
        @Override
        LimitedPagedRequest pagedRequest() {
            return new LimitedPagedRequestImpl(0, 100, 500)
        }
    }
    if (issue.reporter in organizationService.getUsersInOrganization(currentUser, usersInOrganizationQuery).right().get().results) {
        organizationsToSet.add(organization)
    }
}
def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Organizations")
cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), organizationsToSet), new DefaultIssueChangeHolder())