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

Hi Rick,




Glide record is not supported / allowed in client side scripts in scoped apps. You have to use GlideAjax to fulfill the requirement.


You can refer the below thread for more info.


Error using GlideRecord in a scoped application in Fuji


Ok so I guess that this error is because GlideRecord is not supported / allowed in client side scripts in scoped app. So we will have to do the AJAX call solution.



So the code you should do is something like this:



  • 1. On change client script:



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


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


          return;  


    }  


     


    var ga = new GlideAjax('GetCustomerData');  


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


      ga.addParam('sysparm_user_id',newValue);  


      ga.getXML(DoSomething);  


         


      function DoSomething(response) {  


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


            g_form.setValue('company',company);  


      }  


 


 


}  




  • 2. Create a Script include, must be client callable and the name should be GetCustomerData [It should match the name used on GlideAjax constructor].



var GetCustomerData = Class.create();  


GetCustomerData.prototype = Object.extendsObject(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')];  


    }  


});  



You can use GetCustomerData to get any data from the customer record, the only thing you should do is change the column on ga.addParam();





Only creating the CS and SI gives me this error:


AbstractAjaxProcessor undefined, maybe missing global qualifier



Antonio Vegue Martinpintado wrote:



[...] the only thing you should do is change the column on ga.addParam();



I assume you mean these?


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


ga.addParam('sysparm_user_id',newValue);




What exactly needs to be changed there? And to which colomn?


Sorry I mixed up a couple of thigs. On the client script you should use:



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


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


ga.addParam('sysparm_user_id',newValue);




I hope this finally works