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)
Sorry 'bout that. It's now appended to the original post.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.