ScriptRunner for Jira (Cloud)

You might find Smart Checklist integration with ScripRunner useful for updating checklists using automated scripts. Below you can find the example of adding a checklist to a Jira Issue by means of updating Issue Property with the key com.railsware.SmartChecklist.checklist. 

Since we use Issue Properties as primary memory storage for checklists, it's required to update Issue Property to have checklists updated with any type of automation. Updating "Checklists" Custom Field won't bring the desired result.

Basic Example

Code

ScriptRunner
def issueKey = 'SAM-8'
def propertyKey = 'com.railsware.SmartChecklist.checklist'
def propertyValue  = '"- ToDo List\\n+ Checked\\nx Skipped\\n~ In Progress\\n# Another ToDo List\\n- Unchecked\\n> Quote line 1 https://rw.rw\\n> Quote line 2\\n> Quote line 3\\n"'

def result = put('/rest/api/2/issue/' + issueKey + '/properties/' + propertyKey)
        .header('Content-Type', 'application/json')
        .body(propertyValue)
        .asString()
if (result.status == 204) {
    return 'Success'
} else {
    return "${result.status}: ${result.body}"
}


Result


Set Checklist depending on Custom Field Value after Issue Creation

If you want the specific Checklist appended to your newly created ticket depending on the other Custom field value - you can easily do it by adding Script Runner Post Function to your Create Ticket workflow transition.

Check it out!

Assume that you have a custom field named "Environment" with 2 values: Production/Staging. So you expect that while adding a new issue - you'll have a proper checklist assigned.


Implementation flow

  1. Go To Workflow Editor
  2. Choose "ScriptRunner Post-Function" (Runs a script in a post-function, or a built-in script)
  3. Choose "Run Script" (Run arbitrary code on transition)
  4. Add inline Script Code





    ScriptRunner
    //package com.adaptavist.sr.cloud.samples.events
    def issueKey = issue.key
    def newSummary = 'Updated by a script'
    def cfName = 'Environment'
    
    //get custom field of "seelct" type
    def customFields = get('/rest/api/2/field')
            .asObject(List)
            .body
            .findAll { (it as Map).custom } as List<Map>
            
    def cfEnvironmentId = customFields.find { it.name == cfName }?.id
    def cfEnvironment = issue.fields[cfEnvironmentId]
    
    //get custom field
    def environment = cfEnvironment['value'] as String
    
    def propertyKey = 'com.railsware.SmartChecklist.checklist'
    def propertyValue
    
    //compare field values
    if (environment == 'Production') { 
        propertyValue  = '"- ToDo List\\n+ Checked\\nx Skipped\\n~ In Progress\\n# Another ToDo List\\n- Unchecked\\n> Quote line 1 https://rw.rw\\n> Quote line 2\\n> Quote line 3\\n"'
    }else if (environment == 'Staging') { 
        propertyValue  = '"- Uno\\n+ Dos\\nx Tres\\n~ Quatro\\n"'
    }
    logger.info('property' + environment)
    
    def result = put('/rest/api/2/issue/' + issueKey + '/properties/' + propertyKey)
            .header('Content-Type', 'application/json')
            .body(propertyValue)
            .asString()
    if (result.status == 204) {
        return 'Success'
    } else {
        return "${result.status}: ${result.body}"
    }
  5. Save the script 
  6. Publish workflow

Result

The needed checklist is created.





For any questions or feature requests contact us: smartchecklist@railsware.com