Checklist for Jira already offers a quite versatile Validator, but sometimes you need a more specific validation. This is where a custom scripted validator comes in play.
Info |
---|
The following scripts are using a ScriptRunner Script Validator. |
...
To validate a Checklist, retrieve the value from the issue, calculate the desired information from the list, then throw an exception if the validation should not pass.
Code Block |
---|
...
| ||
// Retrieve checklist items
def ArrayList<ChecklistItem> existingChecklistValue = (ArrayList<ChecklistItem>) issue.getCustomFieldValue(checklistCustomField);
// Find out if all items have statuses
def allItemsHaveStatuses = existingChecklistValue.size() > 0;
for (ChecklistItem item : existingChecklistValue) {
if (!item.hasStatus()) {
allItemsHaveStatuses = false;
break;
}
}
// Throw exception if not all items have statuses
if (!allItemsHaveStatuses) {
throw new InvalidInputException("All items must have statuses in '" + checklistCustomField.getName() + "' Checklist.");
} |
...
Here is a complete example of a Custom Validator that will verify verifies if at least one item is checked.
Code Block | ||
---|---|---|
| ||
import com.onresolve.scriptrunner.runner.customisers.WithPlugin; @WithPlugin("com.okapya.jira.checklist") import com.okapya.jira.customfields.*; import com.atlassian.jira.component.ComponentAccessor; import com.opensymphony.workflow.InvalidInputException; // Retrieve the Custom Field Type for the Checklist Custom Field def customFieldManager = ComponentAccessor.getCustomFieldManager(); def checklistCustomField = customFieldManager.getCustomFieldObject("customfield_10000"); def checklistCustomFieldType = (ChecklistCFType) checklistCustomField.getCustomFieldType(); // Retrieve AddChecklist items to the existing Checklist def ArrayList<ChecklistItem> existingChecklistValue = (ArrayList<ChecklistItem>) issue.getCustomFieldValue(checklistCustomField); def anyItemChecked = false; // Find out if any item is checked def anyItemChecked = false; for (ChecklistItem item : existingChecklistValue) { if (item.isChecked()) { anyItemChecked = true; break; } } if (!anyItemChecked) { throw new InvalidInputException("At least one item must be checked in '" + checklistCustomField.getName() + "' Checklist."); } |