- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-06-2025 04:32 AM
Hello everyone,
I'm having an issue with the "My Requests" widget on the portal. When I try to search using the search bar:
I tryed:
// Incidents disappear from the list, and only request items remain.
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);
var userID = gs.getUserID();
var orQuery = task.addQuery('sys_class_name', 'sc_request');
orQuery.addCondition('requested_for', userID);
orQuery = task.addQuery('sys_class_name', 'incident');
orQuery.addCondition('caller_id', userID);
task.query();
//My items appear correctly, but the search returns all incidents across the instance, not just mine.
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);
var userID = gs.getUserID();
var taskFilter = task.addQuery('sys_class_name', 'IN', ['sc_request', 'incident']);
taskFilter.addOrCondition('caller', userID);
task.query();
//It returns all incidents again, and when searching by short description, it brings back the incident number instead.
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);
var userID = gs.getUserID();
task.addEncodedQuery("(sys_class_name=sc_request^requested_for=" + userID + ")^OR(sys_class_name=incident^caller_id=" + userID + ")");
//task.addQuery('sys_id', taskIDs);
task.query();
Could anyone please help me figure this out?
HTML
<div class="panel panel-default b" ng-init="c.trackPage()">
<div class="panel-heading" ng-show="::!data.is_associated_ticket_tab">
<h2 class="panel-title">{{::data.messages.myRequestsTitle}}</h2>
</div>
<uib-tabset role="tablist" ng-hide="::c.data.hide_draft_tab">
<uib-tab role="tab" active="c.data.isRequestsTabActive" select="c.changeSelectedTab('requests')" index="requests" class="uib-vis-tab" heading="${Submitted requests}">
<div ng-include="'myRequests'"></div>
</uib-tab>
<uib-tab role="tab" active="c.data.isDraftsTabActive" select="c.changeSelectedTab('drafts')" index="drafts" class="uib-vis-tab" heading="${Drafts}">
<div ng-include="'draftItemsTemplate'"></div>
</uib-tab>
</uib-tabset>
<div ng-include="'myRequests'" ng-show="::c.data.hide_draft_tab"></div>
<script type="text/ng-template" id="draftItemsTemplate">
<div class="panels-container list-group">
<div ng-show="::c.data.draftItems.length > 0" class="list-group-item row requests-header-container">
<div class="col-md-4 col-xs-12 padding-left-large fit-content">
<div class="input-group" style="width:100%">
<input ng-model="c.data.draftSearchText" ng-change="c.updateFilteredDraftItems()" class="form-control" style="width:100%" placeholder="{{c.data.draftFilterMsg}}" aria-label="{{c.data.draftFilterMsg}}">
<span class="input-group-btn">
<button class="btn btn-default align-icon" type="button" data-original-title="{{c.data.draftFilterMsg }}" aria-label="{{c.data.draftFilterMsg }}" data-toggle="tooltip" data-placement="bottom">
<i class="fa fa-search"></i>
</button>
</span>
</div><!-- /input-group -->
</div>
</div>
<div ng-if="c.data.draftItems.length > 0 && (!c.filteredDraftItems || c.filteredDraftItems.length == 0)" class="panel-body panels-container">
${Search didn't match any draft items}
</div>
<div ng-if="c.data.draftItems.length == 0" class="panel-body panels-container">
${You do not have any draft items}
</div>
<div role="table" ng-if="(c.filteredDraftItems && c.filteredDraftItems.length > 0)" class="table" aria-label="{{::c.data.draftItemsMsg}}">
<div role="rowgroup" class="column-headers">
<div role="row" class="list-group-item table-responsive">
<span role="columnheader" class="col-xs-4 padder-r-none padder-l-none">${Draft name}</span>
<span role="columnheader" class="col-xs-4 padder-r-none padder-l-none">short_description</span>
<span role="columnheader" class="col-xs-2 padder-md">${Item name}</span>
<span role="columnheader" class="col-xs-1 padder-r-none padder-l-none">${updated_capital}</span>
<span role="columnheader" class="col-xs-1 padder-r-none padder-l-none"></span>
</div>
</div>
<ul role="rowgroup" class="padder-l-none padder-r-none">
<li role="row" ng-repeat="item in c.filteredDraftItems" class="list-group-item draft-item-row table-responsive" style="margin:0px" >
<div role="cell" class="draft-item-cell col-xs-4 padder-l-none padder-r-none main-column">
<div class="primary-display text-wrap">
<a href="?id={{'sc_cat_item'}}&{{'edit=draft'}}&sys_id={{::item.sys_id}}" aria-label="{{::item.cart_item_name}}"> {{::item.cart_item_name}} </a>
</div>
</div>
<div role="cell" class="draft-item-cell col-xs-4 padder-md">
<div class="text-wrap">
<span> {{::item.name}}</span>
</div>
</div>
<div role="cell" class="draft-item-cell col-xs-2 padder-l-none padder-r-none description-column">
${Short_description}
</div>
<div role="cell" class="draft-item-cell col-xs-2 padder-l-none padder-r-none updated-column">
<div class="updated">
<i class="fa fa-clock-o" aria-hidden="true" title="${Updated}"></i>
<sn-time-ago timestamp="::item.sys_updated_on"/>
</div>
</div>
<div role="cell" class="draft-item-cell col-xs-1 padder-l-none padder-r-none">
<div class="btn-group btn-group-sm">
<button type="button" class="btn btn-clear" ng-click="c.removeDraftItem(item)" data-toggle="tooltip" data-placement="top" data-container="body" title="${Remove Draft Item}">
<i class=" icon-trash btn-remove" aria-hidden="true"></i>
</button>
</div>
</td>
</li>
</ul>
</div>
</div>
<div class="col-sm-12 pull-none" ng-if="c.data.hasMoreDrafts" style="padding-bottom:15px">
<div class="text-a-c" ng-if="c.fetchingDrafts">
<i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i>
<span class="sr-only">${Loading more draft items}</span>
</div>
<button class="btn btn-default btn-show-more" ng-click="c.loadMoreDrafts()">${Show more drafts}</button>
</div>
</script>
<script type="text/ng-template" id="myRequests">
<div class="panels-container list-group">
<div ng-show="::!data.is_associated_ticket_tab" class="list-group-item row requests-header-container">
<div class="col-md-3 col-xs-12 m-b-sm fit-content">
<div class="form-inline control-view" ng-if="c.options.show_view == 'true'">
<label class="control-label hidden-xs wrapper-xs " id="label_view" for="view">${View}</label>
<select ng-model="c.viewFilter" id="view" class="form-control adjust-width" ng-change="c.changeView()" style="width:80%"
ng-options="item.key as item.value for item in c.filterOptions">
</select>
</div>
</div>
<div class="col-md-4 col-xs-12 padding-left-large fit-content">
<div class="input-group" style="width:100%">
<input ng-model="c.filterText" ng-keypress="c.checkEnter($event)"class="form-control" style="width:100%" placeholder="{{data.filterMsg}}" aria-label="{{data.filterMsg}}">
<span class="input-group-btn">
<button class="btn btn-default align-icon" type="button" ng-click="c.search()" data-original-title="{{data.filterMsg}}" aria-label="{{data.filterMsg}}" data-toggle="tooltip" data-placement="bottom">
<i class="fa fa-search"></i>
</button>
</span>
</div><!-- /input-group -->
</div>
</div>
<div ng-if="c.data.request.req_list.length == 0 && !c.filterText" class="panel-body panels-container">
${You do not have any requests}
</div>
<div ng-if="c.data.request.req_list.length == 0 && c.filterText" class="panel-body panels-container">
${Search didn't match any requests}
</div>
<div role="table" ng-if="c.data.request.req_list.length > 0" class="table" aria-label="{{::data.messages.myRequestsTitle}}">
<div ng-show="::!data.is_associated_ticket_tab" role="rowgroup" class="column-headers">
<div role="row" class="list-group-item table-responsive">
<span role="columnheader" class="col-xs-2 padder-r-none padder-l-none">${Request}</span>
<span role="columnheader" class="col-xs-6 padder-r-none padder-l-none">Short Description</span>
<span role="columnheader" class="col-xs-2 padder-r-none padder-l-none">${State}</span>
<span role="columnheader" class="col-xs-2 padder-r-none padder-l-none">${updated_capital}</span>
</div>
</div>
<ul role="rowgroup" class="padder-l-none padder-r-none">
<li role="row" class="list-group-item table-responsive" ng-repeat="item in c.data.request.req_list | limitTo: c.data.lastLimit track by item.sys_id" style="margin:0px" >
<div role="cell" class="col-xs-2 padder-l-none padder-r-none main-column">
<div class="primary-display">
<a href="?id={{::item.url.id}}&table={{::item.url.table}}&sys_id={{::item.url.sys_id}}" sn-focus="{{::item.highlight}}"> {{::item.display_number}} </a>
</div>
<!-- <small class="text-muted">
<div ng-repeat="f in item.secondary_displays" class="secondary-display">
<span >{{::f.display_value}}</span>
<pre>{{item.secondary_displays}}</pre>
</div>
</small> -->
</div>
<div role="cell" class="col-xs-6 padder-l-none padder-r-none state-column">
<div class="description" ng-if="item.display_field_shortReq.display_value">
<span>
{{::item.display_field_shortReq.display_value}}
</span>
</div>
<div class="description" ng-if="!item.display_field_shortReq.display_value">
<span>
{{::item.display_field}}
</span>
</div>
</div>
<div role="cell" class="col-xs-2 padder-l-none padder-r-none state-column">
<div class="state">
<span> {{::item.state}}</span>
</div>
</div>
<div role="cell" class="col-xs-2 padder-l-none padder-r-none updated-column">
<div class="updated">
<i class="fa fa-clock-o" aria-hidden="true" title="${Updated}"></i>
<sn-time-ago timestamp="::item.updated_on"/>
</div>
</div>
</li>
</ul>
</div>
<div class="col-sm-12 pull-none" ng-if="c.data.hasMore" style="padding-bottom:15px">
<div class="text-a-c" ng-if="c.fetching">
<i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i>
<span class="sr-only">${Loading more requests}</span>
</div>
<button class="btn btn-default btn-show-more" ng-click="c.loadMore()"> {{::data.messages.showMoreRequests}} </button>
</div>
</script>
Client
(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.showMoreRequests = gs.getMessage('Show More Requests');
msg.requestsTabLabel = gs.getMessage("Submitted requests");
msg.draftsTabLabel = gs.getMessage("Drafts");
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");
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.enableSecurityFeature('data_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
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 userID = gs.getUserID();
var task = new GlideRecordSecure('task');
task.addQuery('123TEXTQUERY321', localInput.search_text);
task.addEncodedQuery("(sys_class_name=sc_request^requested_for=" + userID + ")^OR(sys_class_name=incident^caller_id=" + userID + ")");
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.enableSecurityFeature('data_filter');
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') {
record.display_field_shortReq = getField(gr, 'short_description');
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;
})();
Server:
function($scope, spAriaUtil, i18n, spModal) {
var c = this;
c.translateDeleteDraftMsg = function(draftItemName) {
return i18n.getMessage('Delete {0}').withValues([draftItemName]);
}
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}];
c.tabs = [{id : 'requests', template : 'myRequestsTemplate', heading : c.data.messages.requestsTabLabel, active: c.data.isRequestsTabActive}, {id : 'drafts', template : 'draftItemsTemplate', heading : c.data.messages.draftsTabLabel, active: c.data.isDraftsTabActive}];
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";
}
}
Thanks in advanced
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-07-2025 05:14 AM
then check the My Request Filter configurations
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-07-2025 05:14 AM
then check the My Request Filter configurations
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-06-2025 06:30 PM
hi @Paulo Machado ,
Hey there! I see you're having trouble with the "My Requests" widget search functionality. Here's what I'd suggest:
First, identify the exact widget:
On the portal page, press Ctrl + Right-click on the widget
Select "Open in Widget Editor" - this will show you the widget's name
Check the widget record:
Once you have the name, go to:
Service Portal > Widgets
(or navigate to the sp_widget table directly)Find your widget in the list
Roll back if needed:
Open the widget record
Go to the "Versions" related list (bottom of the form)
Look for a previous version that worked correctly
Click "Rollback" on that version
Pro Tip: Before rolling back:
✔ Check if there were recent updates to the widget
✔ Look at the "Update Set" history to see what changed
✔ Consider testing in a sub-production instance first
If you're still stuck after trying this, let me know:
The exact name of the widget
What happens when you search (any error messages?)
Which ServiceNow version you're on
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-07-2025 03:46 AM
Hi @Community Alums
I duplicated the OOTB item, but it never worked.