Hey there everyone,
I'm trying to create a scriptrunner listener that sets the fix version on the issue if it's in said list of sprints. I think I'm close but I get a ClassCastException error when running it. What am I missing?
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.greenhopper.service.rapid.view.RapidViewService
import com.atlassian.greenhopper.service.sprint.Sprint
import com.atlassian.greenhopper.web.rapid.chart.HistoricSprintDataFactory
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.atlassian.greenhopper.service.sprint.SprintIssueService
import com.onresolve.scriptrunner.runner.customisers.PluginModuleCompilationCustomiser
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.project.version.Version
@WithPlugin("com.pyxis.greenhopper.jira")
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
log.debug "foo bar"
IssueManager issueManager = ComponentAccessor.getComponent(IssueManager.class)
issue = event.issue
def sprintIssueService = PluginModuleCompilationCustomiser.getGreenHopperBean(SprintIssueService)
def user = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
def serviceOutcome = sprintIssueService.getSprintsForIssue(user, issue)
def sprints = serviceOutcome.get()
Collection<Version> fixVersions = new ArrayList<Version>()
fixVersions = issue.getFixVersions()
log.debug("Fix Version/s" + fixVersions)
def sprint_name = sprints[0].name as String
log.debug("Sprint:" + sprint_name)
List sprint_lst = ['test Sprint 1', 'test Sprint 2']
if (sprint_lst.contains(sprint_name)){
log.debug("Sprint was in list" + sprint_lst + "Updating fix version.")
fixVersions.add("PI_21-1")
log.debug("New Fix Version/s" + fixVersions)
((MutableIssue) issue).setFixVersions(fixVersions)
log.debug(issue)
issueManager.updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false)
}
else{
log.debug("Sprint was not in list.")
}
//customField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(customField), newValue), new DefaultIssueChangeHolder())
Error message:
2021-03-24 21:29:00,506 DEBUG [acme.CreateSubtask]: foo bar
2021-03-24 21:29:00,510 DEBUG [acme.CreateSubtask]: Fix Version/s[Test]
2021-03-24 21:29:00,510 DEBUG [acme.CreateSubtask]: Sprint:test Sprint 1
2021-03-24 21:29:00,511 DEBUG [acme.CreateSubtask]: Sprint was in list[test Sprint 1, test Sprint 2]Updating fix version.
2021-03-24 21:29:00,511 DEBUG [acme.CreateSubtask]: New Fix Version/s[Test, PI_21-1]
2021-03-24 21:29:00,511 DEBUG [acme.CreateSubtask]: SEIT-441
2021-03-24 21:29:00,515 ERROR [runner.AbstractScriptListener]: *************************************************************************************
2021-03-24 21:29:00,515 ERROR [runner.AbstractScriptListener]: Script function failed on event: com.atlassian.jira.event.issue.IssueEvent, file: null
java.lang.ClassCastException: java.lang.String cannot be cast to com.atlassian.jira.project.version.Version
at com.atlassian.jira.project.version.DefaultVersionManager.updateIssueValue(DefaultVersionManager.java:581)
at com.atlassian.jira.project.version.DefaultVersionManager.updateIssueFixVersions(DefaultVersionManager.java:569)
at com.atlassian.jira.issue.fields.FixVersionsSystemField.updateIssueValue(FixVersionsSystemField.java:101)
at com.atlassian.jira.issue.fields.AbstractVersionsSystemField.updateValue(AbstractVersionsSystemField.java:380)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateFieldValues(DefaultIssueManager.java:728)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:681)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:667)
at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:217)
at com.atlassian.jira.issue.IssueManager$updateIssue$2.call(Unknown Source)
at Script692.run(Script692.groovy:45)