I would like to set the story points field to only accept 1,2,3,5,8,13 via a dropdown.
Is that possible?
Hi Pablo
As it turns out, GreenHopper treat the story points field as a number field. Currently this feature doesn't exist at GreenHopper configuration. You could rase a support ticket, so they can open a feature request and the more votes it get, better the chance to it be implemented in future releases.
Best Regards,
Ricardo Carracedo.
I would like to see this behavior as well.
I am also hoping to see this behavior.
Any updates on this?
No, as it's behaving as designed and intended.
The closest you will get to a workaround is a little bit of code.
@Nic Brough -Adaptavist- do you have an example (groovy script) for me, to do this with script runner as an event listener? I have searched a lot, but the only examples I can find is "copy from task to sub-task" and I don't get it to work like you described above.
Are there any free add-ons that allow me to do this? The only ones that I am seeing are ScriptRunner and PowerScripts, both of which are monthly subscription based.
Hi All,
I completely understand this requirement, since any Burndown Chart and Velocity calculation is useless as long as anyone can enter any value. This is why we created the brand new App "StoryPoints" for Jira Server.
It is dedicated to Fibonacci Estimation but supports any Selection Options via easy administration.
For details see here.
https://marketplace.atlassian.com/apps/1220390/storypoints-for-jira?hosting=server&tab=overview
Cheers
Heiko
Our team used Scriptrunner to create a simple custom listener for the Points field. If the entered value is not a Fibonacci number, the value is automatically updated to the next Fibonacci number in the sequence. Pretty simple solution.
Once Scriptrunner is installed, the listener can be added under Administration > Add-ons > Scriptrunner > Listeners.
Here's the basic logic:
// Fibonacci Points Listenerimport com.atlassian.jira.bc.issue.IssueServiceimport com.atlassian.jira.component.ComponentAccessorimport com.atlassian.jira.event.issue.IssueEventimport com.atlassian.jira.issue.IssueInputParametersimport com.atlassian.jira.issue.Issueimport com.atlassian.jira.issue.CustomFieldManagerimport com.atlassian.jira.issue.fields.CustomFielddef fibList = [0,1] // seed the Fibonacci sequencedef fibCheck = {}fibCheck = { float val -> if (val <= fibList[-1]) { // if points less than or equal to last number in sequence return fibList[-1] // round up to next Fibonacci number } else { fibList += (fibList[-1] + fibList[-2]) // append next Fibonacci number to sequence return fibCheck(val) // repeat check }}def pointId = "customfield_10006" // Jira "custom" field ID for points// object required to update issuesIssueService issueService = ComponentAccessor.getComponent(IssueService)IssueInputParameters issueInputParameters = issueService.newIssueInputParameters()def event = event as IssueEventIssue issue = event.getIssue()def user = ComponentAccessor.getJiraAuthenticationContext().loggedInUser// get custom fields for issueList<CustomField> allCustomFields = ComponentAccessor.getCustomFieldManager().getCustomFieldObjects(issue);def allCustomIds = allCustomFields.collect {it.id}if (!(pointId in allCustomIds)) { return } // no Points field// object required to manage custom fieldsdef customFieldManager = ComponentAccessor.getCustomFieldManager()CustomField points = customFieldManager.getCustomFieldObject(pointId)def rawPointVal = issue.getCustomFieldValue(points)if (rawPointVal == null) { return } // no Points valuefloat pointVal = rawPointVal as float // set raw points as floatif (pointVal == 0) { return } // accept 0 pointsdef fibPointVal = fibCheck(pointVal) // round to next Fibonacci numberif (fibPointVal != pointVal) { // reset points if updated issueInputParameters.addCustomFieldValue(points.id, fibPointVal as String) def update = issueService.validateUpdate(User, issue.id, issueInputParameters)}return
The logic could be easily modified to support geometric series (i.e., 1, 2, 4, 8, 16, etc.).
Thanks to Sam Orloff for the sample code.
Hi Everybody,
I tried this code, but for some reasons it did not works.
We had to change issue update part of the code. I attached a screenshot to the modify.
I commented out lines 56., 57. and wrote the lines 58.,59. Of course you have to insert the right imports for the new lines. If somebody figure out what was the problem these lines, let me know.
It looks like you're new here. Sign in or register to get started.