- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 10:16 AM
Hi all,
I'm creating a form for new hires, and on the form I want to have 2 fields where the user enters the new employee's ID #. The intention of the 2nd field is to ensure that they enter the number correctly, much like when you have to repeat an email address or a password on banking stuff.
the 2 variables that need to match are:
emp_workday_id
emp_workday_id2
So the user first enters the value in the first field, and then needs to add the value again in the 2nd field (emp_workday_id2). What need is, if the fields do match, then it triggers a GlideAjax to lookup the user record to populate some other fields on the form. I have this part in place and working.
If the 2 fields do not match, I need it to stop and give an alert that the 2 fields do not match. Should I be putting this all in one catalog client script? I'm thinking yes, but please advise.
function onChange(control, oldValue, newValue, isLoading) {
if (newValue == ''){
g_form.setValue('first_name','');//name of field on form you want to auto populate
g_form.setValue('last_name','');//name of field on form you want to auto populate
g_form.setValue('supervisor','');//name of field on form you want to auto populate
g_form.setValue('emp_location','');//name of field on form you want to auto populate
}
var ga = new GlideAjax('u_employee_details_lookup_Ajax');//name of script include
ga.addParam('sysparm_name', 'getEmployeeDetails');//name of function on script include
ga.addParam('sysparm_user', g_form.getValue('emp_workday_id2'));//name of field on form triggering call
ga.getXML(EmployeeDetailsLookup); // Always try to use asynchronous (getXML) calls rather than synchronous (getXMLWait)
}
// Callback function to process the response returned from the server
function EmployeeDetailsLookup(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var answers = answer.split(',');
g_form.setValue('first_name',answers[0]);
g_form.setValue('last_name',answers[1]);
g_form.setValue('supervisor',answers[2]);
g_form.setValue('emp_location',answers[3]);
}
now for the part that ensure the 2 fields I match I need help folding in something like this?
var ID1
var ID2
ID1=g_form.getValue(emp_workday_id);
ID2='current.emp_workday_id2';
//then something like
if ID1=ID2//then it goes on to the GlideAjax line in my script above
else sMessage = 'Your entry does not match, please check the Workday ID number and re-enter.'; //and stop them from moving forward
am I headed in the right direction?
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 07:44 PM
in this script showFieldMsg() syntax is wrong, please change it something like, and it should display the messge.
g_form.showFieldMsg('emp_workday_id2' ,'Your entry does not match, please check the Workday ID # and re-enter');
Also, in earlier provided client script if condition has to be correct.
if (newValue == g_form.getValue('emp_workday_id')) field name is not in quotes
please check if this helps.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 11:22 AM
and as well to clarify...this is now an onChange client script for the 2nd Workday # field, which is "emp_workday_id2". So see the line in BOLD below, I'm trying to say if the entry into the "emp_workday_id2" field is the same as the value that was already entered into the "emp_workday_id" field, then it will move on to the GlideAjax. And if not, it will stop and alert.
function onChange(control, oldValue, newValue, isLoading) {
if (newValue == ''){
g_form.setValue('first_name','');//name of field on form you want to auto populate
g_form.setValue('last_name','');//name of field on form you want to auto populate
g_form.setValue('supervisor','');//name of field on form you want to auto populate
g_form.setValue('emp_location','');//name of field on form you want to auto populate
}
{
if (newValue == g_form.getValue(emp_workday_id));{ //so if this is true I want it to move on to the GlideAjax
}
else alert('Your entry does not match, please check the Workday ID number and re-enter.');
g_form.clearValue('ID2', ''); as is, the system is not liking this here
var ga = new GlideAjax('u_employee_details_lookup_Ajax');//name of script include
ga.addParam('sysparm_name', 'getEmployeeDetails');//name of function on script include
ga.addParam('sysparm_user', g_form.getValue('emp_workday_id2'));//name of field on form triggering call
ga.getXML(EmployeeDetailsLookup); // Always try to use asynchronous (getXML) calls rather than synchronous (getXMLWait)
}
// Callback function to process the response returned from the server
function EmployeeDetailsLookup(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var answers = answer.split(',');
g_form.setValue('first_name',answers[0]);
g_form.setValue('last_name',answers[1]);
g_form.setValue('supervisor',answers[2]);
g_form.setValue('emp_location',answers[3]);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 11:27 AM
Thought it would be a little complex script, but It can be done in a single client script. I will provide you that script.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 11:44 AM
thanks Arindam,
before you get too far I'm being told there's a change in the flow and the scenarios are now slightly different.
Scenario 1 = user enters a value for the first workday field, "emp_workday_id". I've changed the client script that runs the GlideAjax back to onChange for this field, so it then goes to the sys_user table and looks to see if there's a match, and if there is populates the fields like we had originally.
Scenario 2 = if the GlideAjax does NOT find a match on the sys_user table then stops with the alert, displays the "Re-enter Workday..." field "emp_workday_id2", and then there we do the match.
If the 2 fields do not match, then there's is an alert to tell them to check their entries.
If the 2 fields do match, then we know there is no user record for this workday ID number, so this new hire does not have a user record in ServiceNow yet, and we are going to gather as much info on this new hire form, and then have an onSubmit client script that creates the new user record with the info that user has just entered.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 11:47 AM
So I believe I'm looking at the script include, because that what is actually looking up the sys_user table...so I need my "else" to be in here? see below in bold
var u_New_Hire_Scripts_Ajax = Class.create();
u_New_Hire_Scripts_Ajax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEmployeeDetails: function(){
var retVal; // Return value
var user = this.getParameter('sysparm_user');
var detailsRec = new GlideRecord('sys_user');//table where desired variable lives
detailsRec.addQuery('user_name',user);
detailsRec.query();
// Query user records
if(detailsRec.next()) //if there is match, it does the retVal. is this where I need to return something saying there is no match and to trigger the "emp_workday_id2" field?
{
retVal = detailsRec.first_name+','+detailsRec.last_name+','+detailsRec.manager+','+detailsRec.location;
}
return retVal;
},
});

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2017 12:07 PM
Fine Tuned the client script, please check if this helps.
function onChange(control, oldValue, newValue, isLoading) {
if (newValue == ''){
g_form.setValue('first_name','');//name of field on form you want to auto populate
g_form.setValue('last_name','');//name of field on form you want to auto populate
g_form.setValue('supervisor','');//name of field on form you want to auto populate
g_form.setValue('emp_location','');//name of field on form you want to auto populate
}
if (newValue == g_form.getValue(emp_workday_id)){ //so if this is true I want it to move on to the GlideAjax
var ga = new GlideAjax('u_employee_details_lookup_Ajax');//name of script include
ga.addParam('sysparm_name', 'getEmployeeDetails');//name of function on script include
ga.addParam('sysparm_user', g_form.getValue('emp_workday_id2'));//name of field on form triggering call
ga.getXML(EmployeeDetailsLookup); // Always try to use asynchronous (getXML) calls rather than synchronous (getXMLWait)
}
else {
alert('Your entry does not match, please check the Workday ID number and re-enter.');
g_form.clearValue('ID2', ''); //as is, the system is not liking this here
}
}
// Callback function to process the response returned from the server
function EmployeeDetailsLookup(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var answers = answer.split(',');
g_form.setValue('first_name',answers[0]);
g_form.setValue('last_name',answers[1]);
g_form.setValue('supervisor',answers[2]);
g_form.setValue('emp_location',answers[3]);
}