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)")
}
}
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)")
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.