Skip to main content
Skip table of contents

How to update the RAG Status via ScriptRunner

Overview

This section shows the instructions to use the ScriptRunner to update the RAG Status field automatically when the issue is overdue.

The Rag Status field doesn't show on the Automation for Jira.

Demonstration

Paste the following code into the Inline script field. This script will

  1. execute JQL query to find a list of overdue issues and

  2. set the RAG Status field of each matching issue to Red.

CODE
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import org.apache.log4j.Logger
import org.apache.log4j.Level
  
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)

def userManager = ComponentAccessor.getUserManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.customFieldManager
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchService = ComponentAccessor.getComponent(SearchService.class)

// edit this query to suit
def query = jqlQueryParser.parseQuery("project = LOOKUP and dueDate < now()");

def results = searchService.search(user, query, PagerFilter.getUnlimitedFilter())
log.debug("Total issues: ${results.total}")

results.getResults().each {result ->
	def issue = issueManager.getIssueObject(result.id)
    //Set the name of the custom field to update
    final customFieldName = 'Result Status'
    
    def customField = customFieldManager.getCustomFieldObjects(issue).findByName(customFieldName)
   	assert customField : "Could not find custom field with name $customFieldName"  
    
    def existingValue = (String) issue.getCustomFieldValue(customField)
    
    //Set the new value of the field
	def newValue = 'Red'	
    
	def fieldConfig = customField.getRelevantConfig(issue)
	def option = ComponentAccessor.optionsManager.getOptions(fieldConfig)?.find {
    	it.toString() == newValue 
	}
	
	issue.setCustomFieldValue(customField, option)
	issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)
    
    log.debug("Updated ${issue.key} from ${existingValue} to ${newValue}")
}


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.