On Portal – "My Requests" Search Bar Not Returning Incidents, Only Request Items

Paulo Machado
Kilo Sage

Hello everyone,

I'm having an issue with the "My Requests" widget on the portal. When I try to search using the search bar:

PauloMachado_0-1751800825666.png



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

1 ACCEPTED SOLUTION

@Paulo Machado 

then check the My Request Filter configurations

AnkurBawiskar_0-1751890486121.png

 

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

12 REPLIES 12

@Paulo Machado 

then check the My Request Filter configurations

AnkurBawiskar_0-1751890486121.png

 

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Community Alums
Not applicable

hi @Paulo Machado ,

Hey there! I see you're having trouble with the "My Requests" widget search functionality. Here's what I'd suggest:

  1. 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

  2. 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

  3. 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

Hi @Community Alums 
I duplicated the OOTB item, but it never worked.