Skip to main content
Example scripts
arrow icon
To homepage
Jira
Cloud icon
Cloud

Update Assets field from AQL based on another Assets field value

Created 1 year ago, Updated 1 day(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira
Language |
groovy
final MODEL_ASSETS_CUSTOMFIELD_ID = 'customfield_12832'
final PHONES_ASSETS_CUSTOMFIELD_ID = 'customfield_12834'
final ATTRIBUTE_NAME_OF_MODEL_IN_PHONES = 'Model Name'

def issueKey = issue.key

def getModelNameResponse = get('/rest/api/3/issue/' + issueKey)
        .header('Content-Type', 'application/json')
        .queryString("expand", "${MODEL_ASSETS_CUSTOMFIELD_ID}.cmdb.attributes")
        .asObject(Map)

assert getModelNameResponse.status == 200

if (!getModelNameResponse.body.fields[MODEL_ASSETS_CUSTOMFIELD_ID]) {
    logger.warn "No value in Assets field: $MODEL_ASSETS_CUSTOMFIELD_ID"
    return
}

def workspaceId = getModelNameResponse.body.fields[MODEL_ASSETS_CUSTOMFIELD_ID].first().workspaceId
def objectSchemaId = getModelNameResponse.body.fields[MODEL_ASSETS_CUSTOMFIELD_ID].first().objectType.objectSchemaId
def modelName = getModelNameResponse.body.fields[MODEL_ASSETS_CUSTOMFIELD_ID].first().label
def aql = """
    "objectSchemaId" = "$objectSchemaId" and "$ATTRIBUTE_NAME_OF_MODEL_IN_PHONES" = "$modelName"
"""

def aqlQueryResponse = post("https://api.atlassian.com/jsm/assets/workspace/$workspaceId/v1/object/aql")
        .header('Content-Type', 'application/json')
        .basicAuth("user@example.com", "<api_token>")
        .body([
                qlQuery: aql
        ])
        .asObject(Map)

assert aqlQueryResponse.status == 200

def matchedPhoneAssetIds = aqlQueryResponse.body.values*.globalId
def updatePhonesAssetsFieldResponse = put('/rest/api/3/issue/' + issueKey)
        .header('Content-Type', 'application/json')
        .body([
                fields:[
                        (PHONES_ASSETS_CUSTOMFIELD_ID): matchedPhoneAssetIds.collect { id -> [id: id] }
                ]
        ]).asString()

assert updatePhonesAssetsFieldResponse.status == 204
Having an issue with this script?
Report it here