" My Request " widgets modified
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2024 01:19 AM
" 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