" My Request " widgets modified

RadZz
Tera Contributor

" My Request " widget is showing results where if a user is assigned to "Task " then he can also see cases related to that " Task ". We want to modify our code so that user assigned to " Task " should not see those parent cases of their assigned Task.

 

Server Script: 

(function() {
    var localInput = input || {}; // Safeguard against undefined "input"
    var alsoRequest = false;
    data.filterMsg = gs.getMessage("Search open requests");
    if (localInput.view === 'open') {
        data.filterMsg = gs.getMessage("Search open requests");
    } else if (localInput.view === 'close') {
        data.filterMsg = gs.getMessage("Search closed requests");
    }
    // Retrieve HR case IDs to exclude from task view
    var hrCaseIdsToExclude = [];
    var userTaskGR = new GlideRecordSecure('task');
    userTaskGR.addQuery('assigned_to', gs.getUserID());
    userTaskGR.addQuery('parent', 'ISNOTEMPTY');
    userTaskGR.query();
    while (userTaskGR.next()) {
        if (userTaskGR.parent.getRefRecord().getRecordClassName() === 'sn_hr_core_case') {
            hrCaseIdsToExclude.push(userTaskGR.parent.toString());
        }
    }
    function getField(gr, name) {
        if (!gr || !name) return {}; // Safeguard
        var f = {};
        var id = gr.getUniqueValue();
        gr = new GlideRecord(gr.getRecordClassName());
        gr.get(id);
        f.display_value = gr.getDisplayValue(name);
        var des = gr.description ? gr.description.toString() : '';
        if (gr.getRecordClassName() === 'sc_request') {
            f.subject_person = gr.getDisplayValue('requested_for');
            var grRITM = new GlideRecord('sc_req_item');
            grRITM.get('request', gr.sys_id);
            f.description = grRITM.description ? grRITM.description.toString() : '';
        } else if (gr.getRecordClassName() === 'sn_cg_content_request') {
            f.subject_person = gr.getDisplayValue('opened_by');
            f.description = des;
        } else {
            f.subject_person = gr.getDisplayValue('subject_person');
            f.description = des;
        }
        f.value = gr.getValue(name);
        var ge = gr.getElement(name);
        if (ge) {
            var ed = ge.getED();
            if (ed) f.type = ed.getInternalType();
            f.label = ge.getLabel();
        }
        return f;
    }
    function getMyRequestSysIds() {
        var ids = {};
        var rq_filter = new GlideRecord('request_filter');
        rq_filter.addActiveQuery();
        if (rq_filter.isValidField('applies_to'))
            rq_filter.addQuery('applies_to', 1).addOrCondition('applies_to', 10);
        rq_filter.query();
        while (rq_filter.next()) {
            var tableName = rq_filter.table_name || rq_filter.table;
            var gr = new GlideRecord(tableName);
            gr.addQuery(rq_filter.filter);
            gr.query();
            if (tableName === 'sc_request') alsoRequest = true;
            while (gr.next()) {
                var portalSettings = {};
                portalSettings.page = rq_filter.portal_page ? rq_filter.portal_page.getDisplayValue() : '';
                portalSettings.primary_display = rq_filter.primary_display ? rq_filter.primary_display.toString() : '';
                portalSettings.secondary_displays = rq_filter.secondary_display ? rq_filter.secondary_display.toString() : '';
                ids[gr.sys_id + ''] = portalSettings;
            }
        }
        return ids;
    }
    var myRequestMap = getMyRequestSysIds();
    var taskIDs = Object.keys(myRequestMap);
    var gr = new GlideRecordSecure('task');
    if (localInput.view === 'open') {
        gr.addActiveQuery();
    } else if (localInput.view === 'close') {
        gr.addQuery('active', false);
    } else {
        gr.addActiveQuery();
    }
    gr.orderByDesc('sys_updated_on');
    if (localInput.search_text) {
        var req = [];
        var task = new GlideRecordSecure('task');
        task.addEncodedQuery('numberLIKE' + localInput.search_text + '^ORshort_descriptionLIKE' + localInput.search_text + '^ORdescriptionLIKE' + localInput.search_text);
        task.addQuery('sys_id', taskIDs);
        task.addQuery('parent', 'NOT IN', hrCaseIdsToExclude);
        task.query();
        while (task.next()) req.push(task.getUniqueValue());
        if (alsoRequest) {
            var ritmGR = new GlideRecord('sc_req_item');
            ritmGR.addQuery('request.active', localInput.view === 'open' ? 1 : 0);
            ritmGR.addQuery('IR_AND_OR_QUERY', localInput.search_text);
            ritmGR.addQuery('request.sys_id', taskIDs);
            ritmGR.addQuery('request.parent', 'NOT IN', hrCaseIdsToExclude);
            ritmGR.query();
            while (ritmGR.next()) req.push(ritmGR.getValue('request'));
        }
        gr.addQuery('sys_id', req);
    } else {
        gr.addQuery('sys_id', taskIDs);
        gr.addQuery('parent', 'NOT IN', hrCaseIdsToExclude);
    }
    gr.query();
    data.request = {};
    data.request.req_list = [];
    var recordIdx = 0;
    var limit = options.items_per_page || 25;
    data.lastLimit = localInput.action === 'fetch_more' ? localInput.lastLimit + limit : limit;
    data.hasMore = false;
    while (recordIdx < data.lastLimit && gr.next()) {
        var portalSettings = myRequestMap[gr.getUniqueValue()] || {};
        var record = { sys_id: gr.getValue('sys_id') };
        if (gr.getRecordClassName() === 'sc_request') {
            var ritm = new GlideRecord("sc_req_item");
            ritm.addQuery("request", gr.getUniqueValue());
            ritm.query();
            if (ritm.getRowCount() === 0) continue;
            record.display_field = ritm.getRowCount() > 1 ?
                gs.getMessage("{0} requested items", ritm.getRowCount()) :
                ritm.next() && (ritm.cat_item.getDisplayValue() || ritm.getDisplayValue("short_description"));
            record.url = { id: portalSettings.page || 'sc_request', table: 'sc_request', sys_id: record.sys_id };
        } else {
            record.display_field = portalSettings.primary_display ? getField(gr, portalSettings.primary_display).display_value : getField(gr, 'number').display_value;
            record.url = { id: portalSettings.page || 'ticket', table: gr.getRecordClassName(), sys_id: record.sys_id };
        }
        record.secondary_displays = portalSettings.secondary_displays ?
            portalSettings.secondary_displays.split(",").map(sDisplay => getField(gr, sDisplay)) :
            getField(gr, 'short_description');
        record.updated_on = gr.getValue('sys_updated_on');
        record.state = gr.getDisplayValue('state');
        if ((recordIdx !== 0) && (data.lastLimit - limit === recordIdx)) record.highlight = true;
        data.request.req_list.push(record);
        recordIdx++;
    }
    if (gr.next()) data.hasMore = true;
})();
 
 
I did some modifications but it doesnt work. Please have a look and let me know the error / change.. Also I need to add new module cases shown in this My Request so can I do it with My Request Filters?
 
 
 
 
 
TIA 🙂
0 REPLIES 0