In the ScriptRunner console, I am writing a script to make the Epic Name equal to the Summary for a set of issues. This is my code:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter
def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def searchService = ComponentAccessor.getComponentOfType(SearchService.class)
def customField = customFieldManager.getCustomFieldObject((long) 10002)
JqlQueryBuilder jqlBuilder = JqlQueryBuilder.newBuilder()
jqlBuilder.where().project("ITSD").and().issueType("Epic")
SearchResults results = searchService.searchOverrideSecurity(
ComponentAccessor.getUserManager().getUserByName("sysadmin"),
jqlBuilder.buildQuery(),
PagerFilter.getUnlimitedFilter()
)
def issues = results.getIssues();
for (def issue: issues) {
//log.error 'issue: ' + issue.getCustomFieldValue(customField)
issue.setCustomFieldValue(customField, issue.getSummary())
//log.error 'issue: ' + issue.getCustomFieldValue(customField)
}
I get an error when calling setCustomFieldValue() at the end that says that customField is an ImmutableCustomField. How do I fix this code to make it work?
Error is:
groovy.lang.MissingMethodException: No signature of method: com.atlassian.jira.issue.DocumentIssueImpl.setCustomFieldValue() is applicable for argument types: (com.atlassian.jira.issue.fields.ImmutableCustomField, java.lang.String) values: [Epic Name, Application Portfolio Manangement - Phase I] Possible solutions: getCustomFieldValue(com.atlassian.jira.issue.fields.CustomField) at Script47.run(Script47.groovy:24)
Hi Paul,
Here's how you do it:
import com.atlassian.jira.issue.MutableIssue
def issues = results.getIssues().collect{ComponentAccessor.getIssueManager().getIssueByCurrentKey(it.getKey())}
for (def issue : issues){
issue = issue as MutableIssue
issue.setCustomFieldValue(.........)
}
That works. Of course, the question is why do I have to re-get an issue? I guess the SearchService does not return a mutable issue?
Also, now I eveolved the script, slightly different than yours, and I get a subsequent error:
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.web.bean.PagerFilter
IssueManager issueManager = ComponentAccessor.getIssueManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
SearchService searchService = ComponentAccessor.getComponentOfType(SearchService.class)
//ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
ApplicationUser user = ComponentAccessor.getUserManager().getUserByName("sysadmin")
CustomField customField = customFieldManager.getCustomFieldObjectByName("Epic Name")
JqlQueryBuilder jqlBuilder = JqlQueryBuilder.newBuilder()
jqlBuilder.where().project("ITSD").and().issueType("Epic")
SearchResults results = searchService.searchOverrideSecurity(user, jqlBuilder.buildQuery(), PagerFilter.getUnlimitedFilter())
def issues = results.getIssues()
for (def issue: issues) {
log.error 'issue: ' + issue.getKey()
MutableIssue mutableIssue = (issueManager.getIssueByCurrentKey(issue.getKey()))
mutableIssue.setCustomFieldValue(customField, mutableIssue.getSummary())
issueManager.updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false)
}
The error seems to be about casting:
No signature of method: com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue() is applicable for argument types: (com.atlassian.jira.user.DelegatingApplicationUser, com.atlassian.jira.issue.DocumentIssueImpl, com.atlassian.jira.event.type.EventDispatchOption$EventDispatchOptionImpl, java.lang.Boolean) values: [sysadmin(sysadmin), DocumentIssueImpl[issueKey=ITSD-2034], com.atlassian.jira.event.type.EventDispatchOption$EventDispatchOptionImpl@7c2601c5, ...] Possible solutions: updateIssue(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.MutableIssue, com.atlassian.jira.event.type.EventDispatchOption, boolean), updateIssue(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.MutableIssue, com.atlassian.jira.issue.UpdateIssueRequest)
Any suggestions?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
The reason why you have to re-get your issue as MutableIssue is because SearchService returns a DocumentIssueImpl object, which does not have any setter methods.
As for the error above you need to pass 'mutableIssue' variable into updateIssue() method instead of 'issue'
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.