Hello everyone,
will try to be quick.
I trying following:
The code we are running is:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.ModifiedValue import com.atlassian.jira.issue.search.SearchProvider import com.atlassian.jira.issue.util.DefaultIssueChangeHolder import com.atlassian.jira.jql.parser.JqlQueryParser import com.atlassian.jira.web.bean.PagerFilter import com.atlassian.jira.issue.search.SearchQuery import com.atlassian.jira.user.ApplicationUser def searchQuery = "project = RFC AND resolution = Unresolved" def customFieldManager = ComponentAccessor.getCustomFieldManager() def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser) def searchProvider = ComponentAccessor.getComponent(SearchProvider) def issueManager = ComponentAccessor.issueManager def userAuth = ComponentAccessor.jiraAuthenticationContext.loggedInUser def query = jqlQueryParser.parseQuery(searchQuery) def searchResults = searchProvider.search(SearchQuery.create(query, userAuth), PagerFilter.unlimitedFilter) def issueService = ComponentAccessor.issueService def customField = null def user = null def userAccount = null def key = null def issue = null def application = null ArrayList userAccounts = [] def changeHolder = new DefaultIssueChangeHolder() searchResults.results.each { documentIssue -> userAccounts = [] key = documentIssue.document.fields.find { it.name() == "key" }.stringValue() issue = issueManager.getIssueObject(key) application = issue.get("customfield_17203")?.first() customField = customFieldManager.getCustomFieldObject("customfield_17702") Class objectFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().findClass("com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade") def objectFacade = ComponentAccessor.getOSGiComponentInstanceOfType(objectFacadeClass) if (application != null) { int userAttributeId = 328 // Business Owner def persBean = objectFacade.loadObjectAttributeBean(application.getId(), userAttributeId) if (persBean != null) { user = objectFacade.loadObjectBean(persBean.getObjectAttributeValueBeans()[0].getValue()) if (user != null) { def userBean = objectFacade.loadObjectAttributeBean(user.getId(), 167) // if (userBean != null) { def userName = userBean.getObjectAttributeValueBeans()[0].getValue() if (userName != null) { userAccount = ComponentAccessor.getUserManager().getUserByName(userName) userAccounts.add(userAccount) customField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(customField), userAccounts), changeHolder) } } } } } }
The error we got is:
Message: java.lang.NullPointerException Stack: com.atlassian.jira.issue.customfields.impl.MultiUserCFType.getChangelogValue(MultiUserCFType.java:159) com.atlassian.jira.issue.customfields.impl.MultiUserCFType.getChangelogValue(MultiUserCFType.java:101) com.atlassian.jira.issue.fields.ImmutableCustomField.getChangelogValue(ImmutableCustomField.java:376) com.atlassian.jira.issue.fields.ImmutableCustomField.updateValue(ImmutableCustomField.java:411) com.atlassian.jira.issue.fields.ImmutableCustomField.updateValue(ImmutableCustomField.java:396) com.atlassian.jira.issue.fields.OrderableField$updateValue.call(Unknown Source) script16280233284091635377318$_run_closure1.doCall(script16280233284091635377318.groovy:49) sun.reflect.GeneratedMethodAccessor20919.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101) groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263) groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041) groovy.lang.Closure.call(Closure.java:405) groovy.lang.Closure.call(Closure.java:421) org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2330)I checked everything inside, and all variable looks fine. We just spent like 4 hours in two men on that, so the community is our last hope. Thanks guys :-)
@Jamie Echlin _ScriptRunner - The Adaptavist Group_ You are my long-term-groovy-god ... do you have any idea? :-( Spent a lot of time here, without success :-(
Ha... when I'm summoned like that I have no choice but to try to help ;-)
But I don't really know, what Jira version are you using so I can make sure I can read the stack trace properly? Looking at the code it's hard to see why you would get an NPE there, but maybe my line numbers are wrong, I happen to be looking at jira 8.13 source.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I think the issue will be that:
userAccount = ComponentAccessor.getUserManager().getUserByName(userName)
in the line above, `userAccount` is null.
Because I can repro a similar stack trace using:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
def issue = ComponentAccessor.issueManager.getIssueObject('JRA-1')
def customField = ComponentAccessor.customFieldManager.getCustomFieldObjectByName('MultiUserPickerA')
def user = ComponentAccessor.userManager.getUserByName('IDontExist')
customField.updateValue(null, issue, new ModifiedValue(null, [user]), new DefaultIssueChangeHolder())
If I change "IDontExist" to a valid user name it works.
So I suspect that you need to check whether `getUserByName` returns null or not, if it's null don't add it to the list.
I can't remember whether Insight attributes can be typed, if it's typed as User possible you want to look the user up by user key, not user name...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Oh my ...
I got blinded after 8 hours of looking into code.
Of course the line
if (userAccount != null) { ... }
solved the issue ...
Thanks so much
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.