My Request Widget Issue

Aparna Gurav
Tera Contributor

Hello Team,

 

I need your help.

My request widget is not working properly for the end user.

On the service portal side Request state is not updating to close complete for the end user.

Any suggestion, How to fix this issue?

 

AparnaGurav_0-1680701265109.png

AparnaGurav_1-1680701428461.png

 

 

 

 

3 REPLIES 3

SwarnadeepNandy
Mega Sage

Hello @Aparna Gurav ,

From your screenshot, what I observed is that "State" and "Request Sate" are 2 different fields. So, its highly possible that you have different values in different fields. 

 

State field is from Task table

Request (sc_request) is child of Task table, so State field is inherited in Request table.

Request State is a field on Request table.

 

Request State field has following options

  • Pending Approval
  • Approved
  • Closed Complete
  • Closed Incomplete
  • Closed Cancelled
  • Closed Rejected
  • Closed Skipped

State field for Request has no choice values defined, so it inherits Task table choice values.

  • Pending
  • Open
  • Work In Progress
  • Closed Complete
  • Closed Incomplete
  • Closed Skipped

 

So, I think what you are looking for is to put Request State field in the portal view.

 

Best Regards,

Swarnadeep Nandy

 

 

@SwarnadeepNandy : Thank you for the reply.

 

Any suggestion on how to sync the Request state to state?

please find below server side script

 

(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.allRecords = gs.getMessage('All');
msg.openRequests = gs.getMessage('Open');
msg.closedRequests = gs.getMessage('Closed');

msg.all = gs.getMessage('All');
msg.incident = gs.getMessage('Incident');
msg.changeRequest = gs.getMessage('Change Request');
msg.problem = gs.getMessage('Problem');
msg.requests = gs.getMessage('Requests');

msg.showMoreRequests = gs.getMessage('Show More');
data.filterMsg = gs.getMessage("Search");

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;


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');

if (localInput && localInput.viewTable === 'all')
rq_filter.addActiveQuery();
if (localInput && localInput.viewTable === 'incident')
rq_filter.addEncodedQuery('title=Incident Portal');
else if (localInput && localInput.viewTable === 'changeRequest')
rq_filter.addEncodedQuery('title=Change Request Portal');
else if (localInput && localInput.viewTable === 'problem')
rq_filter.addEncodedQuery('title=Problem Portal');
else if (localInput && localInput.viewTable === 'requests')
rq_filter.addEncodedQuery('title=Service Catalog Request Portal');

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.view != 'allRecords'){
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 qcUR = gr.addQuery('parent',taskRecord.universal_request);
qcUR.addOrCondition('parent','IN',new sn_uni_req.UniversalRequestUtilsSNC().getChildRequests(taskRecord.universal_request));
}
else
gr.addQuery('parent',recordId);
}
else {
var qcRId = gr.addQuery('parent',recordId);
qcRId.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.view != 'allRecords'){
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.view != 'allRecords'){
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;
})();

Hello,

 

Apologies for the "Synch" statement. Request State and State have two separate sets of values.

My advice would be use "Request State" for Requests, not State.

 

Best Regards,

Swarnadeep Nandy