The CreatorCon Call for Content is officially open! Get started here.

Auto-populate fields from selected user

Bhadley
Kilo Expert

Hi all,

 

A bit of a beginner when it comes to javascript so I was hoping someone may have a recommendation for me. I've also found various tidbits of information out in the wiki on field auto-populating on forms but couldnt figure out how to piece the information together to make a workable code.

 

I have a form in the service catalog for employee changes. The first field in the form is a reference field to sys_user so that a user can be chosen that will need the changes. Below that I have reference fields for the old information such as department, manager, etc. What I would like to accomplish is that based on the user chosen in the field it will auto populate the rest of the fields with their current information. In the past we have used similar bits of code such as below on each variable to auto populate fields but gs.getUserID grabs the user filling out the form.

 

javascript:var id = gs.getUserID();

var user = new GlideRecord('sys_user');

user.addQuery("sys_id", id);

user.query();

var rc = "";

if (user.next())

      rc = user.manager;

rc;

 

I am guessing I may need to do a Catalog Client Script using onCellEdit or onLoad? But I cant seem to find the correct setup of script to pull the information based on the Reference Lookup sys_user variable of name. Any help or guidance would be much appreciated, thanks!

1 ACCEPTED SOLUTION

justin_drysdale
Mega Guru

You are on the right track!


Use an onChange catalog client script.   It should work for your needs.



var id = gs.getUserID(); is only going to give you the person that is using the form.   This person may or may not be the same as the person who is in the first field... so it is better to get the value of the first field instead.



"I have a form in the service catalog for employee changes. The first field in the form is a reference field to sys_user so that a user can be chosen that will need the changes"



Try this:



function onChange(control, oldValue, newValue, isLoading) {


var id = g_form.getValue('u_first_field');//replace 'u_first_field' with the name of your reference field.


var user = new GlideRecord('sys_user');


          user.addQuery('sys_id',id);


          user.query();


if ( user.next() ) {


  g_form.setValue('u_manager_field', user.manager);


  g_form.setValue('u_last_name', user.last_name);


  g_form.setValue('u_whatever', user.field_on_sys_user);


}


}



For the onChange script variable, choose the user reference field ( the first field on the form ).


View solution in original post

21 REPLIES 21

Thanks Shishir,




But I need it via script(Catalog client script).



Can u help me in that aspect?


Hi Anup,



do you have to do it client side or can it be done once you press save or upload?


In case you want to do it after you save the record you can use a business rule, take the value from the user's country and manage the mapping, preferably using a mapping table. Then you can set the value of the new field.


In case you need to do it on the fly, when the user field is populated, then I would suggest you do it with a onchange client script that calls an asynchronous ajax script include where you have the logic to retrieve the value of the new field. The ajax call will return the value of the fulfillment group that will be then populated within the client script. Hope this helps. You can find plenty of examples in the community and in the documentation on how to call async ajax from a client script.