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.

Glide Record OR and AND

poyntzj
Kilo Sage

I am looking up on the cmb_schedule_span table

I have the schedule so I am only looking at the records for that schedule, but I need to lookup based on the repeat_type and the days_of_week fields.

 

repeat_type is daily or weekMWF or weekdays

OR

repeat_type is weekly AND days_of_week contains 1

In other words, if the schedule affects a Monday.

 

I have

var seRT = scheduleEntry('repeat_type','daily');
seRT.addOrCondition('repeat_type','weekMWF');
seRT.addOrCondition('repeat_type','weekdays');
seRT.addOrCondition('repeat_type','weekly');

 

which brings me back a record

I cannot see anyway to add restrict it any further

I have looked at encoded queries and they are not quite getting there either

It decides to use the ^NQ option to create a new query which throws the results.

 

schedule=ca51a84c6fcd61407e874c871e3ee4ad^repeat_type=daily^ORrepeat_type=weekMWF^ORrepeat_type=weekdays^NQrepeat_type=weekly^days_of_weekLIKE1

 

I am at the moment thinking of using the first query and then looking at a quick scan in the data it returns, but would prefer to do this in a single query is possible

 

any ideas or pointers.

1 ACCEPTED SOLUTION

Huh, that's strange.



I'm using the following in my instance, and it picks up the expected records for Daily, MWF, Weekdays, and weekly on Mondays.   I have other records where the repeat_type is weekly and it excludes those.



var scheduleEntry = new GlideRecord('cmb_schedule_span');  


//Initial criteria to add all repeat_type values of interest
scheduleEntry.addQuery('repeat_type','IN','daily,weekMWF,weekdays,weekly');        


//Criteria to exclude the repeat_type of "weekly" unless for the specific day of interest
var seRT = scheduleEntry.addQuery('repeat_type','!=','weekly');
seRT.addOrCondition('days_of_week','CONTAINS','1');  
scheduleEntry.query();  
gs.print(scheduleEntry.getRowCount());



The code you have in your post is not quite the same.   Can you try the following & verify if the record is excluded?


var scheduleEntry = new GlideRecord('cmb_schedule_span');


//querying for record that should be excluded due to other criteria


scheduleEntry.addQuery('schedule','ca51a84c6fcd61407e874c871e3ee4ad');  


//Initial criteria to add all repeat_type values of interest
scheduleEntry.addQuery('repeat_type','IN','daily,weekMWF,weekdays,weekly');        


//Criteria to exclude the repeat_type of "weekly" unless for the specific day of interest
var seRT = scheduleEntry.addQuery('repeat_type','!=','weekly');
seRT.addOrCondition('days_of_week','CONTAINS','1');  
scheduleEntry.query();  


if(scheduleEntry.next()){


gs.log(scheduleEntry.name);


}


 

View solution in original post

6 REPLIES 6

harikrish_v
Mega Guru

Hi Julian,



Can you try this pls:



var scheduleEntry = new GlideRecord('cmb_schedule_span');


var seRT = scheduleEntry.addQuery('repeat_type','IN','daily,weekMWF,weekdays');    


seRT.addOrCondition('repeat_type','weekly');  


seRT.addOrCondition('days_of_week','CONTAINS','1');


seRT.query();


if(seRT.next()){


//do something


}


Thanks & Regards,


Hari


cbweiner
Kilo Expert

Hari's post is close.   The following should work:



var scheduleEntry = new GlideRecord('cmn_schedule_span');  


scheduleEntry.addQuery('repeat_type','IN','daily,weekMWF,weekdays,weekly');        


var seRT = scheduleEntry.addQuery('repeat_type','!=','weekly');


seRT.addOrCondition('days_of_week','1');  


scheduleEntry.query();


Afraid neither quite work


The schedule is Mon to Fri only



var scheduleEntry = new GlideRecord('cmn_schedule_span');  

scheduleEntry.addQuery('schedule','ca51a84c6fcd61407e874c871e3ee4ad');


var seRT = scheduleEntry.addQuery('repeat_type','IN','daily,weekMWF,weekdays');
seRT.addOrCondition('repeat_type','weekly');      
seRT.addQuery('days_of_week','CONTAINS','6');  
scheduleEntry.query();  
if(scheduleEntry.next()){  
gs.log(scheduleEntry.name);
}  


This returns the name even though with 6 or 7 it should return nothing.



I SQL I wojuld write



Select from table


where


(((repeat_type = 'daily' or repeat_type='weeklyWMF' or repeat_type='weekdays') OR (repeat_type='weekly' AND days_of_week Like 1)) AND schedule = sys_id)



Pity the encoded query tries to use ^NQ.



Cheers


Hi Julian,



How abt this encoded query?



repeat_type=weekMWF^ORrepeat_type=daily^ORrepeat_type=weekdays^schedule=ca51a84c6fcd61407e874c871e3ee4ad^NQrepeat_type=weekly^days_of_weekLIKE1



only difference with the one you used earlier is "ad^" after schedule sys id.



Also, i'm not sure if days_of_weekLIKE1 can be used here



Thanks,
Mandar