Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Scriptrunner listener log returns "data was not an object"

Joshua Sneed January 30, 2018

I have assembled a script listener to copy the contents of a system field (Assignee) to a custom Field (Assigned To) when an event (Issue Updated) is triggered. I have limited it to one project (ATS) and would like it to only run against the issue that triggered the event.

I have assembled the script from two available via Adaptavists website, the Copy Custom Field Values and the Calculate Custom Field On Issue Update. Using the Copy Custom Field Values wants to run agains all issues that meet the JQL query on the second line. The Calculate Custom Field On Issue Update only runs against the issue that triggered it and works wonderfully elsewhere on our instance.

 

The script 'completes successfully,' but leaves this error:

2018-01-30 22:16:52.816 INFO - Serializing object into 'interface java.util.Map'
2018-01-30 22:16:52.822 INFO - GET /rest/api/2/issue/ATS-1544 asObject Request Duration: 1029ms
2018-01-30 22:16:53.372 INFO - Serializing object into 'interface java.util.List'
2018-01-30 22:16:53.613 INFO - GET /rest/api/2/field asObject Request Duration: 759ms
2018-01-30 22:16:54.220 WARN - PUT request to /rest/api/2/issue/ATS-1544 returned an error code: status: 400 - Bad Request
body: {"errorMessages":[],"errors":{"customfield_14047":"data was not an object"}}
2018-01-30 22:16:54.222 INFO - PUT /rest/api/2/issue/ATS-1544 asString Request Duration: 548ms

 Here is my script:

package com.adaptavist.sr.cloud.samples.events

def sourceFieldName = 'Assignee'
def targetFieldName = 'customfield_14047' //'Assigned To'
def result = get("/rest/api/2/issue/${issue.key}" )
    .header('Content-Type', 'application/json')
    .asObject(Map)

// We retrieve a list of all fields in this JIRA instance
def fields = get("/rest/api/2/field")
    .asObject(List)
    assert fields.status == 200

List<Map> allFields = fields.body


// Now we lookup the field IDs
Map sourceField = allFields.find { it.name == sourceFieldName }
Map targetField = allFields.find { it.name == targetFieldName }

put("/rest/api/2/issue/${issue.key}")
    .header("Content-Type", "application/json")
    .body([
    fields:[
    (targetFieldName): sourceField.key
    ]
])
   .asString()

2 answers

Suggest an answer

Log in or Sign up to answer
0 votes
Neta Elyakim
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 1, 2018

Hey

 

try this:

package com.adaptavist.sr.cloud.samples.events

def result = get("/rest/api/2/issue/${issue.key}")
.header('Content-Type', 'application/json')
.asObject(Map)

def s = result.fields.assignee
if(s != null){

put("/rest/api/2/issue/
${issue.key}")
.header("Content-Type", "application/json")
.body([
fields:[
customfield_11925 : s
]


])
.asString()

}
0 votes
Aron Gombas _Midori_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
January 30, 2018

This looks weird to me:

(targetFieldName): sourceField.key

You are setting the "key" of the assignee field (not its value) to the  #14047 custom field?

I think this is the culprit. Check what is the body you are PUTting to the REST end-point.

TAGS
AUG Leaders

Atlassian Community Events