- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-11-2023 09:28 AM
Hi Team,
I have a multi line variable in one of our catalog item and users are entering emails like this below
abcd@test.com
We need to validate if above entered emails are in a correct format and also if the entered email exists in the servicenow or not.
If emails format is not correct or entered email does not exists then it should be removed from the variable.
Can anyone help me to achieve this.
Thanks
Ajay
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-11-2023 10:40 AM
Hi @Ajay1998 ,
I have tried in my pdi its working fine.
Email which exist in ServiceNow user table no errors showing
Email not exist showing info email not existing in servicenow
Entered invalid email showing error message
//on change catalog client script on email variable
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var emails = newValue.split('\n');
var validEmails = [];
var invalidEmails = [];
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (isValidEmailFormat(email)) {
validEmails.push(email);
} else {
invalidEmails.push(email);
}
}
if (invalidEmails.length > 0) {
g_form.addErrorMessage('enter valid email');
g_form.setValue('email_enter', validEmails.join('\n'));//change your email field
} else {
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n'));
scriptInclude.getXMLAnswer(function(response) {
if (response === 'false') {
g_form.showFieldMsg('email_enter',"One or more emails do not exist in user profile.",'info'); //change field backend name
// g_form.clearValue('email_enter');
}
});
}
}
function isValidEmailFormat(email) {
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailPattern.test(email);
}
//client callable script include name-MyEmailValidationScriptInclude function name-validateEmails(change details accordingly)
var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateEmails: function() {
var emails = this.getParameter('emails').split('\n');
var valid = true;
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (!this.isEmailExistsInServiceNow(email)) {
valid = false;
break;
}
}
return valid.toString();
},
isEmailExistsInServiceNow: function(email) {
var gr = new GlideRecord('sys_user');
gr.addQuery('email', email);
gr.query();
return gr.hasNext();
}
});
Please mark it helpful and solution proposed.
Thanks,
Anand
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-11-2023 10:40 AM
Hi @Ajay1998 ,
I have tried in my pdi its working fine.
Email which exist in ServiceNow user table no errors showing
Email not exist showing info email not existing in servicenow
Entered invalid email showing error message
//on change catalog client script on email variable
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var emails = newValue.split('\n');
var validEmails = [];
var invalidEmails = [];
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (isValidEmailFormat(email)) {
validEmails.push(email);
} else {
invalidEmails.push(email);
}
}
if (invalidEmails.length > 0) {
g_form.addErrorMessage('enter valid email');
g_form.setValue('email_enter', validEmails.join('\n'));//change your email field
} else {
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n'));
scriptInclude.getXMLAnswer(function(response) {
if (response === 'false') {
g_form.showFieldMsg('email_enter',"One or more emails do not exist in user profile.",'info'); //change field backend name
// g_form.clearValue('email_enter');
}
});
}
}
function isValidEmailFormat(email) {
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailPattern.test(email);
}
//client callable script include name-MyEmailValidationScriptInclude function name-validateEmails(change details accordingly)
var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateEmails: function() {
var emails = this.getParameter('emails').split('\n');
var valid = true;
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (!this.isEmailExistsInServiceNow(email)) {
valid = false;
break;
}
}
return valid.toString();
},
isEmailExistsInServiceNow: function(email) {
var gr = new GlideRecord('sys_user');
gr.addQuery('email', email);
gr.query();
return gr.hasNext();
}
});
Please mark it helpful and solution proposed.
Thanks,
Anand
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-12-2023 01:14 AM
Hi @Anand Kumar P , sorry to bother you again, can we also get the value of that email which does not exist in the ServiceNow.
Your script is working perfectly for me, just I also want to show that invalid email when someone tries to raise a request with invalid email.
Thanks,
Ajay
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-12-2023 05:11 AM
Hi @Ajay1998 ,
//script include replace function isEmailExistsInServiceNow
isEmailExistsInServiceNow: function(emails) {
var gr = new GlideRecord('sys_user');
gr.addQuery('email', 'IN', emails);
gr.query();
var existingEmails = [];
while (gr.next()) {
existingEmails.push(gr.email.toString());
}
return existingEmails;
}
In client side-- replace from script include initilization
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n')); // Pass the array of emails
scriptInclude.getXMLAnswer(function(response) {
var existingEmails = response.split('\n');
if (existingEmails.length > 0) {
g_form.showFieldMsg('email_enter', 'The following emails already exist in the user profile: ' + existingEmails.join(', '), 'info');
}
});
Please mark it solution proposed and helpful.
Thanks,
Anand
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-12-2023 06:45 AM
It is giving me JavaScript error
Script Include side code
var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateEmails: function() {
var emails = this.getParameter('emails').split('\n');
//var valid = true;
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
this.isEmailExistsInServiceNow(email);
}
},
isEmailExistsInServiceNow: function(emails) {
var gr = new GlideRecord('sys_user');
gr.addQuery('email', 'IN', emails);
gr.query();
var existingEmails = [];
while (gr.next()) {
existingEmails.push(gr.email.toString());
}
return existingEmails;
}
});
Client Script Side Code:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var emails = newValue.split('\n');
var validEmails = [];
var invalidEmails = [];
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (isValidEmailFormat(email)) {
validEmails.push(email);
} else {
invalidEmails.push(email);
}
}
if (invalidEmails.length > 0) {
g_form.addErrorMessage(invalidEmails.toString() + ' is not a valid email');
g_form.setValue('email_addresses_to_add', validEmails.join('\n'));
} else {
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n')); // Pass the array of emails
scriptInclude.getXMLAnswer(function(response) {
var existingEmails = response.split('\n');
if (existingEmails.length > 0) {
g_form.showFieldMsg('email_addresses_to_add', 'The following emails already exist in the user profile: ' + existingEmails.join(', '), 'info');
}
});
}
}
function isValidEmailFormat(email) {
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailPattern.test(email);
}
Please help me.