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.