Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Jira Scriptrunner Groovy Script Error c.o.s.jira.workflow.AbstractScriptWorkflowFunction

Retro IT
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
May 16, 2020

I'm getting the following  Error from a groovy script that ran on a previous version of Jira  8.5.0 but has started error out after upgrading to 8.5.4.

See the main error and script below...

Error:

2020-05-15 22:43:04,635-0500 https-jsse-nio-443-exec-46 ERROR ethan 1363x459075x1 1jfte1t 172.20.10.69 /secure/QuickCreateIssue.jspa [c.o.s.jira.workflow.AbstractScriptWorkflowFunction] *************************************************************************************
2020-05-15 22:43:04,637-0500 https-jsse-nio-443-exec-46 ERROR ethan 1363x459075x1 1jfte1t 172.20.10.69 /secure/QuickCreateIssue.jspa [c.o.s.jira.workflow.AbstractScriptWorkflowFunction] Script function failed on issue: null, actionId: 1, file: null
groovy.lang.MissingMethodException: No signature of method: listeners.AutoAssign_AUD.main() is applicable for argument types: ([Ljava.lang.String;) values: [[]]
Possible solutions: wait(), wait(long), any(), find(), wait(long, int), init(java.util.Map) ....

 Script: AutoAssign_AUD.groovy
Auto assigns an issue based on the discipline field, specifically for the AUD project

package listeners

import java.util.*
import java.sql.Timestamp
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.*
import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import org.apache.log4j.Category
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.issue.index.IssueIndexingService

//rename your listener class as needed, should be same as the filename
class AutoAssign_AUD extends AbstractIssueEventListener {

//Gotta have this
@Override
void workflowEvent(IssueEvent event) {
this.customEvent(event)
}

//Core Event work
@Override
void customEvent(IssueEvent event) {
//Need this
Issue issue = event.issue

//Set logging
def Category log = Category.getInstance("com.onresolve.jira.groovy")
log.setLevel(org.apache.log4j.Level.INFO)

if (issue.assignee) {
log.info("Issue was created with assignee")
return
}

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cfDiscipline = customFieldManager.getCustomFieldObjectByName("Discipline")
def discipline = issue.getCustomFieldValue(cfDiscipline)

def userToReassign = issue.getAssignee()
UserUtil userUtil = ComponentAccessor.getUserUtil()

switch (discipline) {
case "Audio":
userToReassign = userUtil.getUserObject("un-audio")
break
case "Animation":
userToReassign = userUtil.getUserObject("un-animation")
break
case "Character_Art":
userToReassign = userUtil.getUserObject("un-charart")
break
case "Concept_Art":
userToReassign = userUtil.getUserObject("un-concept")
break
case "Design":
userToReassign = userUtil.getUserObject("un-designer")
break
case "Engineering":
userToReassign = userUtil.getUserObject("un-audioeng")
break
case "Environment_Art":
userToReassign = userUtil.getUserObject("un-enviroart")
break
case "Narrative":
userToReassign = userUtil.getUserObject("un-narrative")
break
case "Tech_Art":
userToReassign = userUtil.getUserObject("un-techart")
break
case "UI_UX":
userToReassign = userUtil.getUserObject("un-interface")
break
case "VFX":
userToReassign = userUtil.getUserObject("un-vfx")
break
}
log.info("Discipline: $discipline | Assignee: $userToReassign")
issue.setAssignee(userToReassign)
UpdateIssueRequest updateIssueRequest = UpdateIssueRequest.builder().eventDispatchOption(EventDispatchOption.DO_NOT_DISPATCH).sendMail(false).build();
ComponentAccessor.getIssueManager().updateIssue(ComponentAccessor.getJiraAuthenticationContext().getUser(), issue, updateIssueRequest)

boolean wasIndexing = ImportUtils.isIndexIssues();
IssueIndexingService indexing = (IssueIndexingService) ComponentAccessor.getComponent(IssueIndexingService.class);
indexing.reIndex(issue)
ImportUtils.setIndexIssues(wasIndexing);

log.info("Issue Updated-(Auto-Assign)")
}
}

 

1 answer

0 votes
PD Sheehan
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 24, 2020

This looks like what Ataptavist are calling "Heritage Custom LIsteners"

This is the old method of using custom listeners. It still works, but you are not advised to use it for new code

Maybe the "it still works" is no longer true after 8.5.4. I can't find a difference in the javadoc that would explain why.

But perhaps the simplest approach is to change this script to use a script instead of a class.

Like this (with some simplification of the discipline-user mapping)


import com.atlassian.jira.component.ComponentAccessor
import org.apache.log4j.Category
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.issue.index.IssueIndexingService

//Need this
Issue issue = event.issue

//Set logging
def Category log = Category.getInstance("com.onresolve.jira.groovy")
log.setLevel(org.apache.log4j.Level.INFO)

if (issue.assignee) {
log.info("Issue was created with assignee")
return
}

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cfDiscipline = customFieldManager.getCustomFieldObjectByName("Discipline")
def discipline = issue.getCustomFieldValue(cfDiscipline)

def userToReassign = issue.getAssignee()
UserUtil userUtil = ComponentAccessor.getUserUtil()
def disciplineUserMap =
[ Audio: 'un-audio',
Animation:'un-animation',
Character_Art:'un-charart',
Concept_Art:'un-concept',
Design:'un-designer',
Engineering:'un-audioeng',
Environment_Art:'un-enviroart',
Narrative:'un-narrative',
Tech_Art:'un-techart',
UI_UX:'un-interface',
VFX:'un-vfx',
]

userToReassign = userUtil.getUserObject(disciplineUserMap[discipline])

log.info("Discipline: $discipline | Assignee: $userToReassign")
issue.setAssignee(userToReassign)
UpdateIssueRequest updateIssueRequest = UpdateIssueRequest.builder().eventDispatchOption(EventDispatchOption.DO_NOT_DISPATCH).sendMail(false).build();
ComponentAccessor.getIssueManager().updateIssue(ComponentAccessor.getJiraAuthenticationContext().getUser(), issue, updateIssueRequest)

boolean wasIndexing = ImportUtils.isIndexIssues();
IssueIndexingService indexing = (IssueIndexingService) ComponentAccessor.getComponent(IssueIndexingService.class);
indexing.reIndex(issue)
ImportUtils.setIndexIssues(wasIndexing);

log.info("Issue Updated-(Auto-Assign)")

Suggest an answer

Log in or Sign up to answer