javascript - Script for missing Time card in Service Now -
i need send notification every monday users located in particular location along supervisor if have missed filling time cards, or time card state pending.
i have tested below script in background -script section , users don't have entry in time_card table week, simple find out. users have more 1 entry in pending state, more 1 notification go out them. need way group state 1 notification sent user per week time card still pending.
var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7'; var tqry = 'week_starts_onrelativeee@dayofweek@ago@4'; var puneusr = new gliderecord('sys_user'); puneusr.addencodedquery(qry); puneusr.query(); gs.print("pune users: count" + puneusr.getrowcount()); while(puneusr.next()){ var timecard = new gliderecord('time_card'); timecard.addquery('user', puneusr.sys_id); timecard.addencodedquery(tqry); timecard.query(); if (timecard.getrowcount() == '0'){ gs.print("row count" + timecard.getrowcount() + "user" + puneusr.sys_id.getdisplayvalue()); } if (timecard.getrowcount() != '0'){ while (timecard.next()){ gs.print("row count" + timecard.getrowcount() + "state" + timecard.getvalue('state') + "user" + puneusr.sys_id.getdisplayvalue() + "</br>" ); } } }
i add event registry in place of print statements , attach notifications them. of there 2 statements printed 2nd gs.print if user has 2 records in pending time card.
not sure how limit 1 event created per user.
if understand requirement correctly, you're looking generate 1 event (or in case of test script there, 1 gs.print()) per user.
here code generate 1 event (gs.print() in case) per user, include of details each of time cards (once edit line 23):
//declare msg var msg = ''; var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7'; var tqry = 'week_starts_onrelativeee@dayofweek@ago@4'; var puneusr = new gliderecord('sys_user'); puneusr.addencodedquery(qry); puneusr.query(); gs.print("pune users: count" + puneusr.getrowcount()); while(puneusr.next()){ var timecard = new gliderecord('time_card'); timecard.addquery('user', puneusr.sys_id); timecard.addencodedquery(tqry); timecard.query(); if (timecard.getrowcount() == '0'){ gs.print("row count" + timecard.getrowcount() + "user" + puneusr.sys_id.getdisplayvalue()); } if (timecard.getrowcount() != '0'){ //add header line once each user msg += 'you have ' + timecard.getrowcount() + 'timecard(s) pending:<br />' while (timecard.next()){ //add line msg each timecard matches query msg += 'put in details timecard here, , maybe link it.<br />'); } //print out final result of msg user. gs.print(msg); } }
i added comment above every line added/modified can see code mine.
here version should spit out 1 message per user, no matter how many timecards have open:
var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7'; var tqry = 'week_starts_onrelativeee@dayofweek@ago@4'; var puneusr = new gliderecord('sys_user'); puneusr.addencodedquery(qry); puneusr.query(); gs.print("pune users: count" + puneusr.getrowcount()); while(puneusr.next()){ var timecard = new gliderecord('time_card'); timecard.addquery('user', puneusr.sys_id); timecard.addencodedquery(tqry); timecard.query(); if (timecard.getrowcount() == '0'){ gs.print("row count" + timecard.getrowcount() + "user" + puneusr.sys_id.getdisplayvalue()); } if (timecard.getrowcount() != '0'){ //change 'while' 'if' executes once, regardless of how many records returned. if (timecard.next()){ gs.print("row count" + timecard.getrowcount() + "state" + timecard.getvalue('state') + "user" + puneusr.sys_id.getdisplayvalue() + "</br>" ); } } }
Comments
Post a Comment