Need to modify "My Request" widget on service portal

Rahul84
Tera Contributor

Hi Team/ @Ankur Bawiskar / @Sandeep Dutta ,

This is regarding the "My Request" widget on service portal. As of now , OOB we can see REQ. RITMs & INC under "My Request" if we submitted any catalog through service portal.

I wanted to add some custom tables record numbers as well on submission of records producer/catalogs through service portal under "My Request".

I know we need to modify the my request widget and need to modify server side code.

But could you please help me where exactly I can add that code so that customize table records also visible there.

My request widget- server side code below

(function() {
 
var localInput = input; //to safeguard pullution of "input" via BR or other scripts
 
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');
data.filterMsg = gs.getMessage("Search open requests");
 
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');
 
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);
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
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());
 
if (alsoRequest) {
var ritmGR = new GlideRecord('sc_req_item');
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");
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;
})();
4 REPLIES 4

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

check this link which has solution

My Request widget with multiple tables

also check this

Multiple Tickets types in Single Widget - My Tickets Page

Regards
Ankur

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

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

if your custom tables are extended from task then you can add a record into this table under My Request Filters -> Service Catalog

find_real_file.png

Regards
Ankur

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

Thanks Ankur for the response, if we are not extending the custom tables from task table.

will there be any possibility to make the custom table records visible under "My request" on Portal.

 

Did you check link I shared already?

Regards
Ankur

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