Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

gliderecord query by state label

Jim60
Tera Expert

I know this is a bit of an odd question but is there a way to perform a query by the state label instead of the value?   Using state.label does not work. (I'm well aware that using the value is by far the safest.)

1 ACCEPTED SOLUTION

You can try what Shishir has suggested. Or try this



  1. var inc = new GlideRecord('incident');
  2. inc.addQuery('state',getState('incident','New'));
  3. inc.query();
  4. while (inc.next()) {
  5.     gs.print('-----------'+inc.number);
  6. }
  7. function getState(tablename,label)
  8. {
  9. var ch = new GlideRecord('sys_choice');
  10. ch.addQuery('name',tablename);
  11. ch.addQuery('label',label);
  12. ch.query();
  13. if (ch.next())
  14. {
  15. return ch.value;
  16. }
  17. }

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

View solution in original post

11 REPLIES 11

The default operator is =,   I want results where state='New'.   Contains should look for instances where the state has the word somewhere in the string, blahNewblah.   I tested CONTAINS just as you have listed here to make sure I wasn't missing something and still no result.   Did you test this and get a different result?


Can we try something like this,



var gr = new GlideRecord('incident');


gr.addJoinQuery('sys_choice', 'sys_class_name', 'name');


gr.addQuery('active', true);


gr.addQuery('label', 'New');


gr.query();


while(gr.next()){


gs.print(gr.number);


}


You can try what Shishir has suggested. Or try this



  1. var inc = new GlideRecord('incident');
  2. inc.addQuery('state',getState('incident','New'));
  3. inc.query();
  4. while (inc.next()) {
  5.     gs.print('-----------'+inc.number);
  6. }
  7. function getState(tablename,label)
  8. {
  9. var ch = new GlideRecord('sys_choice');
  10. ch.addQuery('name',tablename);
  11. ch.addQuery('label',label);
  12. ch.query();
  13. if (ch.next())
  14. {
  15. return ch.value;
  16. }
  17. }

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

This is what I ended up doing...


var inc = new GlideRecord('incident');


var values = getChoiceValues('incident','state',['New','Active'];


inc.addQuery('state','IN',values);


inc.query();


while (inc.next()) {


    gs.print('-----------'+inc.number);


}





getChoiceValues: function(table, element, labels){


      if (Array.isArray(labels)){


              labels = labels.join();


      }


      var value = [];


      var choice = new GlideRecord('sys_choice');


      choice.addQuery('name',table);


      choice.addQuery('element',element);


      choice.addQuery('label','IN',labels);


      choice.addQuery('inactive',false);


      choice.query();


      while (choice.next()) {


          value.push(choice.value.toString());


      }


      if(value.length){


          return value.join();


      }


      return labels;


}


This code is working ,Thanks