Filtering Reference Field with Script Include

James Michaels1
Giga Expert

I am attempting to use a script include to filter a reference field based on a piece of data on the incident form. The script include is being called and returns an array of the correct entries but the reference field is not filtering. I am using javascript:new filterVettingCallers().filterVettingCallers() in the reference qual of the reference field and my code is below. I have tried with both sys_ids and names but neither works. Does anyone know how I can get this filter to work?

function filterVettingCallers() {
          var i = 0;
          gs.log('Vetting Filter');
          var arrVettingCallers = [];
          var category = current.u_category;
          vettingCallers = new GlideRecord('u_vetting_callers');
          gs.log('category is: ' + category);
          vettingCallers.addQuery('u_category', category);
          vettingCallers.query();
          while(vettingCallers.next()) {
                    var name = vettingCallers.sys_id.toString();
                    arrVettingCallers[i] = name;
                    i++
          }
          gs.log(arrVettingCallers)
          return arrVettingCallers;
};
1 ACCEPTED SOLUTION

James Michaels1
Giga Expert

It looks like the problem was that I had not surrounded my function with the class code. After doing so it worked properly. My completed code is below.




var filterVettingCallers = Class.create();
filterVettingCallers.prototype =   {
          initialize: function() {
          },
          filterVettingCallers:function() {
                    gs.log('Vetting Filter');
                    var stringVettingCallers = 'sys_idIN';
                    var category = current.u_category;
                    vettingCallers = new GlideRecord('u_vetting_callers');
                    gs.log('category is: ' + category);
                    vettingCallers.addQuery('u_category', category);
                    vettingCallers.query();
                    while(vettingCallers.next()) {
                              var name = vettingCallers.sys_id.toString();
                              stringVettingCallers += (name + ',');
                    }
                    stringVettingCallers = stringVettingCallers.slice(0,-1);
                    
                    gs.log(stringVettingCallers)
                    return stringVettingCallers;
          },
          type: 'filterIDVettingCallers'
};

View solution in original post

8 REPLIES 8

Anurag Tripathi
Mega Patron
Mega Patron

Hi James,



You have to return the whole query here and not just the sys_id. Returnsed string should be something like this


sys_idIN<list of sys_id separated by comma>


Try this




function filterVettingCallers() {


        var i = 0;


        gs.log('Vetting Filter');


        var arrVettingCallers = [];


        var category = current.u_category;


        vettingCallers = new GlideRecord('u_vetting_callers');


        gs.log('category is: ' + category);


        vettingCallers.addQuery('u_category', category);


        vettingCallers.query();


        while(vettingCallers.next()) {


                  var name = vettingCallers.sys_id.toString();


                  arrVettingCallers[i] = name;


                  i++


        }


        gs.log(arrVettingCallers)


        return 'sys_idIN'+arrVettingCallers.toString();


};


-Anurag

Thank you for the help. I changed the code around to return a string of sys_ids with the sys_idIN prefix and that part seems to be working. It is logging a string that appears to be correct but the reference field still shows all options. I included my modified code below.


function filterVettingCallers() {
          gs.log('Vetting Filter');
          var stringVettingCallers = 'sys_idIN';
          var category = current.u_category;
          vettingCallers = new GlideRecord('u_vetting_callers');
          gs.log('category is: ' + category);
          vettingCallers.addQuery('u_category', category);
          vettingCallers.query();
          while(vettingCallers.next()) {
                    var name = vettingCallers.sys_id.toString();
                    stringVettingCallers += (name + ',');
          }
          stringVettingCallers = stringVettingCallers.slice(0,-1);
          gs.log(stringVettingCallers)
          return stringVettingCallers;
};

can you put a log on "current.u_category;" to see if it holds the value you are expecting


-Anurag

I am logging the variable a bit lower in the code on line 6. It does log the correct category. In addition the output at the end has the correct entries in the log, it just doesn't seem to do anything with it.