Using Scriptrunner I'm trying to add a custom scripted validator when creating a new issue to check whether or not a customfield contains a valid email address.
I only want it to validate the email if the Request Type matches X.
I started with this example script as the base in order to get the Reqest Type name: https://library.adaptavist.com/entity/get-sd-requesttype
This is my script:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.servicedesk.api.requesttype.RequestTypeService
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.atlassian.servicedesk.internal.customfields.origin.VpOrigin
import com.atlassian.servicedesk.internal.feature.customer.request.requesttype.CachedImmutableRequestTypeImpl
@WithPlugin("com.atlassian.servicedesk")
@PluginModule
RequestTypeService requestTypeService
def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def customFieldManager = ComponentAccessor.customFieldManager
def requestTypeCustomField = customFieldManager.getCustomFieldObjects(issue).findByName('Customer Request Type')
def requestTypeKey = (issue.getCustomFieldValue(requestTypeCustomField) as VpOrigin)?.requestTypeKey
def query = requestTypeService.newQueryBuilder().issue(issue.id).build()
def requestTypes = requestTypeService.getRequestTypes(currentUser, query).results
def requestType = requestTypes.find { (it as CachedImmutableRequestTypeImpl).key == requestTypeKey }
def requestTypeName = requestType.getName()
if (requestTypeName == "X") {
// Get the value of the custom field
def vendorContactEmail = issue.getCustomFieldValue(16815)
// Validate the email address
if (isValidEmail(vendorContactEmail)) {
return true // Email is valid
} else {
return false // Email is invalid
}
} else {
return true // Request type is not "X", so don't validate the email
}
// Email validation function
boolean isValidEmail(String email) {
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}\$"
return email?.matches(emailRegex)
}
The error I keep getting is:
java.lang.NullPointerException: Cannot invoke method getName() on null object
I'm not sure why it thinks requestType is a null object. Is it because the ticket hasn't been created yet?
Thanks for any assistance offered.