File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed
Server-Side Components/Scheduled Jobs/Deactivate Inactive Users and Notify Managers Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change 1+ ( function ( ) {
2+ var inactiveDays = 90 ;
3+ var cutoffDate = new GlideDateTime ( ) ;
4+ cutoffDate . addDaysUTC ( - inactiveDays ) ;
5+
6+ var userGR = new GlideRecord ( 'sys_user' ) ;
7+ userGR . addActiveQuery ( ) ; // Only active users
8+ userGR . addQuery ( 'sys_created_on' , '<' , cutoffDate ) ; // Old accounts
9+
10+ // Using encoded query: users with last login before cutoff OR never logged in
11+ userGR . addEncodedQuery ( 'last_login_time<' + cutoffDate . getValue ( ) + '^ORlast_login_timeISEMPTY' ) ;
12+ userGR . query ( ) ;
13+
14+ while ( userGR . next ( ) ) {
15+ var wasActive = userGR . active ;
16+ var managerSysId = userGR . manager ;
17+
18+ // Deactivate the user
19+ userGR . active = false ;
20+ userGR . update ( ) ;
21+
22+ // Notify only if manager exists and is active
23+ if ( wasActive && managerSysId ) {
24+ var mgrGR = new GlideRecord ( 'sys_user' ) ;
25+ mgrGR . addQuery ( 'sys_id' , managerSysId ) ;
26+ mgrGR . addQuery ( 'active' , true ) ;
27+ mgrGR . query ( ) ;
28+
29+ if ( mgrGR . next ( ) ) {
30+ gs . eventQueue (
31+ 'user.deactivation.notify_manager' , // Event name
32+ userGR , // Current user record
33+ userGR . name . toString ( ) , // parm1: user's name
34+ mgrGR . email . toString ( ) // parm2: manager's email
35+ ) ;
36+ }
37+ }
38+ }
39+
40+ gs . info ( 'Inactive or never-logged users deactivated; active managers notified.' ) ;
41+ } ) ( ) ;
42+
You can’t perform that action at this time.
0 commit comments