Hi, I've been trying to get script runner to update a field using Script Listeners.
I've got it somehow working, but I can't figure out this entirely
I have the following fields:
- Today: (date, this gets updated via script listeners)
- BIrthDate: (date)
- Age (Single line text)
I'd like for Age field to contain "X months, X years old" by calculating the difference between Today and BirthDate fields.
So far I've managed to get Today to contain the right date.
def projectKey = 'TP' // Vars def today = '{customfield_11213}' def age = '{customfield_11212}' def bdate = '{customfield_11200}' def tdate = new Date() def years = (age - tdate) def months = (age - tdate) def strdiff = """ ${months} months, ${years} years """ def message = """ Vals today ${today}, age ${age}, bdate ${bdate}, tdate ${tdate}, years ${years}, months ${months}""" logger.info("${message}") put("/rest/api/2/issue/${issue.key}") //.queryString("overrideScreenSecurity", Boolean.TRUE) .header("Content-Type", "application/json") .body([ fields:[ (today): tdate, (age): strdiff ] ]) .asString()
I'm using JIRA Cloud, and the latest version of the plugin.
Hi Fernando,
This code should work:
import java.time.LocalDate // Ignore the Issue Update event if it isn't for the right project if (issue.fields.project.key != 'VIS') { return } // These are the custom field references def todayCf = 'customfield_11213' def bdateCf = 'customfield_11200' def ageCf = 'customfield_11212' // Extract the existing values from the issue def birthdayField = issue.fields[bdateCf] as String if (birthdayField == null) { // No birthday was specified, we can't calculate the age return } def ageField = issue.fields[ageCf] as String // We should use LocalDate or ZonedDateTime instead of Date def tdate = LocalDate.now() def bdate = LocalDate.parse(birthdayField) // Calculate age in years and months def years = tdate.getYear() - bdate.getYear() def months = tdate.getMonthValue() - bdate.getMonthValue() def age = "${months} months, ${years} years" def message = "Vals tdate: ${tdate.toString()}, bdate: ${bdate.toString()}, age: ${age}" logger.info(message) // Only update the issue if the age text has changed if (age != ageField) { put("/rest/api/2/issue/${issue.key}") //.queryString("overrideScreenSecurity", Boolean.TRUE) .header("Content-Type", "application/json") .body([ fields:[ (todayCf): tdate.toString(), (ageCf): age ] ]) .asString() }
Thanks,
Jon
Great! Thank you so much!
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.