Select custom field user value as assignee value (Script Runner)

Derek Shortt February 13, 2018

I have a workflow post function where a users' manager is the first assignee in the issue. The manager is specified in a custom field. Here is my attempt to implement in scriptrunner: 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.user.ApplicationUsers
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.event.type.EventDispatchOption

MutableIssue curIssue = issue
CustomField managerField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Manager")
String dUser = managerField.getValue(curIssue)
ApplicationUser cUser = ApplicationUsers.byKey(dUser)
IssueManager issueManager = ComponentAccessor.getIssueManager()
Project curProject = curIssue.getProjectObject()
ApplicationUser projectLead = curProject.getProjectLead()
curIssue.setAssignee(cUser)
issueManager.updateIssue(projectLead, curIssue, EventDispatchOption.ISSUE_UPDATED, false)

However when I run the post function, I get this error:

 

2018-02-13 11:13:49,627 ERROR [workflow.ScriptWorkflowFunction]: ************************************************************************************* 2018-02-13 11:13:49,627 ERROR [workflow.ScriptWorkflowFunction]: Script function failed on issue: null, actionId: 1, file: <inline script> java.lang.IllegalArgumentException: Source GenericValue can not be null. at com.atlassian.jira.association.NodeAssociationStoreImpl.getSinksFromSource(NodeAssociationStoreImpl.java:34) at com.atlassian.jira.project.version.DefaultVersionManager.getVersionsByIssue(DefaultVersionManager.java:752) at com.atlassian.jira.project.version.DefaultVersionManager.getFixVersionsFor(DefaultVersionManager.java:598) at com.atlassian.jira.project.version.DefaultVersionManager.updateIssueFixVersions(DefaultVersionManager.java:568) at com.atlassian.jira.issue.fields.FixVersionsSystemField.updateIssueValue(FixVersionsSystemField.java:98) at com.atlassian.jira.issue.fields.AbstractVersionsSystemField.updateValue(AbstractVersionsSystemField.java:368) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateFieldValues(DefaultIssueManager.java:704) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:669) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:655) at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:214) at com.atlassian.jira.issue.IssueManager$updateIssue.call(Unknown Source) at Script449.run(Script449.groovy:18)

What am I doing wrong and how can I fix it?

1 answer

1 accepted

0 votes
Answer accepted
Alexey Matveev
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.
February 13, 2018

the problem is with the last line. I guess, you pass a null for a parameter. Could you log.error (projectLead) and log.error(curIssue) and have a look in the log, if they are not null?

Derek Shortt February 13, 2018

Thanks for the sanity check. Logged both (first two entries in the log). It does not appear that I am passing a null.

 

2018-02-13 12:01:16,885 ERROR [workflow.ScriptWorkflowFunction]: admin_user(admin_user)
2018-02-13 12:01:16,901 ERROR [workflow.ScriptWorkflowFunction]: keep trying 5
2018-02-13 12:01:16,917 ERROR [workflow.ScriptWorkflowFunction]: *************************************************************************************
2018-02-13 12:01:16,917 ERROR [workflow.ScriptWorkflowFunction]: Script function failed on issue: null, actionId: 1, file: <inline script>
java.lang.IllegalArgumentException: Source GenericValue can not be null.
 at com.atlassian.jira.association.NodeAssociationStoreImpl.getSinksFromSource(NodeAssociationStoreImpl.java:34)
 at com.atlassian.jira.project.version.DefaultVersionManager.getVersionsByIssue(DefaultVersionManager.java:752)
 at com.atlassian.jira.project.version.DefaultVersionManager.getFixVersionsFor(DefaultVersionManager.java:598)
 at com.atlassian.jira.project.version.DefaultVersionManager.updateIssueFixVersions(DefaultVersionManager.java:568)
 at com.atlassian.jira.issue.fields.FixVersionsSystemField.updateIssueValue(FixVersionsSystemField.java:98)
 at com.atlassian.jira.issue.fields.AbstractVersionsSystemField.updateValue(AbstractVersionsSystemField.java:368)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateFieldValues(DefaultIssueManager.java:704)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:669)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:655)
 at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:214)
 at com.atlassian.jira.issue.IssueManager$updateIssue.call(Unknown Source)
 at Script466.run(Script466.groovy:20)
Derek Shortt February 13, 2018

Okay, ran the log with cUser dumped to log and now have a null for cUser. now need to work that out. 

2018-02-13 12:12:23,815 ERROR [workflow.ScriptWorkflowFunction]: 
2018-02-13 12:12:23,831 ERROR [workflow.ScriptWorkflowFunction]: admin_user(admin_user)
2018-02-13 12:12:23,831 ERROR [workflow.ScriptWorkflowFunction]: task 6
2018-02-13 12:12:23,831 ERROR [workflow.ScriptWorkflowFunction]: *************************************************************************************
2018-02-13 12:12:23,831 ERROR [workflow.ScriptWorkflowFunction]: Script function failed on issue: null, actionId: 1, file: <inline script>
java.lang.IllegalArgumentException: Source GenericValue can not be null.
 at com.atlassian.jira.association.NodeAssociationStoreImpl.getSinksFromSource(NodeAssociationStoreImpl.java:34)
 at com.atlassian.jira.project.version.DefaultVersionManager.getVersionsByIssue(DefaultVersionManager.java:752)
 at com.atlassian.jira.project.version.DefaultVersionManager.getFixVersionsFor(DefaultVersionManager.java:598)
 at com.atlassian.jira.project.version.DefaultVersionManager.updateIssueFixVersions(DefaultVersionManager.java:568)
 at com.atlassian.jira.issue.fields.FixVersionsSystemField.updateIssueValue(FixVersionsSystemField.java:98)
 at com.atlassian.jira.issue.fields.AbstractVersionsSystemField.updateValue(AbstractVersionsSystemField.java:368)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateFieldValues(DefaultIssueManager.java:704)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:669)
 at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:655)
 at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:214)
 at com.atlassian.jira.issue.IssueManager$updateIssue$0.call(Unknown Source)
 at Script475.run(Script475.groovy:21)
Derek Shortt February 13, 2018

Thanks @Alexey Matveev, did not know how you you pulled up variable names in the groovy prompt in JIRA. Was able to readjust the code until it worked. BLUF: if you use people picker for a custom field it returns an ApplicationUser object. No need to do a conversion. 

 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.user.ApplicationUsers
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.event.type.EventDispatchOption

MutableIssue curIssue = issue
CustomField managerField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Manager")
def dUser = managerField.getValue(curIssue)
IssueManager issueManager = ComponentAccessor.getIssueManager()
Project curProject = curIssue.getProjectObject()
ApplicationUser projectLead = curProject.getProjectLead()
curIssue.setAssignee(dUser)
log.error(dUser)
log.error(projectLead)
log.error(curIssue)
issueManager.updateIssue(projectLead, curIssue, EventDispatchOption.ISSUE_UPDATED, false)

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events