Some PDIs are currently unavailable, and PDI actions are paused. View the latest updates here. Read More

how to restrict incident creation from calendar invites for DL

RudhraKAM
Tera Guru

As of now we are creating an Incidents via Inbound action , but when there is a calendar invite , still it is creating Incident , How to restrict that ?

 

I am not able to restrict subject , as it can be any 

 

RudhraKAM_0-1764942196011.png

 

45 REPLIES 45

pratyusha11
Tera Contributor
var validCtaskIds = [];

var ctaskFilterGR = new GlideRecord('change_task');
ctaskFilterGR.addQuery('sys_id', 'IN', breachedCtaskIds.join(','));
ctaskFilterGR.addQuery('change_request.production_system', true);
ctaskFilterGR.addQuery('change_request.state', '!=', '5');
ctaskFilterGR.query();

while (ctaskFilterGR.next()) {
    validCtaskIds.push(ctaskFilterGR.getValue('sys_id'));
}

gs.print('Valid CTask IDs after filter: ' + validCtaskIds.length);

pratyusha11
Tera Contributor
var ctaskRecords = new GlideAggregate('change_task');
ctaskRecords.addQuery('sys_id', 'IN', validCtaskIds.join(','));
ctaskRecords.addAggregate('COUNT', 'assigned_to');
ctaskRecords.orderByAggregate('COUNT', 'assigned_to');
ctaskRecords.orderBy('assigned_to');
ctaskRecords.orderBy('assignment_group');
ctaskRecords.query();

pratyusha11
Tera Contributor
var DRY_RUN = true; // Change to false only when approved

var overDueRecords = [];
var existingChangeEmails = [];
var existingTaskEmails = [];

// ============================================================
// HELPER: Get group details inline
// ============================================================
function getGroupDetails(groupSysId) {
    var groupObj = { group_email: '', manager_email: '', manager_name: '', group_name: '' };
    if (!groupSysId) return groupObj;

    var grpGR = new GlideRecord('sys_user_group');
    if (grpGR.get(groupSysId)) {
        groupObj.group_email = grpGR.getValue('email') || '';
        groupObj.group_name = grpGR.getValue('name') || '';
        var grpManager = grpGR.manager.getRefRecord();
        if (grpManager && grpManager.isValidRecord() && grpManager.getValue('active') == 'true') {
            groupObj.manager_email = grpManager.getValue('email') || '';
            groupObj.manager_name = grpManager.getValue('u_preferred_name') ||
                                    (grpManager.getValue('first_name') + ' ' + grpManager.getValue('last_name')) || '';
        }
    }
    return groupObj;
}

// ============================================================
// HELPER: Get manager details inline
// ============================================================
function getManagerDetails(userGR) {
    var managerObj = { manager_email: '', manager_name: '', is_manager_active: false };
    if (!userGR || !userGR.isValidRecord()) return managerObj;

    var manager = userGR.manager.getRefRecord();
    if (manager && manager.isValidRecord() && manager.getValue('active') == 'true') {
        managerObj.is_manager_active = true;
        managerObj.manager_email = manager.getValue('email') || '';
        managerObj.manager_name = manager.getValue('u_preferred_name') ||
                                  (manager.getValue('first_name') + ' ' + manager.getValue('last_name')) || '';
    }
    return managerObj;
}

// ============================================================
// STEP 1: Get breached CHG sys_ids from task_sla
// ============================================================
var breachedChgIds = [];

var chgSlaGR = new GlideRecord('task_sla');
chgSlaGR.addQuery('active', true);
chgSlaGR.addQuery('has_breached', true);
chgSlaGR.addQuery('sla.name', 'WF CHG Resolution');
chgSlaGR.addQuery('task.sys_class_name', 'change_request');
chgSlaGR.query();

while (chgSlaGR.next()) {
    var taskId

pratyusha11
Tera Contributor
var DRY_RUN = true; // Change to false only when approved

var overDueRecords = [];
var existingChangeEmails = [];
var existingTaskEmails = [];

// ============================================================
// HELPER: Get group details inline
// ============================================================
function getGroupDetails(groupSysId) {
    var groupObj = { group_email: '', manager_email: '', manager_name: '', group_name: '' };
    if (!groupSysId) return groupObj;

    var grpGR = new GlideRecord('sys_user_group');
    if (grpGR.get(groupSysId)) {
        groupObj.group_email = grpGR.getValue('email') || '';
        groupObj.group_name = grpGR.getValue('name') || '';
        var grpManager = grpGR.manager.getRefRecord();
        if (grpManager && grpManager.isValidRecord() && grpManager.getValue('active') == 'true') {
            groupObj.manager_email = grpManager.getValue('email') || '';
            groupObj.manager_name = grpManager.getValue('u_preferred_name') ||
                                    (grpManager.getValue('first_name') + ' ' + grpManager.getValue('last_name')) || '';
        }
    }
    return groupObj;
}

// ============================================================
// HELPER: Get manager details inline
// ============================================================
function getManagerDetails(userGR) {
    var managerObj = { manager_email: '', manager_name: '', is_manager_active: false };
    if (!userGR || !userGR.isValidRecord()) return managerObj;

    var manager = userGR.manager.getRefRecord();
    if (manager && manager.isValidRecord() && manager.getValue('active') == 'true') {
        managerObj.is_manager_active = true;
        managerObj.manager_email = manager.getValue('email') || '';
        managerObj.manager_name = manager.getValue('u_preferred_name') ||
                                  (manager.getValue('first_name') + ' ' + manager.getValue('last_name')) || '';
    }
    return managerObj;
}

// ============================================================
// STEP 1: Get breached CHG sys_ids from task_sla
// ============================================================
var breachedChgIds = [];

var chgSlaGR = new GlideRecord('task_sla');
chgSlaGR.addQuery('active', true);
chgSlaGR.addQuery('has_breached', true);
chgSlaGR.addQuery('sla.name', 'WF CHG Resolution');
chgSlaGR.addQuery('task.sys_class_name', 'change_request');
chgSlaGR.query();

while (chgSlaGR.next()) {
    var taskId = chgSlaGR.getValue('task');
    if (taskId && breachedChgIds.indexOf(taskId) < 0) {
        breachedChgIds.push(taskId);
    }
}

gs.print('Breached CHG IDs found: ' + breachedChgIds.length);

// ============================================================
// STEP 2: Aggregate on change_request using breached sys_ids
// ============================================================
if (breachedChgIds.length > 0) {
    var chgRecords = new GlideAggregate('change_request');
    chgRecords.addQuery('sys_id', 'IN', breachedChgIds.join(','));
    chgRecords.addQuery('production_system', true);
    chgRecords.addQuery('state', 'NOT IN', '3,4');
    chgRecords.addAggregate('COUNT', 'requested_by');
    chgRecords.orderByAggregate('COUNT', 'requested_by');
    chgRecords.orderBy('requested_by');
    chgRecords.orderBy('assignment_group');
    chgRecords.query();

    gs.print('CHG aggregate rows: ' + chgRecords.getRowCount());

    while (chgRecords.next()) {
        var chgCount = chgRecords.getAggregate('COUNT', 'requested_by');
        var chgOverDueObj = {};
        chgOverDueObj.is_user_active = false;
        chgOverDueObj.has_valid_email = false;
        chgOverDueObj.is_manager_active = false;
        chgOverDueObj.group = chgRecords.getValue('assignment_group');
        chgOverDueObj.overdue_chg_count = chgCount;
        chgOverDueObj.overdue_ctask_count = '';
        chgOverDueObj.assigned_user_email = '';
        chgOverDueObj.group_email = '';
        chgOverDueObj.group_name = '';
        chgOverDueObj.assigned_name = '';
        chgOverDueObj.manager_email = '';
        chgOverDueObj.manager_name = '';

        var requestedBy = chgRecords.requested_by.getRefRecord();
        if (requestedBy && requestedBy.isValidRecord() && requestedBy.getValue('active') == 'true') {
            chgOverDueObj.is_user_active = true;
            chgOverDueObj.assigned_user_email = requestedBy.getValue('email') || '';
            chgOverDueObj.assigned_name = requestedBy.getValue('u_preferred_name') ||
                                          (requestedBy.getValue('first_name') + ' ' + requestedBy.getValue('last_name')) || '';
            chgOverDueObj.has_valid_email = (chgOverDueObj.assigned_user_email != '');

            var chgManagerDetails = getManagerDetails(requestedBy);
            chgOverDueObj.is_manager_active = chgManagerDetails.is_manager_active;
            chgOverDueObj.manager_email = chgManagerDetails.manager_email;
            chgOverDueObj.manager_name = chgManagerDetails.manager_name;
        } else {
            var chgGroupDetails = getGroupDetails(chgOverDueObj.group);
            chgOverDueObj.group_email = chgGroupDetails.group_email;
            chgOverDueObj.group_name = chgGroupDetails.group_name;
            chgOverDueObj.manager_email = chgGroupDetails.manager_email;
            chgOverDueObj.manager_name = chgGroupDetails.manager_name;
        }

        if (chgOverDueObj.is_user_active && chgOverDueObj.assigned_user_email &&
            existingChangeEmails.indexOf(chgOverDueObj.assigned_user_email) < 0) {
            overDueRecords.push(chgOverDueObj);
            existingChangeEmails.push(chgOverDueObj.assigned_user_email);
        } else if ((!chgOverDueObj.is_user_active || !chgOverDueObj.has_valid_email) &&
                   chgOverDueObj.group_email &&
                   existingTaskEmails.indexOf(chgOverDueObj.group_email) < 0) {
            overDueRecords.push(chgOverDueObj);
            existingTaskEmails.push(chgOverDueObj.group_email);
        }
    }
}

// ============================================================
// STEP 3: Get breached Change Task sys_ids from task_sla
// ============================================================
var breachedCtaskIds = [];

var ctaskSlaGR = new GlideRecord('task_sla');
ctaskSlaGR.addQuery('active', true);
ctaskSlaGR.addQuery('has_breached', true);
ctaskSlaGR.addQuery('sla.name', 'WF CTask Resolution');
ctaskSlaGR.addQuery('task.sys_class_name', 'change_task');
ctaskSlaGR.query();

while (ctaskSlaGR.next()) {
    var ctaskId = ctaskSlaGR.getValue('task');
    if (ctaskId && breachedCtaskIds.indexOf(ctaskId) < 0) {
        breachedCtaskIds.push(ctaskId);
    }
}

gs.print('Breached Change Task IDs found: ' + breachedCtaskIds.length);

// ============================================================
// STEP 3b: Filter ctask IDs — only production + active parent
// ============================================================
var validCtaskIds = [];

if (breachedCtaskIds.length > 0) {
    var ctaskFilterGR = new GlideRecord('change_task');
    ctaskFilterGR.addQuery('sys_id', 'IN', breachedCtaskIds.join(','));
    ctaskFilterGR.addQuery('change_request.production_system', true);
    ctaskFilterGR.addQuery('change_request.state', '!=', '5');
    ctaskFilterGR.query();

    while (ctaskFilterGR.next()) {
        validCtaskIds.push(ctaskFilterGR.getValue('sys_id'));
    }
}

gs.print('Valid CTask IDs after filter: ' + validCtaskIds.length);

// ============================================================
// STEP 4: Aggregate on change_task using valid sys_ids
// ============================================================
if (validCtaskIds.length > 0) {
    var ctaskRecords = new GlideAggregate('change_task');
    ctaskRecords.addQuery('sys_id', 'IN', validCtaskIds.join(','));
    ctaskRecords.addAggregate('COUNT', 'assigned_to');
    ctaskRecords.orderByAggregate('COUNT', 'assigned_to');
    ctaskRecords.orderBy('assigned_to');
    ctaskRecords.orderBy('assignment_group');
    ctaskRecords.query();

    gs.print('Change Task aggregate rows: ' + ctaskRecords.getRowCount());

    while (ctaskRecords.next()) {
        var ctaskCount = ctaskRecords.getAggregate('COUNT', 'assigned_to');
        var ctaskOverDueObj = {};
        ctaskOverDueObj.is_user_active = false;
        ctaskOverDueObj.has_valid_email = false;
        ctaskOverDueObj.is_manager_active = false;
        ctaskOverDueObj.group = ctaskRecords.getValue('assignment_group');
        ctaskOverDueObj.overdue_ctask_count = ctaskCount;
        ctaskOverDueObj.overdue_chg_count = '';
        ctaskOverDueObj.assigned_user_email = '';
        ctaskOverDueObj.group_email = '';
        ctaskOverDueObj.group_name = '';
        ctaskOverDueObj.assigned_name = '';
        ctaskOverDueObj.manager_email = '';
        ctaskOverDueObj.manager_name = '';

        var assignedTo = ctaskRecords.assigned_to.getRefRecord();
        if (assignedTo && assignedTo.isValidRecord() && assignedTo.getValue('active') == 'true') {
            ctaskOverDueObj.is_user_active = true;
            ctaskOverDueObj.assigned_user_email = assignedTo.getValue('email') || '';
            ctaskOverDueObj.assigned_name = assignedTo.getValue('u_preferred_name') ||
                                            (assignedTo.getValue('first_name') + ' ' + assignedTo.getValue('last_name')) || '';
            ctaskOverDueObj.has_valid_email = (ctaskOverDueObj.assigned_user_email != '');

            var ctaskManagerDetails = getManagerDetails(assignedTo);
            ctaskOverDueObj.is_manager_active = ctaskManagerDetails.is_manager_active;
            ctaskOverDueObj.manager_email = ctaskManagerDetails.manager_email;
            ctaskOverDueObj.manager_name = ctaskManagerDetails.manager_name;
        } else {
            var ctaskGroupDetails = getGroupDetails(ctaskOverDueObj.group);
            ctaskOverDueObj.group_email = ctaskGroupDetails.group_email;
            ctaskOverDueObj.group_name = ctaskGroupDetails.group_name;
            ctaskOverDueObj.manager_email = ctaskGroupDetails.manager_email;
            ctaskOverDueObj.manager_name = ctaskGroupDetails.manager_name;
        }

        if (ctaskOverDueObj.is_user_active && ctaskOverDueObj.assigned_user_email &&
            existingChangeEmails.indexOf(ctaskOverDueObj.assigned_user_email) < 0) {
            overDueRecords.push(ctaskOverDueObj);
            existingChangeEmails.push(ctaskOverDueObj.assigned_user_email);
        } else if ((!ctaskOverDueObj.is_user_active || !ctaskOverDueObj.has_valid_email) &&
                   ctaskOverDueObj.group_email &&
                   existingTaskEmails.indexOf(ctaskOverDueObj.group_email) < 0) {
            overDueRecords.push(ctaskOverDueObj);
            existingTaskEmails.push(ctaskOverDueObj.group_email);
        }
    }
}

// ============================================================
// STEP 5: DRY RUN output / or fire notifications
// ============================================================
gs.print('--- Total overDueRecords: ' + overDueRecords.length + ' ---');

if (DRY_RUN) {
    for (var i = 0; i < overDueRecords.length; i++) {
        var rec = overDueRecords[i];
        gs.print('Would notify =>' +
                 ' | User Active: ' + rec.is_user_active +
                 ' | Name: ' + rec.assigned_name +
                 ' | User Email: ' + rec.assigned_user_email +
                 ' | Group: ' + rec.group_name +
                 ' | Group Email: ' + rec.group_email +
                 ' | Manager Name: ' + rec.manager_name +
                 ' | Manager Email: ' + rec.manager_email +
                 ' | CHG Count: ' + rec.overdue_chg_count +
                 ' | Task Count: ' + rec.overdue_ctask_count);
    }
    gs.print('DRY RUN complete - no emails sent');
} else {
    // Your existing notification firing logic goes here
}

pratyusha11
Tera Contributor
var overdueRecords = [];
//Arrays to remove duplicate email addresses 
var existingChangeEmails = [];
var existingCTaskEmails = [];

//First query Change Request table
var chgSLA = new GlideAggregate('task_sla');
chgSLA.addQuery('active', true);
chgSLA.addQuery('has_breached', true);
chgSLA.addQuery('task.sys_class_name', 'change_request');
chgSLA.addQuery('task.production_system', true);
chgSLA.addAggregate('COUNT', 'task.requested_by');
chgSLA.orderByAggregate('COUNT', 'task.requested_by');
chgSLA.orderBy('task.requested_by');
chgSLA.orderBy('task.assignment_group');
chgSLA.query();
while (chgSLA.next()) {
    var chgCount = chgSLA.getAggregate('COUNT', 'requested_by');
    var chgOverDueObj = {};
    chgOverDueObj.is_user_active = false;
    chgOverDueObj.has_valid_email = false;
    chgOverDueObj.is_manager_active = false;

    chgOverDueObj.group = chgSLA.getValue('task.assignment_group');
    var requestedBy = chgSLA.task.requested_by.getRefRecord();
    //Checks Requested By 
    if (chgSLA.getValue('requested_by') && isActiveUser(requestedBy)) {

        chgOverDueObj.is_user_active = true;
        if (requestedBy.getValue('email')) {
            chgOverDueObj.assigned_user_email = requestedBy.getValue('email');
            chgOverDueObj.assigned_preferred_name = requestedBy.getValue('u_preferred_name');
            chgOverDueObj.has_valid_email = true;
        }
        setManagerDetails(requestedBy, chgOverDueObj);

    } else {
        setGroupManagerDetails(chgOverDueObj.group, chgOverDueObj);
    }

    chgOverDueObj.overdue_chg_count = chgCount;
    //chgOverDueObj.found_in = 'CHANGE_REQUEST';

    if ((chgOverDueObj.is_user_active) && (chgOverDueObj.assigned_user_email) && (existingChangeEmails.indexOf(chgOverDueObj.assigned_user_email) < 0)) {
        overdueRecords.push(chgOverDueObj);
        existingChangeEmails.push(chgOverDueObj.assigned_user_email);
    } else if ((!(chgOverDueObj.is_user_active) || (!(chgOverDueObj.has_valid_email))) && (existingCTaskEmails.indexOf(chgOverDueObj.group_email) < 0)) {
        overdueRecords.push(chgOverDueObj);
        existingCTaskEmails.push(chgOverDueObj.group_email);
    }


}

//Next, query Change Task table 
var ctaskSLA = new GlideAggregate('task_sla');
ctaskSLA.addQuery('active', true);
ctaskSLA.addQuery('has_breached', true);
ctaskSLA.addQuery('task.sys_class_name', 'change_task');
ctaskSLA.addQuery('task.production_system', true);
ctaskSLA.addQuery('task.change_request.state', '!=', '5'); // exclude closed CHGs
ctaskSLA.addAggregate('COUNT', 'task.assigned_to');
ctaskSLA.orderBy('task.assigned_to');
ctaskSLA.orderBy('task.assignment_group');
ctaskSLA.query();

while (ctaskSLA.next()) {
    var ctaskCount = ctaskSLA.getAggregate('COUNT', 'task.assigned_to');
    var ctaskOverDueObj = {};
    ctaskOverDueObj.is_user_active = false;
    ctaskOverDueObj.has_valid_email = false;
    ctaskOverDueObj.is_manager_active = false;

    ctaskOverDueObj.group = ctaskSLA.getValue('task.assignment_group');
    var assignedTo = ctaskSLA.task.assigned_to.getRefRecord();

    // Check Assigned To
    if (ctaskSLA.getValue('task.assigned_to') && isActive(assignedTo)) {
        ctaskOverDueObj.is_user_active = true;
        ctaskOverDueObj.assigned_user_email = assignedTo.getValue('email');
        ctaskOverDueObj.assigned_user_preferred_name = assignedTo.getValue('u_preferred_name');
        setManagerDetails(assignedTo, ctaskOverDueObj);
    } else {
        setGroupManagerDetails(ctaskOverDueObj.group, ctaskOverDueObj);
    }

    ctaskOverDueObj.overdue_ctask_count = ctaskCount;

    // Email dedup — user path
    if (ctaskOverDueObj.is_user_active &&
        ctaskOverDueObj.assigned_user_email &&
        existingChangeTaskEmails.indexOf(ctaskOverDueObj.assigned_user_email) < 0) {

        overdueRecords.push(ctaskOverDueObj);
        existingChangeTaskEmails.push(ctaskOverDueObj.assigned_user_email);

        // Email dedup — group path
    } else if (!ctaskOverDueObj.is_user_active &&
        ctaskOverDueObj.has_valid_email &&
        existingChangeEmails.indexOf(ctaskOverDueObj.group_email) < 0) {

        overdueRecords.push(ctaskOverDueObj);
        existingChangeEmails.push(ctaskOverDueObj.group_email);
    }
}

var overDueLength = overdueRecords.length;
for (var i = 0; i < overDueLength; i++) {
    var emailAddresses = '';
    if ((overdueRecords[i].is_user_active) && (overdueRecords[i].has_valid_email)) {
        emailAddresses = overdueRecords[i].assigned_user_email;
        if ((overdueRecords[i].is_manager_active) && (overdueRecords[i].manager_email)) {
            emailAddresses += ',' + overdueRecords[i].manager_email;
        }
    } else {
        emailAddresses = overdueRecords[i].group_email;
    }

    if (overdueRecords[i].group) {
        gs.log(JSON.stringify(overdueRecords[i]));
        var groupRecord = new GlideRecord('sys_user_group');
        if (groupRecord.get(overdueRecords[i].group)) {
            gs.eventQueue('wf.change.past_due.daily_digest', groupRecord, emailAddresses, JSON.stringify(overdueRecords[i]), '');
        }
    }

}


//Function to check if user is active 
function isActiveUser(user) {
    var isActive = false;
    if (user.isValidRecord()) {
        isActive = user.active;
    }
    return isActive;
}

//Function to populate Manager details into JSON Obj
function setManagerDetails(user, jsonObj) {
    var manager = user.manager.getRefRecord();
    jsonObj.is_manager_active = false;
    if (isActiveUser(manager)) {
        jsonObj.is_manager_active = true;
        if (manager.getValue('email')) {
            jsonObj.manager_email = manager.getValue('email');
        }

    }
}

//Function to set Manager & Group Details 
function setGroupManagerDetails(groupID, jsonObj) {
    var groupEmail = '';
    var groupRecord = new GlideRecord('sys_user_group');
    if (groupRecord.get(groupID)) {
        var groupManager = groupRecord.manager.getRefRecord();
        var groupManagerEmail = groupManager.getValue('email');
        groupEmail = groupRecord.getValue('email');

        if (groupRecord.active && isActiveUser(groupManager) && JSUtil.notNil(groupManagerEmail)) {
            jsonObj.group_email = groupManagerEmail;
            jsonObj.manager_preferred_name = groupManager.getValue('u_preferred_name');
            jsonObj.is_manager_active = true;

        } else if (JSUtil.notNil(groupEmail)) {
            jsonObj.group_email = groupEmail;
            jsonObj.is_manager_active = false;
        }

    }

}