User Tools

Site Tools


validators

Scripted Validators

Following scripts can be used for scripted validators within the workflow

Verify project name

issue.projectObject.name == "My First Project Name"

Require Value in FIELD2 if FIELD1 = 'Yes'

if ( cfValues['FIELD1']?.value == 'Yes') { 
    if ( cfValues['FIELD2'] ) {
        return true
    } 
    else return false
     }
 else return true

Require Value in DATEFIELD2 greater than "NOW" if FIELD1 is set

Date today123 = new Date()
if ( cfValues['FIELD1'] ) { 
    if ( cfValues['DATEFIELD2'].getTime() > today123.getTime() ) {
        return true
    } 
    else return false
     }
 else return true

Check if field equals some string

def selectedSegment = cfValues['Segment']
def selectedSegmentString = selectedSegment.toString()
if ( selectedSegmentString.equals("Some String") ){
    // do something here
 
}

Verify if custom field value is 5 characters long

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.IssueManager;
 
def customfield_ID = "customfield_11700"
def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cField = customFieldManager.getCustomFieldObject(customfield_ID)
def cFieldValue = issue.getCustomFieldValue(cField).toString()
 
 
if (cFieldValue.size() != 5){
    return false
}
else{
    return true
}

Verify if any other tickets have the same dates as requested

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.datetime.DateTimeFormatUtils
import org.apache.commons.lang.time.DateUtils
import java.text.SimpleDateFormat
import java.util.Date.*
import java.lang.String.*
//logging
import org.apache.log4j.Logger
import org.apache.log4j.Level
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
// this function returns list of issues for JQL
 
def findIssues(String jqlQuery) {
    def issueManager = ComponentAccessor.issueManager
    def user = ComponentAccessor.jiraAuthenticationContext.user
    def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class)
    def searchProvider = ComponentAccessor.getComponent(SearchProvider.class)
    def query = jqlQueryParser.parseQuery(jqlQuery)
    def results = searchProvider.search(query, user, PagerFilter.unlimitedFilter)
 
    results.issues.collect { issue -> issueManager.getIssueObject(issue.id) }
 
}
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def isd = cfValues['OD Start Date']
def ied = cfValues['OD End Date']
def ie = cfValues['OD Environment']
def inputStartDate
def inputEndDate
def inputEnvironment = ie.toString()
def issues
if (! isd || ! ied){
    log.debug("Input Start date or Input End Date not available")
}else{
    inputStartDate = isd.format("YYYY-MM-dd").toString()
    inputEndDate = ied.format("YYYY-MM-dd").toString()
    issues = findIssues('project = ODRSRV  AND "OD Environment" = '+ inputEnvironment +'  AND (("OD Start Date" <= '+ inputStartDate +' AND "OD End Date" >= '+ inputEndDate +') OR ("OD Start Date" <= '+ inputEndDate +' AND "OD Start Date" >= '+ inputStartDate +') OR ("OD Start Date" >= '+ inputStartDate +' AND "OD End Date" <= '+ inputEndDate +') OR ("OD Start Date" <= '+ inputStartDate +' AND "OD End Date" >= '+ inputEndDate +'))' )
}
log.debug("inputStartdate: "+inputStartDate)
log.debug("inputEndDate: "+inputEndDate)
log.debug("inputEnvironment: "+inputEnvironment)
log.debug("issues: "+issues+" for "+inputEnvironment)
 
if ( ! issues){
    return true
	log.debug("Issues is " + issues)
}else{
    return false
    log.debug("Issues is " + issues)
}

Validate user changed the OD Environment field if it was "None" previously

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import org.apache.log4j.Logger
import org.apache.log4j.Level
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
 
Issue issue = issue
 
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def customField = customFieldManager.getCustomFieldObjectByName("OD Environment")
def originalIssue = issueManager.getIssueObject(issue.id)
 
def originalValue = originalIssue.getCustomFieldValue(customField).toString()
def newValue = issue.getCustomFieldValue(customField).toString()
 
log.debug("originalIssue ${originalValue}")
log.debug("newIssue ${newValue}")
 
if (originalValue.equals("null") ){
	if ( newValue != originalValue ) {
    	log.debug("true -> User changed the field")
        return true
    }else{
        log.debug("false -> User must changed field")
        return false
    }    
}else{
 
	log.debug("true -> OD Environment is not null ${originalValue}")
    return true
 
}

Validate if user is allowed to change the OD Environment field

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import org.apache.log4j.Logger
import org.apache.log4j.Level
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
 
Issue issue = issue
 
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def customField = customFieldManager.getCustomFieldObjectByName("OD Environment")
def originalIssue = issueManager.getIssueObject(issue.id)
 
def originalValue = originalIssue.getCustomFieldValue(customField).toString()
def newValue = issue.getCustomFieldValue(customField).toString()
 
log.debug("originalIssue ${originalValue}")
log.debug("newIssue ${newValue}")
 
if ( newValue != originalValue ) {
    if (! originalValue.equals("null") ){
    	log.debug("false -> Changing from not None")
        return false
 
    }else{
        log.debug("true -> changing from none")
        return true
    }
}else{
    log.debug("true -> not changing")
    return true
}

Allow only specific users in project ABC or users in a group "JIRAGROUP" to create issues validator

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
def groupManager = ComponentAccessor.getGroupManager()
 
(issue.projectObject.key == 'ABC' && issue.issueType.name == 'Bug' && currentUser.name in ["XYZ", "TEST"] ) || groupManager.isUserInGroup(currentUser, "JIRAGROUP")

Only allow users in group "users" to execute this action

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
def groupManager = ComponentAccessor.getGroupManager()
 
groupManager.isUserInGroup(currentUser, "users")

Check if user is in group "users" or project role "Developers" to execute this action

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.security.roles.ProjectRoleManager
 
def projectManager = ComponentAccessor.projectManager
def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)
def role = projectRoleManager.getProjectRole("Developers")
 
def groupManager = ComponentAccessor.getGroupManager()
 
if (groupManager.isUserInGroup(currentUser, "users") || projectRoleManager.isUserInProjectRole(currentUser, role, issue.getProjectObject())){
	return true
}

Check if cascading child drop down is set to "None"

The following script was found on Atlassian community here: How to check the second value of a cascading select list in a custom field Use the Custom Validator for this script-runner script.

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.opensymphony.workflow.InvalidInputException
 
def issue = issue as MutableIssue
def cf = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("CascadingSelect")
def cfValue = issue.getCustomFieldValue(cf) as HashMap
 
def parentOption = cfValue.values().getAt(0)?.value
def childOption = cfValue.values().getAt(1)?.value
 
if (!childOption) {
    throw new InvalidInputException("Child option is Null")
}
validators.txt · Last modified: 2019/02/13 09:10 by root