If you set an MLCS field as mandatory in the Field Configuration Scheme, JIRA will only check if the first level is filled in.
To check if all levels are filled in, you can use the following scripts.
For JIRA 7.x
import org.apache.log4j.Logger import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.opensymphony.workflow.InvalidInputException; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() //10003 is the ID of the MLCS custom field CustomField mlcs = customFieldManager.getCustomFieldObject(new Long('11167')) // log.info("DEBUG MESSAGE: mlcs = $mlcs") def mlcsValues = issue.getCustomFieldValue(mlcs) // log.info("DEBUG MESSAGE: mlcsValues = $mlcsValues") def levels = 0 if (mlcsValues != null){ mlcsValues.each { i -> if (! i.toString().startsWith("com.sourcesense.jira.plugin.customfield.option.SpecialOptionFactory")){ levels++ } } } // Validate the MLCS field has at least 2 levels populated and throw an exception if not if (levels < 2){ InvalidInputException iie = new InvalidInputException("PLEASE NOTE: At least 2 drop-downs are required for " + mlcs) log.info("PLEASE NOTE: At least 2 drop-downs are required for " + mlcs) throw iie }
For JIRA 6.x
import org.apache.log4j.Logger import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.customfields.manager.OptionsManager; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.customfields.option.Option; import com.atlassian.jira.issue.Issue; import com.google.common.collect.Lists; import com.atlassian.jira.issue.IssueManager; import com.atlassian.jira.security.JiraAuthenticationContext; import java.util.ArrayList; import com.atlassian.crowd.embedded.api.User; import com.atlassian.jira.event.type.EventDispatchOption; import com.opensymphony.workflow.InvalidInputException; def log = Logger.getInstance("com.onresolve.jira.groovy.PostFunction") CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() //10003 is the ID of the MLCS custom field CustomField mlcs = customFieldManager.getCustomFieldObject("customfield_10003") ArrayList<String> mlcsValues = (ArrayList<String>) issue.getCustomFieldValue(mlcs) if (mlcsValues != null) { String[] mlcsValuesList = mlcsValues.toArray() // If the MLCS field has 3 levels... if (mlcsValuesList.length != 3){ InvalidInputException iie = new InvalidInputException("Please fill in all levels" + mlcs) log.info("Please fill in all levels " + mlcs) throw iie } }
For JIRA 8.x
import org.apache.log4j.Logger import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.opensymphony.workflow.InvalidInputException; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() //10401 is the ID of the MLCS custom field CustomField mlcs = customFieldManager.getCustomFieldObject("customfield_10401") // log.info("DEBUG MESSAGE: mlcs = $mlcs") def mlcsValues = issue.getCustomFieldValue(mlcs) // log.info("DEBUG MESSAGE: mlcsValues = $mlcsValues") def levels = 0 if (mlcsValues != null){ mlcsValues.each { i -> if (! i.toString().startsWith("com.sourcesense.jira.plugin.customfield.option.SpecialOptionFactory")){ levels++ } } } // Validate the MLCS field has at least 2 levels populated and throw an exception if not //change the number of levels with the one you need if (levels < 2){ log.info("PLEASE NOTE: At least 2 drop-downs are required for " + mlcs) throw invalidInputException = new InvalidInputException("customfield_10401","MLCS is requred") }