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 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>';