onChange catalog client script to populate a field from a reference field ?

yshah
Giga Contributor

As shown in the figure of a catalog item, I have a reference field named 'Disk Name' and when a value is selected the field 'Current Disk Size' should be populated

find_real_file.png

I have the written the following script, but the pop up box is not closing once I select the value of the reference field and is giving me error 'getReference for disk_name not allowed: missing callback function as parameter'.   I am not sure how to make a callback function and pass it as a parameter. If that is needed then in what part of the script I should add it.

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

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

          return;

    }

    //Type appropriate comment here, and begin script below            

                              var disk_name = g_form.getReference('disk_name');

                                                              var disk_size;

                                                              var disk_rec = new GlideRecord('x_aona_gcp_gcp_persistent_disks');

                                                              disk_rec.addQuery('sys_id',disk_name);

                                                              disk_rec.query();

                                                              while(disk_rec.next()){

                                                                                              //gs.info('inside while');

                                                                                              disk_size=disk_rec.disk_space;

                                                              }

                                                              g_form.setValue('c_disk_size',disk_size);

}

1 ACCEPTED SOLUTION

yshah
Giga Contributor

Yes, it is a scopped app. But the issue was that we are querying on a record, which is wrong. The getReference method return us a complete record, so we just had to point to the right attribute.



The code here is as shown below.



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


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


  return;


  }


  var disk_name = g_form.getReference('disk_name',fillRec);


}


function fillRec(response){


  var size = response.disk_space;


  g_form.setValue('c_disk_size',size);


}


And this will solve the issue.


View solution in original post

15 REPLIES 15

yshah
Giga Contributor

The user who is making this call has access to this table and I tired in background script to get the sys_id and the disk_size and I am getting the expected value.


yshah
Giga Contributor

Drew HugoFirst : Hey guys do you have any idea about it ? I am stuck at this point and I am not sure how to resolve this issue.



Any suggestions are welcome.



Thanks


How about change the code to not use the getRefRecord and just use a GlideRecord query to see how that effects it because I really don't see anything wrong with your code.


yshah
Giga Contributor

I tried using getValue instead of getRefValue and tried gliderecord, but still not the same result. The code does not run after the gliderecord.


Is this table in a scooped app?