Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 19:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.
×I built the below script to be run as a workflow post function with the following goals:
When I run the query, the logs are capturing and adding the fields correctly, but I'm receiving this exception. When I try to put as a map, double, or int I do receive different exceptions, but none are successful. I have also tried limiting my put to a single field, and still receive the exception.
Exception:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: com.adaptavist.sr.cloud.output.ScriptExecutionOutput["result"]->io.github.openunirest.request.body.RequestBodyEntity["httpRequest"]->io.github.openunirest.request.HttpRequestWithBody["httpRequest"]) at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:722) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:655) at com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514) at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1215) at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:1085)
Script:
// Specify the issue key to update
//def issueKey = issue.getKey()
import org.apache.log4j.Logger;
def issueKey = 'HWI-30'
def issue = get("/rest/api/2/issue/${issueKey}")
.header('Content-Type', 'application/json')
.asObject(Map)
.body
def fields = issue.fields as Map
def inputAccInitialEstimate = 'customfield_10134'
def inputNCInitialEstimate = 'customfield_10135'
def inputOthInitialEstimate = 'customfield_10136'
def inputHTACNInitial = 'customfield_10311'
def inputOth2InitialEstimate = 'customfield_10317'
def inputACNInitialTestEstimate = 'customfield_10331'
def valueAccInitialEstimate = issue.fields[inputAccInitialEstimate]['value'] as int
def valueNCInitialEstimate = issue.fields[inputNCInitialEstimate]['value'] as int
def valueothInitialEstimate = issue.fields[inputOthInitialEstimate]['value'] as int
def valueHTACNInitialEstimate = issue.fields[inputHTACNInitial]['value'] as int
def valueOth2InitialEstimate = issue.fields[inputOth2InitialEstimate]['value'] as int
def valueACNInitialTestEstimate = issue.fields[inputACNInitialTestEstimate]['value'] as int
def sumInitialEstimate = valueAccInitialEstimate + valueNCInitialEstimate + valueothInitialEstimate + valueHTACNInitialEstimate + valueOth2InitialEstimate + valueACNInitialTestEstimate
def sumInitialTestingEstimate = valueACNInitialTestEstimate
def sumInitialDevEstimte = valueAccInitialEstimate + valueNCInitialEstimate + valueothInitialEstimate + valueHTACNInitialEstimate + valueOth2InitialEstimate
def inputAccDetailEstimate = 'customfield_10152'
def inputNCDetailEstimate = 'customfield_10154'
def inputOthDetailEstimate = 'customfield_10155'
def inputNCDetailTestEstimate = 'customfield_10334'
def inputHTACNDetailTestEstimate = 'customfield_10332'
def inputHTACNDetailedEstimate = 'customfield_10312'
def inputOth2DetailedEstimate = 'customfield_10318'
def valueAccDetailEstimate = issue.fields[inputAccDetailEstimate]['value'] as int
def valueNCDetailEstimate = issue.fields[inputNCDetailEstimate]['value'] as int
def valueothDetailEstimate = issue.fields[inputOthDetailEstimate]['value'] as int
def valueNCDetailTestEstimate = issue.fields[inputNCDetailTestEstimate]['value'] as int
def valueHTACNDetailTestEstimate = issue.fields[inputHTACNDetailTestEstimate]['value'] as int
def valueHTACNDetailedEstimate = issue.fields[inputHTACNDetailedEstimate]['value'] as int
def valueOth2DetailedEstimate = issue.fields[inputOth2DetailedEstimate]['value'] as int
def sumDetailEstimate = valueAccDetailEstimate + valueNCDetailEstimate + valueothDetailEstimate + valueNCDetailTestEstimate + valueHTACNDetailTestEstimate + valueHTACNDetailedEstimate + valueOth2DetailedEstimate
def sumDetailTestEstimate = valueNCDetailTestEstimate + valueHTACNDetailTestEstimate
def sumDetailDevEstimate = valueAccDetailEstimate + valueNCDetailEstimate + valueothDetailEstimate + valueHTACNDetailedEstimate + valueOth2DetailedEstimate
def log = Logger.getLogger("com.onresolve.jira.groovy");
log.info ("Acc Intial Estimate: "+valueAccInitialEstimate);
log.info ("NC Initial Estimate: "+valueNCInitialEstimate);
log.info ("Oth Initial Estimate: "+valueothInitialEstimate);
log.info ("HTACN Initial Estimate: "+valueHTACNInitialEstimate);
log.info ("Oth2 Initial Estimate: "+valueOth2InitialEstimate);
log.info ("HTACN Initial Test Estimate: "+valueACNInitialTestEstimate);
log.info ("Total Initial: "+sumInitialEstimate);
log.info ("Total Initial Testing: "+sumInitialTestingEstimate);
log.info ("Total Initial Dev: "+sumInitialDevEstimte);log.info ("Acc Detail Estimate: "+valueAccDetailEstimate);
log.info ("NC Detail Estimate: "+valueNCDetailEstimate);
log.info ("NC Detail Test Estimate: "+valueNCDetailTestEstimate);
log.info ("Oth Detail Estimate: "+valueothDetailEstimate);
log.info ("HTACN Detail Test Estimate: "+valueHTACNDetailTestEstimate);
log.info ("HTACN Detail Estimate: "+valueHTACNDetailedEstimate);
log.info ("Oth2 Detail Estimate: "+valueOth2DetailedEstimate);
log.info ("Total Detail: "+sumDetailEstimate);
log.info ("Total Detail Test: "+sumDetailTestEstimate);
log.info ("Total Detail Dev: "+sumDetailDevEstimate);
put("/rest/api/2/issue/${issueKey}")
.queryString("overrideScreenSecurity", Boolean.TRUE)
.header('Content-Type', 'application/json')
.body([
fields:[
Customfield_10336:[name:+sumInitialDevEstimte] as Map,
Customfield_10337:[name:+sumInitialTestingEstimate] as Map,
Customfield_10320:[name:+sumInitialEstimate] as Map,
Customfield_10339:[name:+sumDetailTestEstimate] as Map,
Customfield_10338:[name:+sumDetailDevEstimate] as Map,
Customfield_10321:[name:+sumDetailEstimate] as Map
]
])
It looks like it's having trouble with trying to parse the return from the put call back into JSON. You can fix this by adding .asString() on the end of your put call.
Is it totally janky? Yes
Does it work? Also, yes.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.