Get Display Value for Client Script

KristyS
Kilo Guru

I've created a client script to populate fields onChange from a custom table.   The field is returning a sys_id and not locating the vendor name.  

How can I return the display value for the sys_id

Here is my client script:


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

        var existingVendor = g_form.getValue('existing_vendor');
 
    var venRec = new GlideRecord ('u_business_impact_analysis');   //Look at BIA table and find existing vendor
    venRec.addQuery('u_vendor_name', existingVendor);
    venRec.query(mycallback);
   
  function mycallback(venRec){
  while (venRec.next()){
     
                //Populate form txt fields from BIA table.
                            g_form.setValue('system_owner', venRec.u_system_owner);
                            g_form.setValue('asset_type', venRec.u_asset_type);
                            g_form.setValue('product_scope', existingVendor);  
                  }

  }    
 
}

Table:

The Vendor Name is a string field for when a new vendor is entered and i'm attempting to retrieve the display value of this field in the client script.  

find_real_file.png

1 ACCEPTED SOLUTION

KristyS
Kilo Guru

I found a solution to get the display values as needed.     I had to set the value for each variable in an if statement.



Thank you for your assistance.  



find_real_file.png


View solution in original post

11 REPLIES 11

Hi Kristy,



Looking @ the provided table screenshot Vendor Name is a string field and you trying to pass sys_id in that. You need to have GlideAjax to fetch the data.


       


    var existingVendor = g_form.getValue('existing_vendor');   Is existing_vendor a reference field?
    var venRec = new GlideRecord ('u_business_impact_analysis');   //Look at BIA table and find existing vendor
    venRec.addQuery('u_vendor_name', existingVendor); If existing_vendor is a reference field then you are passing sys_id to string field since Vendor Name is a string field
    venRec.query(mycallback);    
  function mycallback(venRec){
  while (venRec.next()){
                //Populate form txt fields from BIA table.
                            g_form.setValue('system_owner', venRec.u_system_owner); // You need to use getDisplayValue() but not sure if it works client scripting
                            g_form.setValue('asset_type', venRec.u_asset_type);
                            g_form.setValue('product_scope', existingVendor);  
                  }


  }    



I think it's recommended to use GlideAjax to fetch the data from server side, please refer this on how to fetch multiple data using GlideAjax: GlideAjax - ServiceNow Wiki


Shishir Srivast
Mega Sage

Hi Kristy,



Instead of GlideRecord, please user getReference to get the details of existing_vendor. please find more details here: GlideForm (g form) - ServiceNow Wiki



Please find the Example below:


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


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


}


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


                            g_form.setValue('system_owner', caller.u_system_owner);


                            g_form.setValue('asset_type', caller.u_asset_type);


                            g_form.setValue('product_scope', existingVendor);


}


KristyS
Kilo Guru

I've got most of this working by calling the sys_id without single quotes around my variable.        



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


                                                                 
        var existingVendor = g_form.getValue('existing_vendor');
                                                                                                                                                             
        var venRec = new GlideRecord ('u_business_impact_analysis');   //Look at BIA table and find existing vendor
                venRec.addQuery('sys_id', existingVendor);
                venRec.query(mycallback);


                    function mycallback(venRec){    
                      while (venRec.next()){
                                                                                                                             
                                                                                                                                                                                             
              //Populate form txt fields from BIA table.
                    g_form.setValue('system_owner', venRec.u_system_owner);
                    g_form.setValue('product_scope', venRec.u_product_scope);
                //g_form.setValue('asset_type', venRec.u_asset_type);
                //g_form.setValue('data_classification', venRec.u_data_classification);
                //g_form.setValue('vendor_rating', venRec.u_vendor_rating);
                //g_form.setValue('product_rating', venRec.u_product_rating);
                    g_form.setValue('vendor_services_provided', venRec.u_vendor_services_provided);
                    g_form.setValue('rpo', venRec.u_rpo);  
             
              }


        }                                                              


  }



The next issue, how do I get the select boxes to populate as the .getDisplayValue() is not working in the client script.  


Can you send a screenshot of a record in u_business_impact_analysis table?


You are querying u_business_impact_analysis with the sys_id of existingVendor.


venRec.addQuery('sys_id', existingVendor);


Check your variable 'existing_vendor', if it is pointing to u_business_impact_analysis or to some other table




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

The query is finding the record in the table.



The problem I have now I have 4 select boxes that will not setValue from the table.



Here is a screenshot of the table and existing vendor record.






Kristy Stevens