The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Adding a Conditional to a Scheduled Job

prudhvig
Tera Expert

Hi,

I have written a Scheduled Job which fires an event and that event triggers a notification. I want to add a condition in that Scheduled Job which makes this Scheduled Job trigger that event only when the user has itil role and is part of "XYZ" company. SO, finally the notification has to be sent only to itil users of "XYZ" company.

Conditions when this Scheduled Job should fire the event:

1. User should be "itil" and from company "XYZ"

Below is the screenshot of Scheduled Job:

Screenshot (836).png

1 ACCEPTED SOLUTION

Jim Coyne
Kilo Patron

The simplest way would be to add an encoded query to your sys_user GlideRecord object.   You can generate the query using this method - Generate an encoded query string through a filter .   Generate the query by looking at your User table and adding the following filter:



find_real_file.png



Then add the following line after your first line:


userNoTimeCard.addEncodedQuery("active=true^roles=itil^company=whatever_sys_id_of_tjhe_company");



That will then narrow your list of users down right from the start.


View solution in original post

9 REPLIES 9

Vipin Murugesan
Kilo Sage

Hi Prudhvi,



I suggest you to take a look at Scriptless Scheduled Jobs



you need HI account to download the APP.



Once after you install it, you can set conditions for your requirement.



PFB screenshot for your reference.



find_real_file.png


SanjivMeher
Kilo Patron
Kilo Patron

You can write condition just after while loop,



var gr = new GlideRecord('sys_user_has_role');  


gr.addQuery('user', userNoTimeCart.sys_id);  


gr.addQuery('role.name','itil');


gr.query();  



if (userNoTimeCart.company=='XYZ' && gr.next())


{


//Rest of your scripts


}



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

Thanks for the reply Sanjiv,



Below is my present code:



var userNoTimeCard = new GlideRecord('sys_user');


userNoTimeCard.query();


while(userNoTimeCard.next()){


if(gs.getProperty('notimecard_submission_notifyMe') == userNoTimeCard.user_name.toString() || gs.getProperty('notimecard_submission_notifyMe') == ''){


var noTimeCard = new GlideRecord("time_card");


noTimeCard.addEncodedQuery('user="+userNoTimeCard.sys_id+"^week_starts_on>=javascript:gs.daysAgoStart(8)^state!=Pending');


noTimeCard.query();


if(!noTimeCard.next()){


gs.log("AST:AST:TimeCard-TimeCardNotSubmittedNotification ---> User: " + userNoTimeCard.sys_id, "AST:AST:TimeCard-No Submission: User");


gs.eventQueue("notimecard.submit", userNoTimeCard, userNoTimeCard.sys_id.toString(), userNoTimeCard.getDisplayValue());


}


}


}



Do you want me to change it as follows:



var gr = new GlideRecord('sys_user_has_role');      


gr.addQuery('user', userNoTimeCart.sys_id);      


gr.addQuery('role.name','itil');  


gr.query();      


 


if (userNoTimeCart.company=='XYZ' && gr.next())  


{  


var userNoTimeCard = new GlideRecord('sys_user');


userNoTimeCard.query();


while(userNoTimeCard.next()){


if(gs.getProperty('notimecard_submission_notifyMe') == userNoTimeCard.user_name.toString() || gs.getProperty('notimecard_submission_notifyMe') == ''){


var noTimeCard = new GlideRecord("time_card");


noTimeCard.addEncodedQuery('user="+userNoTimeCard.sys_id+"^week_starts_on>=javascript:gs.daysAgoStart(8)^state!=Pending');


noTimeCard.query();


if(!noTimeCard.next()){


gs.log("AST:AST:TimeCard-TimeCardNotSubmittedNotification ---> User: " + userNoTimeCard.sys_id, "AST:AST:TimeCard-No Submission: User");


gs.eventQueue("notimecard.submit", userNoTimeCard, userNoTimeCard.sys_id.toString(), userNoTimeCard.getDisplayValue());


}


}


}


}  



Am I right? Please let me know.


Try this



var userNoTimeCard = new GlideRecord('sys_user');


userNoTimeCard.query();


while(userNoTimeCard.next()){



var gr = new GlideRecord('sys_user_has_role');    


gr.addQuery('user', userNoTimeCard.sys_id);    


gr.addQuery('role.name','itil');


gr.query();    


if (userNoTimeCard.company.name=='XYZ' && gr.next())


{


if(gs.getProperty('notimecard_submission_notifyMe') == userNoTimeCard.user_name.toString() || gs.getProperty('notimecard_submission_notifyMe') == ''){


var noTimeCard = new GlideRecord("time_card");


noTimeCard.addEncodedQuery('user="+userNoTimeCard.sys_id+"^week_starts_on>=javascript:gs.daysAgoStart(8)^state!=Pending');


noTimeCard.query();


if(!noTimeCard.next()){


gs.log("AST:AST:TimeCard-TimeCardNotSubmittedNotification ---> User: " + userNoTimeCard.sys_id, "AST:AST:TimeCard-No Submission: User");


gs.eventQueue("notimecard.submit", userNoTimeCard, userNoTimeCard.sys_id.toString(), userNoTimeCard.getDisplayValue());


}


}


}


}



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