How to restrict schedule job for triggering multiple times ?

Community Alums
Not applicable

Hi Everyone,
how to restrict scheduled job for triggering multiple notifications when users inactive on two cmdb table, notification is triggering twice because users having records on both tables, it should need to triggering once if person is same.

Scheduled Job Script:

//Scheduled job for when Accountable owner (user) is inactive on Business Application (cmdb_ci_business_app) table and/or Application Services (cmdb_ci_service_discovered) table then Notification Email needs to send for their manager on every monday 07:00 AM.

validateUser("cmdb_ci_service_discovered");
validateUser("cmdb_ci_business_app");

function validateUser(tableName) {
    var bussinessArr = [];
    var bussRecipients = [];
    var gr = new GlideRecord(tableName);
    gr.addEncodedQuery('assigned_to.active=false^assigned_to.sys_updated_onONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()');
    gr.query();
    while (gr.next()) {
        bussRecipients.push(gr.assigned_to.toString());
    }
    var arrayUtil = new ArrayUtil();
    var a1 = arrayUtil.unique(bussRecipients);
    for (var i = 0; i <= a1.length; i++) {
        var gr1 = new GlideRecord("sys_user");
        gr1.addQuery("sys_id", a1[i]);
        gr1.setLimit(1);
        gr1.query();
        if (gr1.next()) {
            gs.eventQueue('fa.business.app.accountable.owner', gr1, gr1.manager.email, gr1.name);
        }
    }
}

 

Thanks 

Venugopal S

find_real_file.png

3 REPLIES 3

Vasantharajan N
Giga Sage
Giga Sage

before triggering

 gs.eventQueue('fa.business.app.accountable.owner', gr1, gr1.manager.email, gr1.name);

check any event is already exist in the sysevent table


Thanks & Regards,
Vasanth

Community Alums
Not applicable

Hi @Vasantharajan N ,

No event is trigger apart from this.

Thanks
Venugopal S

validateUser("cmdb_ci_service_discovered");
validateUser("cmdb_ci_business_app");

function validateUser(tableName) {
    var bussinessArr = [];
    var bussRecipients = [];
    var gr = new GlideRecord(tableName);
    gr.addEncodedQuery('assigned_to.active=false^assigned_to.sys_updated_onONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()');
    gr.query();
    while (gr.next()) {
        bussRecipients.push(gr.assigned_to.toString());
    }
    var arrayUtil = new ArrayUtil();
    var a1 = arrayUtil.unique(bussRecipients);
    for (var i = 0; i <= a1.length; i++) {
        var gr1 = new GlideRecord("sys_user");
        gr1.addQuery("sys_id", a1[i]);
        gr1.setLimit(1);
        gr1.query();
        if (gr1.next()) {
			//Check whether event fa.business.app.accountable.owner already triggered for the same user email gr1.manager.email;
            var isEventTriggeredToUser = checkEventTriggered(gr1.manager.email, gr1.name);
            if (!isEventTriggeredToUser) { // if event not triggered then send email to the user.
                gs.eventQueue('fa.business.app.accountable.owner', gr1, gr1.manager.email, gr1.name);
            }
        }
    }
}

function checkEventTriggered(parm1, parm2) {

    var encQuery = "sys_created_onONLast 30 minutes@javascript:gs.beginningOfLast30Minutes()@javascript:gs.endOfLast30Minutes()^name=fa.business.app.accountable.owner^parm1=" + parm1 + "^parm2=" + parm2;

    var eventGr = new GlideRecord("sysevent");
    eventGr.addQuery(encQuery);
    eventGr.query();
    return eventGr.hasNext();
}

Please try with the above code and let us know for any issue. 


Thanks & Regards,
Vasanth