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

Auto populate reference field based on other reference field

rickw1
Giga Contributor

Hi there,

I'm figuring out the best way to do this..

In my form, I have 2 fields: caller and hospital.

Caller refers to the users table, Hospital refers to the company table.

My goal is: whenever I populate the caller field, the system needs to lookup the hospital of that caller and needs to auto-populate that.

Example: Customer X is part of Hospital X. Customer X is the caller so will be populated in the caller field. The system recognizes that Customer X is part of Hospital X so hospital will be Hospital X.

customer_hospital.png

Hope you guys can help me out!

1 ACCEPTED SOLUTION

rickw1
Giga Contributor

We got it working!



Client script:


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


    if (isLoading || newValue == '') {


          return;


    }


   


    var ga = new GlideAjax('GetCustomerData');


  ga.addParam('sysparm_name','getFieldValue');


  ga.addParam('sysparm_field','u_reference_1');


  ga.addParam('sysparm_user_id', g_form.getValue('caller'));


      ga.getXML(DoSomething);


       


      function DoSomething(response) {


            var company = response.responseXML.documentElement.getAttribute("answer");


            g_form.setValue('company',company);


      }


}



Script include:


var GetCustomerData = Class.create();


GetCustomerData.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {


    getFieldValue: function() {


              var user = new GlideRecord('x_medt2_ihs_customers');


              user.get(this.getParameter('sysparm_user_id'));


              if(! user.sys_id){


                                return false;


              }


        return user[this.getParameter('sysparm_field')];


    }


});



Thanks everybody for the great help on this!


View solution in original post

58 REPLIES 58

also you need to change the caller to caller_id on the g_form.setValue



so g_form.setValue('company', caller.u_reference_1)


should be g_form.setValue('company', caller_id.u_reference_1)


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


    var caller_id = g_form.getReference('caller', setHospital);  


}  


function setHospital(caller_id)  


{    


  g_form.setValue('u_hosptial', caller_id.u_reference_1);


}  



Doesn't work. Nothing happens.



(Sorry, still new on scripting)


Try this...



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


    if (isLoading || newValue == '') {


    return;


  }


    var gr = new GlideRecord(<your_caller_table>);


    gr.addQuery('caller', newValue);


    gr.query();


    if(gr.next()){


  g_form.setValue('company', gr.u_reference_1);


  }


}


I get this error: onChange script error: ReferenceError: x_medt2_ihs_customers is not defined function (){var o=i(m,arguments);return l.apply(n,o)}


Hi community!



To populate that field when you are filling the form, you will need a client script on change. This would be the code:



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


    var caller = g_form.getReference('caller_id', getHospital); // getHospital is our callback function


}


function getHospital(caller) { //reference is passed into callback as first arguments


  g_form.setValue('company',caller.u_hospital) //Im guessing that the column name of the field Hospital on Customer form is u_hopital. Check the dicctionary to be sure!


}



I hope it helps!



Regards,


Antonio.