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

Next challenges

Recent achievements

  • Global
  • Personal

Recognition

  • Give kudos
  • Received
  • Given

Leaderboard

  • Global

Trophy case

Kudos (beta program)

Kudos logo

You've been invited into the Kudos (beta program) private group. Chat with others in the program, or give feedback to Atlassian.

View group

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Set organisation and new reporter based on custom field Edited

Hi community,

I am not an expert in scripting but am really eager to learn more and to get things done by using groovy and Script Runner. Today I kindly ask you for your support since I get stuck. I have tried a lot and I have read a lot of articles in Script Runner documentation + library as well as around here. Most of the articles generally lead into the right direction but I can't put all these things together in order to achieve the following:

  • based on a choice from a single select field (mandatory upon issue creation)
  • an existing Service Desk organisation shall be set
  • an existing particular reporter for this organisation shall be set
  • once the issue has been created.

 

We're using Jira (Server) 7.13.11 and Service Desk 3.6.11 plus Script Runner for Jira 6.2.1. To get this task done I was going to set up a script to be used as a script listener via Script Runner only on the "Issue Created" event.

Please find below the current work on my script:

(parts that are commented out were part of my testing)

 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager
import groovy.transform.Field
import org.apache.log4j.Logger
import org.apache.log4j.Level

@Field Logger log = Logger.getLogger("Partner/Organisation setter:")
log.setLevel(Level.DEBUG)

ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
UserManager userManager = ComponentAccessor.getUserManager()
IssueManager issueManager = ComponentAccessor.getComponent(IssueManager.class)
MutableIssue updatedIssue = (MutableIssue) event.getIssue()
MutableIssue issue = ComponentAccessor.getIssueManager().getIssueByCurrentKey("")

//def issueReporter
//def partner = customFieldManager.getCustomFieldObject("customfield_10111")
//def organisation = customFieldManager.getCustomFieldObject("customfield_10103")

def partner = ComponentAccessor.customFieldManager.getCustomFieldObject("customfield_10111");
//config.partner = issue.getCustomFieldValue(partner);
def organisation = ComponentAccessor.customFieldManager.getCustomFieldObject("customfield_10103");
//config.organisation = issue.getCustomFieldValue(organisation);

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
//CustomField partner = customFieldManager.getCustomFieldObjectByName("partner")
//CustomField organisation = customFieldManager.getCustomFieldObjectByName("organisation")

// String organisationValue
// def partner = updatedIssue.getCustomFieldValue(partner)

log.info("Inspecting: " + updatedIssue.key)
log.info("Partner: " + partner)

// ### end of initial part ###

// ### start of test part ###

if(partner == "Test Partner"){
log.info("Updating Partner: Test Partner")

def issueReporter = userManager.getUserByKey('testpartner@domain.de')
issue.setReporter(issueReporter)
issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)

organisation.updateValue(null, updatedIssue, new ModifiedValue(updatedIssue.getCustomFieldValue(organisation), "Test Partner"),new DefaultIssueChangeHolder())
//updatedIssue.setCustomFieldValue(organisation)
issueManager.updateIssue(event.getUser(), (MutableIssue)updatedIssue, EventDispatchOption.ISSUE_UPDATED, false)
}

 

And this is the current outcome in log:

 

2020-08-14 10:34:49,868 INFO [Partner/Organisation setter:]: Inspecting: CS-96814
2020-08-14 10:34:49,868 INFO [Partner/Organisation setter:]: Partner: Partner
2020-08-14 10:34:49,872 ERROR [runner.AbstractScriptListener]: *************************************************************************************
2020-08-14 10:34:49,872 ERROR [runner.AbstractScriptListener]: Script function failed on event: com.atlassian.jira.event.issue.IssueEvent, file: null
java.lang.IllegalArgumentException: Can only compare Field objects.
	at com.atlassian.jira.issue.fields.ImmutableCustomField.compareTo(ImmutableCustomField.java:1841)
	at Script642.run(Script642.groovy:58)

 

Many thanks in advance for for help!

 

Best regards,

Johannes

2 answers

1 accepted

This is how it looks in the end. During development we went into some other trouble but in the end we managed to get it working as a workflow post function with script runner):

 

import com.atlassian.fugue.Option
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserManager
import com.atlassian.servicedesk.api.ServiceDeskManager
import com.atlassian.servicedesk.api.organization.OrganizationService
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import groovy.transform.Field
import org.apache.log4j.Logger
import org.apache.log4j.Level

@Field Logger log = Logger.getLogger("Partner/Organisation setter:")
log.setLevel(Level.DEBUG)
@WithPlugin("com.atlassian.servicedesk")
@PluginModule ServiceDeskManager serviceDeskManager
@PluginModule OrganizationService organizationService


ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
UserManager userManager = ComponentAccessor.getUserManager()
IssueManager issueManager = ComponentAccessor.getComponent(IssueManager.class)
def partner = ComponentAccessor.customFieldManager.getCustomFieldObject("customfield_id")
def organisation = ComponentAccessor.customFieldManager.getCustomFieldObject("customfield_id")
def partnerValue = partner.getValue(issue)
def organisationValue = organisation.getValue(issue)

//Logging
log.info("Partner: " + partnerValue.getClass())
log.info("Organisation: " + organisationValue.getClass())


def organisationList
def organization

switch (partnerValue.toString()) {
case 'Partner A':
organization = organizationService.getById(user, 1).right()?.get()
issue.setReporterId('partner.A')
break
case 'Partner B':
organization = organizationService.getById(user, 2).right()?.get()
issue.setReporterId('partner.B')
break
case 'Partner C':
organization = organizationService.getById(user, 3).right()?.get()
issue.setReporterId('partner.C')
break
// etc.
}
def organizationList = [organization]
issue.setCustomFieldValue(organisation, organizationList)
ComponentAccessor.getIssueManager().updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false)

 

It looks like there is an issue on line 58. Which part of the code is line 58?

if(partner == "Test Partner"){

 

I was quite sure that from all lies this one would be fine. But I can be wrong. :-)

Line 58 makes sense btw., now I see it. 

I think you may want to check if the value of the partner customfield is equal to "Test Partner"

def issue = event.issue
def partner = ComponentAccessor.customFieldManager.getCustomFieldObject("customfield_10111")
def partnerValue = partner.getValue(issue)
if(partnerValue.equals("Test Partner")
{
...
}

 

I usually like to test these before I post them, but I'm unable to test at the moment.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Jira Service Management

Why upgrade to Jira Service Management Premium?

We often have questions from folks using Jira Service Management about the benefits to using Premium. Check out this video to learn how you can unlock even more value in our Premium plan.  &nb...

133 views 0 4
Read article

Community Events

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

Find an event

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

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you