Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

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

 

47 REPLIES 47

pratyusha11
Tera Contributor
var overdueRecords = [];
var existingChangeEmails = [];
var existingCTaskEmails = [];

// ============================================================
// HELPER: Check if user is active
// ============================================================
function isActiveUser(user) {
    var isActive = false;
    if (user.isValidRecord()) {
        isActive = user.active;
    }
    return isActive;
}

// ============================================================
// HELPER: 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');
        }
    }
}

// ============================================================
// HELPER: 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;
        }
    }
}

// ============================================================
// 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 chgTaskId = chgSlaGR.getValue('task');
    if (chgTaskId && breachedChgIds.indexOf(chgTaskId) < 0) {
        breachedChgIds.push(chgTaskId);
    }
}

// ============================================================
// 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();

    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;

        var requestedBy = chgRecords.requested_by.getRefRecord();
        if (requestedBy && requestedBy.isValidRecord() && 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);
        }

        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);
        }
    }
}

// ============================================================
// 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);
    }
}

// ============================================================
// 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'));
    }
}

// ============================================================
// 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.orderBy('assigned_to');
    ctaskRecords.orderBy('assignment_group');
    ctaskRecords.query();

    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;

        var assignedTo = ctaskRecords.assigned_to.getRefRecord();
        if (assignedTo && assignedTo.isValidRecord() && isActiveUser(assignedTo)) {
            ctaskOverDueObj.is_user_active = true;
            ctaskOverDueObj.assigned_user_email = assignedTo.getValue('email');
            ctaskOverDueObj.assigned_user_preferred_name = assignedTo.getValue('u_preferred_name');
            ctaskOverDueObj.has_valid_email = JSUtil.notNil(ctaskOverDueObj.assigned_user_email);
            setManagerDetails(assignedTo, ctaskOverDueObj);
        } else {
            setGroupManagerDetails(ctaskOverDueObj.group, ctaskOverDueObj);
        }

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

// ============================================================
// STEP 5: Fire notifications
// ============================================================
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) {
        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]),
                ''
            );
        }
    }
}

pratyusha11
Tera Contributor
var chgGR = new GlideRecord('change_request');
if (chgGR.get('number', 'CHG0012345')) { // replace with your change number
    chgGR.production_system = true;
    chgGR.setWorkflow(false); // prevents triggering business rules/notifications, remove if you want them to fire
    chgGR.update();
    gs.print('Updated CHG: ' + chgGR.getValue('number') + ' | production_system = ' + chgGR.getValue('production_system'));
} else {
    gs.print('Change request not found.');
}

pratyusha11
Tera Contributor
emailContent += '<hr style="border:none; border-top:1px solid #cccccc; margin:12px 0;"/>'

pratyusha11
Tera Contributor
emailContent += '<hr style="border:none; border-top:1px solid #cccccc; margin:8px 0 12px 0;">';

pratyusha11
Tera Contributor
emailContent += '<div style="height:8px; line-height:8px; font-size:1px;">&nbsp;</div>';