Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Scriptrunner - Set fix version if in sprint

Matthew Mallard March 24, 2021

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)

 

1 answer

1 accepted

0 votes
Answer accepted
Martin Bayer _MoroSystems_ s_r_o__
Community Champion
March 24, 2021

Hi @Matthew Mallard can you share the Exception message?

Matthew Mallard March 24, 2021

Sorry 'bout that. It's now appended to the original post.

Matthew Mallard March 24, 2021

Ok, had to edit it twice. First one was the wrong error message.

Martin Bayer _MoroSystems_ s_r_o__
Community Champion
March 24, 2021

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-

Matthew Mallard March 25, 2021

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);
}
Martin Bayer _MoroSystems_ s_r_o__
Community Champion
March 27, 2021

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 ;)

Suggest an answer

Log in or Sign up to answer
DEPLOYMENT TYPE
SERVER
TAGS
AUG Leaders

Atlassian Community Events