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.
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 Key
def epicIssueKey = issue.key.toString()
logger.info("Epic Key = " + epicIssueKey)
// Get the field ids
def fields = get('/rest/api/2/field')
.asObject(List)
.body as List<Map>
// Get the story points custom field to use in the script
def storyPointsField = fields.find { it.name == "Story Points" }.id
logger.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 results
def 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 storyPoints
def 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 issue
def summedEstimateField = fields.find { it.name == "Story Points" }.id
logger.info("Custom field ID to update: ${summedEstimateField}")
// Now update the Epic issue
def result = put("/rest/api/2/issue/${epicIssueKey}")
.header('Content-Type', 'application/json')
.body([
fields: [
(summedEstimateField): estimate
]
])
.asString()
// check that updating the Epic issue worked
assert result.status >= 200 && result.status < 300
}else{
logger.info("Not an Epic issue so do nothing")
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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')"
BR,
Leo
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Well now there is a new quirk. The script is updating the field, but it is giving the max 50 stories and a total of 122 story points to everything. (faceplam)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If I'm right scriptrunner goes with search api internally which is limited in jira(which is not configurable)
you can try with pagination, but I never played with that :(
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Working perfectly now.
Added a queryString parameter for maxresults = 50 and adjusted the JQL to use the in statement for the issue types!
On to the next project.
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.