onChange Client Script not working on Form.

jasonjones
Giga Contributor

Creating a form with an independent Application and I'm getting the following error.find_real_file.png

I have the following onChange client script.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}

//Type appropriate comment here, and begin script below...
var gr = new GlideRecord('sys_user');

if (gr.get(newValue)) {
g_form.setValue('u_email_address', gr.email);
// g_form.setValue('u_sec_email_address', gr.u_email);
}
}

I have also gone and created under the sys_properties.list  a new 

find_real_file.png

What am I missing?  Obviously, I have other forms that work when the application is Global.  I have also toggled the "Isolate script" without success. 

find_real_file.png

Thanks.

Jason

1 ACCEPTED SOLUTION

Try this

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}

var requestedfor = g_form.getReference('caller_id', getDetails); //Callback

function getDetails(requestedfor) {
if (requestedfor)
g_form.setValue('u_email_address', requestedfor.email);
g_form.setValue('u_x_ucid', requestedfor.u_ucid);
}



//Type appropriate comment here, and begin script below...
//var gr = new GlideRecord('sys_user');

//if (gr.get(newValue)) {
// g_form.setValue('u_email_address', gr.email);
// g_form.setValue('u_sec_email_address', gr.u_email);

}

Please mark my response as correct and helpful if it helped solved your question.
-Thanks

View solution in original post

17 REPLIES 17

Steven Parker
Giga Sage

Best practice is to avoid using GlideRecord in a client script.  I would suggest using a Callback script to accomplish this if the field you working off of is a Reference Field.

Here is one we use to load the initials, department, and user_id for a person chosen in the reference field Requested For:

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }

   	var requestedfor = g_form.getReference('requested_for', getInitials);  //Callback function is getInitials this allows the browser to continue to run through the script.  
  
  function getInitials(requestedfor) {  
   if(requestedfor)
            g_form.setValue('requested_for_initials', requestedfor.u_initials);
	        g_form.setValue('requested_for_department', requestedfor.department);
	        g_form.setValue('requested_for_userid', requestedfor.user_name);
}

   
}

Please mark this response as correct and/or helpful if it assisted you with your question.
Steven

Thanks Steven,

Does the following look correct? The commented out below if for comparison and will be deleted if correct.

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}

var requestedfor = g_form.getReference('caller_id', getDetails); //Callback

function getDetails(callerid) {
if (callerid)
g_form.setValue('u_email_address', gr.email);
g_form.setValue('u_x_ucid', gr.u_ucid);
}



//Type appropriate comment here, and begin script below...
//var gr = new GlideRecord('sys_user');

//if (gr.get(newValue)) {
// g_form.setValue('u_email_address', gr.email);
// g_form.setValue('u_sec_email_address', gr.u_email);

}

jasonjones
Giga Contributor

Well, it didn't error out, but also didn't load any information. 

Jason

Try this

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}

var requestedfor = g_form.getReference('caller_id', getDetails); //Callback

function getDetails(requestedfor) {
if (requestedfor)
g_form.setValue('u_email_address', requestedfor.email);
g_form.setValue('u_x_ucid', requestedfor.u_ucid);
}



//Type appropriate comment here, and begin script below...
//var gr = new GlideRecord('sys_user');

//if (gr.get(newValue)) {
// g_form.setValue('u_email_address', gr.email);
// g_form.setValue('u_sec_email_address', gr.u_email);

}

Please mark my response as correct and helpful if it helped solved your question.
-Thanks