Hi All,
I'm trying to calculate 3 (single select drop down fields) and populate in a number field.
Here is the sample script, what i have tried. can anyone help me with the snippet for score calculation.
Busniess Priority - Single select drop option with values (1,2,3)
Severity - Single select drop option with values (1,2,3)
Mandatory - Single select drop option with values (1,2)
Score - output field (field type number)
def customFields = get("/rest/api/2/field")
.header('Content-Type', 'application/json')
.asObject(Map)
.body
def fields = issue.fields as Map
//def output
// Get the Custom field to get the option value from
def customField1 = get("/rest/api/2/field")
.asObject(List)
.body
.find {
(it as Map).name == 'Busniess Priority'
} as Map
def customField2 = get("/rest/api/2/field")
.asObject(List)
.body
.find {
(it as Map).name == 'Severity'
} as Map
def customField3 = get("/rest/api/2/field")
.asObject(List)
.body
.find {
(it as Map).name == 'Mandatory'
} as Map
// Extract and store the option from the custom field
def value1 = (fields[customField1.id] as Map).value
def value2 = (fields[customField2.id] as Map).value
def value3 = (fields[customField3.id] as Map).value
def outputCfId
def output = value1 * value2 * value3
put("/rest/api/2/issue/${issue.key}")
//.queryString("overrideScreenSecurity", Boolean.TRUE)
.header("Content-Type", "application/json")
.body([
fields:[
(outputCfId): output
]
])
.asString()
TIA!
Found the solution finally,
// get custom fields
def customFields = get("/rest/api/2/field")
.asObject(List)
.body
.findAll { (it as Map).custom } as List<Map>
def custField1 = customFields.find { it.name == 'Business Priority'}?.id
def custField2 = customFields.find { it.name == 'Severity'}?.id
def custField3 = customFields.find { it.name == 'Mandatory'}?.id
def outputCfId = customFields.find { it.name == 'Score' }?.id
def projectKey = "ASH"
if (issue == null || issue.fields.project.key != projectKey) { (1)
logger.info("Wrong Project ${issue.fields.project.key}")
return
}
def value1 = (issue.fields[custField1] as Map).value as Integer
def value2 = (issue.fields[custField2] as Map).value as Integer
def value3 = (issue.fields[custField3] as Map).value as Integer
if (value1 == null || value2 == null || value3 == null) {
logger.info("Calculation using ${value1} and ${value2} and ${value3} was not possible")
return
}
def output = value1 * value2 * value3
if (output == (issue.fields[outputCfId] as Integer)) {
logger.info("already been updated")
return
}
put("/rest/api/2/issue/${issue.key}")
//.queryString("overrideScreenSecurity", Boolean.TRUE)
.header("Content-Type", "application/json")
.body([
fields:[
(outputCfId): output
]
])
.asString()
How to override Score value if output is null.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Here is the latest code with the error
def customFields = get("/rest/api/2/field")
.asObject(List)
.body
.findAll { (it as Map).custom } as List<Map>
def custField1 = customFields.find { it.name == 'Business Priority'}?.id
def custField2 = customFields.find { it.name == 'Severity'}?.id
def custField3 = customFields.find { it.name == 'Mandatory'}?.id
def outputCfId = customFields.find { it.name == 'Score' }?.id
def projectKey = "ASH"
if (issue == null || issue.fields.project.key != projectKey) { (1)
logger.info("Wrong Project ${issue.fields.project.key}")
return
}
def value1 = issue.fields[custField1] as Integer
def value2 = issue.fields[custField2] as Integer
def value3 = issue.fields[custField3] as Integer
if (value1 == null || value2 == null || value3 == null) {
logger.info("Calculation using ${value1} and ${value2} and ${value3} was not possible")
return
}
def output = value1 * value2 * value3
if (output == (issue.fields[outputCfId] as Integer)) {
logger.info("already been updated")
return
}
put("/rest/api/2/issue/${issue.key}")
//.queryString("overrideScreenSecurity", Boolean.TRUE)
.header("Content-Type", "application/json")
.body([
fields:[
(outputCfId): output
]
])
.asString()
Error:
2019-08-19 19:26:37.914 INFO - Serializing object into 'interface java.util.List' 2019-08-19 19:26:38.736 INFO - GET /rest/api/2/field asObject Request Duration: 3680ms 2019-08-19 19:26:39.092 ERROR - Cannot coerce a map to class java.lang.Integer because it is a final class on line 19 2019-08-19 19:26:39.156 ERROR - Class: com.adaptavist.sr.cloud.events.WebhookExecution, Config: null
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Ash
Have you taken a look at this documentation. This is currently the closest you can get with a field calculation.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Brittany Wispell , thanks for your response.
I tried this as well, i received below error while using multiplication in the same code.
No signature of method: java.lang.String.multiply() is applicable for argument types: (java.lang.String) values:
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.