I want to view "Watch List" tickets in the "My requests" page in employee center portal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-01-2024 12:18 AM
Hello Everyone,
We have a have requirement to show "Watch List" tickets for the logged in user in "My Requests" page in Employee center portal.
OOTB widget(my request) we have open, closed filter configured so I have added one more filter "Watchlist requests".
So when I click on that, it should fetch the tickets for which the user is added in watch list.
If anyone has worked on it please help me with the changes that needs to be done.
Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2024 10:42 PM - edited 03-29-2024 10:46 PM
Hi Ram,
Open the below link, It will take you to the widget(Add your domain to the URL).
URL: https://<Input Your Domain>.service-now.com/now/nav/ui/classic/params/target/sp_widget.do%3Fsys_id%3Df1672671d7301200a9addd173e24d47d%26sysparm_record_target%3Dsp_widget%26sysparm_record_row%3D1%26sysparm_record_rows%3D2%26sysparm_record_list%3DnameSTARTSWITHmy%2Brequests%255EORDERBYDESCsys_updated_on
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-01-2024 08:03 AM
Hi @Community Alums : I realized that OOB My Request widget has been changed in Washington release and the script has also been changed. Have you tried the same in Washington release?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-01-2024 05:43 AM
Can you recreate these steps with the new revision? Some of the scripting has changed.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2024 09:33 PM
@Community Alums :Currently I'm in Washington DC version
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2025 08:59 AM
Here are the updates for clones My Requests Widget in Washington
Client controller
function($scope, spAriaUtil, i18n, spModal) {
var c = this;
c.trackPage = function() {
window.GlideWebAnalytics.trackEvent("Service Catalog", "Catalog My Requests", "My Requests Widget Loaded");
}
if (c.data.is_new_order)
spAriaUtil.sendLiveMessage(c.data.requestSubmitMsg);
c.viewFilter = 'open';
c.filterOptions = [{key:'open',value:c.data.messages.openRequests},{key:'close',value:c.data.messages.closedRequests},{key:'watchlist',value:c.data.messages.watchlistRequests}]; //added watchlist
c.changeView = function() {
window.GlideWebAnalytics.trackEvent("Service Catalog", "Catalog My Requests", "Open/Close Filter Toggled");
c.server.get({
action: "change_view",
view: c.viewFilter,
search_text: c.filterText
}).then(function(response) {
c.data = response.data;
var resultMsg = (c.data.request.req_list.length == 1 ? 'result' : 'results') + ' returned';
spAriaUtil.sendLiveMessage(i18n.getMessage('{0} ' + resultMsg).withValues([c.data.request.req_list.length]));
});
}
c.search = function() {
c.server.get({
action: 'search',
search_text: c.filterText,
view: c.viewFilter
}).then(function(response) {
c.data = response.data;
var resultMsg = (c.data.request.req_list.length == 1 ? 'result' : 'results') + ' returned';
spAriaUtil.sendLiveMessage(i18n.getMessage('{0} ' + resultMsg).withValues([c.data.request.req_list.length]));
});
}
c.checkEnter = function(event) {
if (event.which === 13)
c.search();
}
c.filterDraftItem = function(item) {
if (!c.data.draftSearchText)
return true; // If no searchText, return true to show all items
var searchText = c.data.draftSearchText.toLowerCase();
// Perform the filtering based on item.name or item.displayName
return (
(item.name && item.name.toLowerCase().includes(searchText)) ||
(item.cart_item_name && item.cart_item_name.toLowerCase().includes(searchText))
);
};
c.updateFilteredDraftItems = function() {
if (!c.data.draftItems)
return;
if (!c.data.draftSearchText)
c.filteredDraftItems = c.data.draftItems;
else {
c.filteredDraftItems = c.data.draftItems.filter(function(item) {
return c.filterDraftItem(item)
});
}
}
c.filteredDraftItems = [];
c.updateFilteredDraftItems();
c.removeDraftItem = function(cartItem) {
var options = {
title: c.data.deleteDraftItemMsg,
headerStyle: {
border: 'none',
'padding-bottom': 0
},
footerStyle: {
border: 'none',
'padding-top': 0
},
messageOnly: true,
buttons: [{
label: c.data.dialogCancel,
primary: false
}, {
label: c.data.dialogDelete,
//class: 'btn-danger',
primary: true
}],
};
spModal.open(options).then(function(actionButton) {
if (actionButton) {
if (!actionButton.primary)
return;
c.fetchingDrafts = true;
c.server.get({
action: "remove_item",
removeItemID: cartItem.sys_id,
prevLimit : c.data.draftItems && c.data.draftItems.length ? c.data.draftItems.length : 100,
attachmentTable: cartItem.attachment_table
}).then(function(response) {
c.data.draftItems = response.data.draftItems;
c.data.hasMoreDrafts = response.data.hasMoreDrafts;
c.updateFilteredDraftItems();
c.fetchingDrafts = false;
});
}
});
}
c.loadMore = function() {
window.GlideWebAnalytics.trackEvent("Service Catalog", "Catalog My Requests", "Show More Clicked");
var currentRequests = c.data.request.req_list.length;
spAriaUtil.sendLiveMessage("${Loading more requests}");
c.fetching = true;
c.server.get({
action: 'fetch_more',
lastLimit: c.data.lastLimit,
view: c.viewFilter,
search_text: c.filterText
}).then(function(response) {
var addedRequests = response.data.request.req_list.length - currentRequests;
var resultMsg = (addedRequests == 1 ? 'request' : 'requests') + ' added';
spAriaUtil.sendLiveMessage(i18n.getMessage('{0} ' + resultMsg).withValues([addedRequests]));
c.data = response.data;
c.fetching = false;
});
}
c.loadMoreDrafts = function() {
c.fetchingDrafts = true;
c.server.get({
action : 'fetch_more_draft_items',
prevLimit: c.data.draftItems && c.data.draftItems.length ? c.data.draftItems.length : 100,
}).then(function(response){
c.data.draftItems = response.data.draftItems;
c.data.hasMoreDrafts = response.data.hasMoreDrafts;
c.updateFilteredDraftItems();
c.fetchingDrafts = false;
});
}
c.changeSelectedTab = function(selectedTab) {
c.data.isRequestsTabActive = selectedTab == "requests";
c.data.isDraftsTabActive = selectedTab == "drafts";
}
}
Server Script
(function() {
var localInput = input; //to safeguard pullution of "input" via BR or other scripts
var itemsObj;
if (localInput && localInput.action === "remove_item") {
var cartRecord = new sn_sc.CartJS('draft_items');
cartRecord.remove(localInput.removeItemID);
itemsObj = getDraftItems(localInput.prevLimit);
data.draftItems = itemsObj.items;
data.hasMoreDrafts = itemsObj.hasMore;
if (!gs.nil(localInput.attachmentTable))
new global.GlobalServiceCatalogUtil().deleteAttachments(localInput.attachmentTable, localInput.removeItemID);
return;
}
if (localInput && localInput.action == "fetch_more_draft_items") {
itemsObj = getDraftItems(localInput.prevLimit + 100);
data.draftItems = itemsObj.items;
data.hasMoreDrafts = itemsObj.hasMore;
return;
}
var alsoRequest = false;
var msg = data.messages = {};
msg.myRequestsTitle = options.title ? gs.getMessage(options.title) : gs.getMessage('My Requests');
msg.openRequests = gs.getMessage('Open requests');
msg.closedRequests = gs.getMessage('Closed requests');
msg.watchlistRequests = gs.getMessage('Watchlist requests'); //add watchlist view option
msg.showMoreRequests = gs.getMessage('Show More Requests');
data.filterMsg = gs.getMessage("Search open requests");
data.draftFilterMsg = gs.getMessage("Search draft items");
data.draftItemsMsg = gs.getMessage("Draft Items");
data.deleteDraftItemMsg = gs.getMessage("Are you sure you want to delete the draft item?");
data.dialogCancel = gs.getMessage('Cancel');
data.dialogDelete = gs.getMessage('Delete draft');
data.draftSearchText = $sp.getParameter("draftSearchText");
var selectDraftTab = $sp.getParameter('selectDraftTab');
//localInput will be undefined only on the first load.
if (gs.nil(localInput)) {
data.isRequestsTabActive = !data.draftSearchText && !selectDraftTab;
data.isDraftsTabActive = !!data.draftSearchText || selectDraftTab;
} else {
data.isRequestsTabActive = true;
data.isDraftsTabActive = false;
}
if (gs.nil(data.draftSearchText))
data.draftSearchText = "";
else
data.draftSearchText = decodeURIComponent(data.draftSearchText);
data.hide_draft_tab = (gs.getProperty('glide.sc.disable.save_as_draft') == 'true') || (gs.getProperty('glide.sc.enable.save_as_draft.portal.' + $sp.getPortalRecord().getValue("url_suffix")) != 'true');
var recordTable = options.record_table || $sp.getParameter("table");
var recordId = options.record_id || $sp.getParameter("sys_id");
data.is_associated_ticket_tab = options.is_associated_ticket_tab;
if (localInput && localInput.view === 'open')
data.filterMsg = gs.getMessage("Search open requests");
else if (localInput && localInput.view === 'close')
data.filterMsg = gs.getMessage("Search closed requests");
else if (localInput && localInput.view === 'watchlist') //added for search
data.filterMsg = gs.getMessage("Search watchlist requests");
data.is_new_order = (($sp.getParameter("is_new_order") + '') === "true");
data.requestSubmitMsg = gs.getMessage('Thank You. Your request has been submitted');
var draftItemsObj = getDraftItems(100);
data.draftItems = draftItemsObj.items;
data.hasMoreDrafts = draftItemsObj.hasMore;
function getDraftItems(limit) {
var userID = gs.getUser().getID();
var cart = new SPCart("draft_items", userID);
if (!gs.nil(cart) && typeof cart.getItemsWithPagination === "function")
itemsObj = cart.getItemsWithPagination('sys_updated_on', limit);
else {
gs.info("Drafts tab is hidden as we are either unable to fetch the draft cart or the SPCart script include is customized.");
data.hide_draft_tab = true;
itemsObj = {};
}
return itemsObj;
}
function getField(gr, name) {
var f = {};
var id = gr.getUniqueValue();
gr = new GlideRecord(gr.getRecordClassName());
gr.get(id);
f.display_value = gr.getDisplayValue(name);
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;
if (rq_filter.isValidField('table'))
tableName = rq_filter.table;
var gr = new GlideRecord(tableName);
if (!gr.isValid())
continue;
gr.addQuery(rq_filter.filter);
gr.query();
if (tableName == 'sc_request')
alsoRequest = true;
while (gr.next()) {
var portalSettings = {};
portalSettings.page = rq_filter.portal_page.nil() ? '' : rq_filter.portal_page.getDisplayValue() + '';
portalSettings.primary_display = rq_filter.primary_display.nil() ? '' : rq_filter.primary_display + '';
portalSettings.secondary_displays = rq_filter.secondary_display.nil() ? '' : rq_filter.secondary_display + '';
ids[gr.sys_id + ''] = portalSettings;
}
}
return ids;
}
// retrieve the request's
var myRequestMap = getMyRequestSysIds();
var taskIDs = Object.keys(myRequestMap);
var gr = new GlideRecordSecure('task');
if (!data.is_associated_ticket_tab) {
if (localInput && localInput.view === 'open')
gr.addActiveQuery();
else if (localInput && localInput.view === 'close')
gr.addQuery('active', 0);
else if (localInput && localInput.view === 'watchlist') //query for watchlist
gr.addQuery('watch_list', 'CONTAINS',gs.getUserID());
else
gr.addActiveQuery();
} else {
if (recordTable != 'universal_request') {
//Check if universal_request field is present and it is a universal request
var taskRecord = new GlideRecordSecure('task');
taskRecord.get(recordId);
if (taskRecord.isValid() && !taskRecord.universal_request.nil()) {
var qc = gr.addQuery('parent', taskRecord.universal_request);
qc.addOrCondition('parent', 'IN', new sn_uni_req.UniversalRequestUtilsSNC().getChildRequests(taskRecord.universal_request));
} else
gr.addQuery('parent', recordId);
} else {
var qc = gr.addQuery('parent', recordId);
qc.addOrCondition('parent', 'IN', new sn_uni_req.UniversalRequestUtilsSNC().getChildRequests(recordId));
}
}
gr.orderByDesc('sys_updated_on');
if (localInput && localInput.search_text) {
var req = [];
var task = new GlideRecordSecure('task');
task.addQuery('123TEXTQUERY321', localInput.search_text);
if (localInput && localInput.view === 'open')
task.addQuery('active', 1);
else if (localInput && localInput.view === 'close')
task.addQuery('active', 0);
else
task.addQuery('active', 1);
task.addQuery('sys_id', taskIDs);
task.query();
while (task.next())
req.push(task.getUniqueValue());
var ritmGR = new GlideRecord('sc_req_item');
if (alsoRequest && ritmGR.isValid()) {
if (localInput && localInput.view === 'open')
ritmGR.addQuery('request.active', 1);
else if (localInput && localInput.view === 'close')
ritmGR.addQuery('request.active', 0);
else
ritmGR.addQuery('request.active', 1);
ritmGR.addQuery('123TEXTQUERY321', localInput.search_text);
ritmGR.addQuery('request.sys_id', taskIDs);
ritmGR.query();
while (ritmGR.next())
req.push(ritmGR.getValue('request'));
}
gr.addQuery('sys_id', req);
} else
gr.addQuery('sys_id', taskIDs);
gr.query();
data.request = {};
data.request.req_list = [];
var recordIdx = 0;
var limit = options.items_per_page ? options.items_per_page : 15;
if (localInput && localInput.action == 'fetch_more')
data.lastLimit = localInput.lastLimit + limit;
else
data.lastLimit = limit;
data.hasMore = false;
while (recordIdx != data.lastLimit && gr.next()) {
var portalSettings = myRequestMap[gr.getUniqueValue()];
if (typeof portalSettings == 'undefined')
portalSettings = {};
var record = {};
record.sys_id = gr.getValue('sys_id');
if (gr.getRecordClassName() == 'sc_request') {
var ritm = new GlideRecord("sc_req_item");
if (!ritm.isValid())
continue;
ritm.addQuery("request", gr.getUniqueValue());
ritm.query();
if (ritm.getRowCount() == 0)
continue;
if (ritm.getRowCount() > 1)
record.display_field = gs.getMessage("{0} requested items", ritm.getRowCount());
else {
ritm.next();
record.display_field = ritm.cat_item.getDisplayValue() || ritm.getDisplayValue("short_description");
}
record.url = {
id: portalSettings.page ? 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 ? portalSettings.page : 'ticket',
table: gr.getRecordClassName(),
sys_id: record.sys_id
};
}
record.display_number = getField(gr, 'number').display_value || '';
if (portalSettings.secondary_displays) {
record.secondary_displays = [];
portalSettings.secondary_displays.split(",").forEach(function(sDisplay) {
record.secondary_displays.push(getField(gr, sDisplay));
});
} else
record.secondary_displays = 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;
})();