Hi Jira gurus!
After many searches, I am reaching out to the community for a little help on this one. I am using this ScriptListener to update the story points from all issues in an Epic to the Epic parent.
The listener is working except for its main purpose - updating the field! Every attempt I make to fix this results in an error. Any suggestions are much appreciated.
The original script is here and I have modified it for IssueType to include Bugs, Tech Debt, Hot Fixes, etc.
https://bitbucket.org/snippets/Adaptavist/rAGj67?_ga=2.203170839.722525303.1572858588-255267661.1554209298
Hi @Davey ,
From the error log I could see that you've framed your jql query in script with syntax error
Can you paste your jql part in script to take a look
BR,
Leo
Thanks @Leo !
Pasting the script since it is a small one. From what I can tell the jql is where this comment starts - // Note: The search API is limited that to only be able to return a maximum of 50 results
/** This script listiner which should be configured on the issue updated event and shows how you can update the value of the story points field on the epic to show a sum of the values from the story points field for all stories linked to the epic, each time the epic issue is updated.* "All right, title and interest in this code snippet shall remain the exclusive intellectual property of Adaptavist Group Ltd and its affiliates. Customers with a valid ScriptRunner* license shall be granted a non-exclusive, non-transferable, freely revocable right to use this code snippet only within their own instance of Atlassian products. This licensing notice cannot be removed* or amended and must be included in any circumstances where the code snippet is shared by You or a third party."*/
if(issue.fields.issuetype.name.toString() == "Epic"){// Get the Epic Issue Keydef epicIssueKey = issue.key.toString()logger.info("Epic Key = " + epicIssueKey)
// Get the field idsdef fields = get('/rest/api/2/field').asObject(List).body as List<Map>
// Get the story points custom field to use in the scriptdef storyPointsField = fields.find { it.name == "Story Points" }.idlogger.info("The id of the story points field is: $storyPointsField")
// Note: The search API is limited that to only be able to return a maximum of 50 resultsdef allStories = get("/rest/api/2/search").queryString("jql", "parentEpic =${epicIssueKey} and issuetype = 'Story', 'Bug'").queryString("fields", "parent,$storyPointsField").asObject(Map).body.issues as List<Map>
logger.info("Total stories for ${epicIssueKey}: ${allStories.size()}")
// Sum the storyPointsdef estimate = allStories.collect { Map story ->story.fields[storyPointsField] ?: 0
}.sum()logger.info("Summed Story Points: ${estimate}")
// Store the summed story points on the Story Points field of the epic issuedef summedEstimateField = fields.find { it.name == "Story Points" }.id
logger.info("Custom field ID to update: ${summedEstimateField}")
// Now update the Epic issuedef result = put("/rest/api/2/issue/${epicIssueKey}").header('Content-Type', 'application/json').body([fields: [(summedEstimateField): estimate]]).asString()
// check that updating the Epic issue workedassert result.status >= 200 && result.status < 300}else{logger.info("Not an Epic issue so do nothing")}
@Davey
As I suspected, there is a syntax error with your JQL >>> "parentEpic =${epicIssueKey} and issuetype = 'Story', 'Bug'"
if you replace to anyone of them below may fix your issue
1. "parentEpic =${epicIssueKey} and (issuetype = 'Story' or issuetype = 'Bug')"
2 "parentEpic =${epicIssueKey} and issuetype in ('Story', 'Bug')"
@Leo - You're the bomb.com! That was it!
Thanks so much!
It looks like you're new here. Sign in or register to get started.