Reference field display value to String field on Catalog Item

Shane J
Tera Guru

How can I get a value from a Reference field to populate a String field via an OnChange client script (for a Catalog Item)?   Right now, all I can get is the Sys_ID.   The field needs to get populated initially with the cost_center field, based on the logged in under, but after that it may need to be manually changed (to a non-reference value).

1 ACCEPTED SOLUTION

This will work



Script Include:



var UserDetailsAjax = Class.create();


UserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {      


      getCostCenterDetails: function()


      {


              var getUserCostDetails = new GlideRecord('sys_user');


              if(getUserCostDetails.get(this.getParameter('sysparm_requested_for')))


                      {


                      return getUserCostDetails.cost_center.getDisplayValue();


              }


      }


});



Client script



var getCost = new GlideAjax('UserDetailsAjax');


getCost.addParam('sysparm_name','getCostCenterDetails');


getCost.addParam('sysparm_requested_for',newValue);


getCost.getXML(setCostCenter);



function setCostCenter(response) {


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


g_form.setValue('cost_center', answer);


}


View solution in original post

10 REPLIES 10

Actually screenshot of the catalog with the info of which field's information needs to be populated in which string field ? The reference field is referring which table ?


I'm trying to use the currently logged in user to populate the Cost Center from their User (table) record.



2015-01-07_10-05-12.png



As you can see, my current script pulls the sys_id of the referenced value in, and not the display value (should be 10020).


You cannot directly pull the cost center data from user record.. You need a glideajax for this ....



Script Include



Name : UserDetailsAjax


Client Callable : Checked


Script:



var UserDetailsAjax = Class.create();


UserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {


     


      getCostCenterDetails: function()


      {


              var getUserCostDetails = new GlideRecord('sys_user');


              if(getUserCostDetails.get(gs.getUserID()))


                      {


                      return getUserCostDetails.cost_center.getDisplayValue();


              }


      }


     


});



Onchange Client Script for requested for field :



var getCost = new GlideAjax('UserDetailsAjax');


getCost.addParam('sysparm_name','getCostCenterDetails');


getCost.getXML(setCostCenter);



function setCostCenter(response) {


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


    g_form.setValue('cost_center', answer);


}


We're nearly there.   After a little tweaking (I was getting some script errors for the OnChange as you had posted it), they Cost Center display value is pulled in, BUT it's not updating when the field value changes.



Here is the current OnChange script:



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


  if(newValue != ""){


/* var reqFor2 = g_form.getReference('requested_for');


      g_form.setValue('cost_center', reqFor2.cost_center);


  }


}*/




  var getCost = new GlideAjax('UserDetailsAjax');


getCost.addParam('sysparm_name','getCostCenterDetails');


getCost.getXML(setCostCenter);


  }





function setCostCenter(response) {


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


    g_form.setValue('cost_center', answer);


}


}


This will work



Script Include:



var UserDetailsAjax = Class.create();


UserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {      


      getCostCenterDetails: function()


      {


              var getUserCostDetails = new GlideRecord('sys_user');


              if(getUserCostDetails.get(this.getParameter('sysparm_requested_for')))


                      {


                      return getUserCostDetails.cost_center.getDisplayValue();


              }


      }


});



Client script



var getCost = new GlideAjax('UserDetailsAjax');


getCost.addParam('sysparm_name','getCostCenterDetails');


getCost.addParam('sysparm_requested_for',newValue);


getCost.getXML(setCostCenter);



function setCostCenter(response) {


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


g_form.setValue('cost_center', answer);


}