Using the following script I am calculating a result field with coloured HTML results that will display. However, as part of the same script I need it to populate another custom field so that JQL searches/dashboards etc can be searched on as there's a known issue using Scripted fields for JQL etc:
The result means that my custom field "Overall RAG list" is populated, but not always with the correct option and my previously working "Overall RAG Status" is now blank. 
Here's the code:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.fields.ImmutableCustomField
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.IssueImpl
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.CustomFieldManager
//Set initial RAG field score to nothing.
int overallRagField = 0;
//Defining all custom fields that the values will be used for scoring.
def qualityField = getCustomFieldValue('Quality RAG Status ');
def costField = getCustomFieldValue('Cost RAG Status ');
def timeField = getCustomFieldValue('Time RAG Status ');
def resourceField = getCustomFieldValue('Resource RAG Status ');
def riskField = getCustomFieldValue('Risk RAG Status ');
def technicalField = getCustomFieldValue('Technical RAG Status ');
def csatField = getCustomFieldValue('Customer Satisfaction RAG Status ');
//Debugging
log.setLevel(Level.DEBUG)
//Check to ensure all fields are NOT null.
if (qualityField == null || costField == null || timeField == null || resourceField == null || riskField == null || technicalField == null || csatField == null)
{
return null;
}
else
{
String result = "";
String colour = "";
//Calculate what the RAG score will be.
switch(qualityField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 2
break;
case "R":
overallRagField = overallRagField + 5
break;
}
switch(costField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 4
break;
case "R":
overallRagField = overallRagField + 8
break;
}
switch(timeField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 5
break;
case "R":
overallRagField = overallRagField + 10
break;
}
switch(resourceField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 2
break;
case "R":
overallRagField = overallRagField + 5
break;
}
switch(riskField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 2
break;
case "R":
overallRagField = overallRagField + 5
break;
}
switch(technicalField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 2
break;
case "R":
overallRagField = overallRagField + 5
break;
}
switch(csatField) {
case "G":
overallRagField = overallRagField + 1
break;
case "A":
overallRagField = overallRagField + 2
break;
case "R":
overallRagField = overallRagField + 5
break;
}
//Calculate RAG colour based on the RAG score
if (overallRagField < 9)
{
colour = "#0FFF00";
result = "G";
}
else
if (overallRagField >= 16)
{
colour = "#FF5555";
result = "R";
}
else
//if (overallRagField == 9||10||11||12||13||14||15)
{
colour = "#FF9E00";
result = "A";
}
log.debug "1"
MutableIssue issueToUpdate = (MutableIssue) issue;
//define the values you want to disable here
log.debug "2"
def optionsToSet = [result];
//to get the custom field, pass the custom field id
log.debug "3"
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def customField = customFieldManager.getCustomFieldObjectsByName("Overall RAG list")[0]
//get the custom field options
log.debug "4"
def optionsManager = ComponentAccessor.getOptionsManager()
def options = optionsManager.getOptions(customField.getRelevantConfig(issue))
log.debug "5"
//set options
options.each {
if(optionsToSet.contains(it.toString())){
log.debug "6"
log.info it.toString()
issueToUpdate.setCustomFieldValue(customField, it)
}
}
if(result != "")
{
return "<span style=\"font-weight: bold ; border: 1px solid grey; border-radius: 4px; padding: 0px 4px; background-color: " + colour + "\">" + result + "</span>";
}
}