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)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Ok, had to edit it twice. First one was the wrong error message.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
OK, the problem is this row
fixVersions.add("PI_21-1")
You are adding String to collection of
com.atlassian.jira.project.version.Version
You have to get Version object first. I think you can use VersionManager service and method https://docs.atlassian.com/software/jira/docs/api/7.1.7/com/atlassian/jira/project/version/VersionManager.html#getVersionsByName-java.lang.String-.
If version does not exist, you need to create it first using https://docs.atlassian.com/software/jira/docs/api/7.1.7/com/atlassian/jira/project/version/VersionManager.html#createVersion-java.lang.String-java.util.Date-java.util.Date-java.lang.String-java.lang.Long-java.lang.Long-boolean-
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Follow on question. Do I need to do anything after creating the new version for it to commit like I have to do with the issue (e.g. issueManager.updateIssue).
newFixVersion = versionManager.getVersion(10300, "PI_21-3")
if(newFixVersion){
log.debug("Fix version found. Appending.")
}
else{
log.debug("Fix version not found. Creating.")
versionManager.createVersion("PI_21-3", null, new Date(), "", 10300, null, false);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hI @Matthew Mallard I think it should be ok just to use "createVersion". But if you have your environmnet ready, it is quite simple to test it ;)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.