Service Portal displaying Requested Item

Brendan Hallida
Kilo Guru

Hi all,

Trying to make it a bit easier for navigation between REQ/RITM for the end users via the Service Portal.

Our users seem to have some dificulty finding their RITM details when they head into a REQ.   so I would like to edit the requested Items widget that displays this info.

How it is by default:

find_real_file.png

How I would like it: (edited with Chromes Inspect feature)

find_real_file.png

my javascript is non existent (looking to work on it I swear), so not sure where I should be making the changes?   Below is the server script (default Requested Items widget).   I have created a copy of the widget.

// populate the 'data' variable provided by caller

(function() {

  var gr = new GlideRecord("sc_req_item"); // does ACL checking for us

  gr.addQuery("request", $sp.getParameter("sys_id"));

  options.secondary_fields = options.secondary_fields || "";

  options.secondary_fields = options.secondary_fields.split(",");

  if (options.order_direction == "asc")

  gr.orderBy(options.order_by);

  else

  gr.orderByDesc(options.order_by);

  if (options.maximum_entries > 0)

  gr.setLimit(options.maximum_entries);

  gr.query();

  data.actions = [];

  data.list = [];

  while (gr.next()) {

          if (!gr.canRead())

          continue;

         

  if (gr.getRowCount() == 1)

  data.conversation_title = gr.request.getDisplayValue() + " - " + gr.getValue("short_description");

  var record = {};

  record.sys_id = gr.sys_id.getDisplayValue();

  if (options.image_field) {

  record.image_field = gr.getDisplayValue(options.image_field);

  if (!record.image_field)

  record.image_field = "/noimage.pngx";

  }

  if (options.display_field)

  record.display_field = gr.getDisplayValue(options.display_field);

  record.secondary_fields = [];

  options.secondary_fields.forEach(function(f) {

  record.secondary_fields.push(getField(gr, f));

  });

  if (options.sp_page_dv)

  record.url = "?id="+options.sp_page_dv+"&table="+options.table+"&sys_id="+record.sys_id+"&view=sp";

  else

  record.url = "";

  record.stage = gr.getValue("stage");

  // get appropriate Stage choices for this requested item

  var cl = new GlideChoiceList();

  GlideController.putGlobal("answer", cl);

  GlideController.putGlobal("current", gr);

  sc_req_item_stageGetChoices();

  record.cl = JSON.parse(cl.toJSON());

  data.list.push(record);

  }

  if (gr.getRowCount() > 1)

  data.conversation_title = gr.request.getDisplayValue() + " - " + gr.getRowCount() + " items";

  function getField(gr, name) {

  var f = {};

  f.display_value = gr.getDisplayValue(name);

  f.value = gr.getValue(name);

  var ge = gr.getElement(name);

  f.type = ge.getED().getInternalType()

  f.label = ge.getLabel();

  return f;

  }

})();

22 REPLIES 22

So if we wanted the stages to show on the RITM on the portal we'd copy the widget that then replace that code with this code (and your edit)?


Hi Thomas,



is it working fine for non-admin users also?



Regards


Swamy


Hi Swamy,



Yes this worked for all users when I made the change.



Regards,


Thomas


For me, it is working only for admins. Can you please guide me on where and how to correct this issue


Hello Lars,


Any thought on how to get this to display in the Ticket fields widget.   Our users have confusion on the difference between REQ/RITM and since RITM is where all communication goes thought we are not showing them the REQ anymore.   We display only the RITM in the "My Requests" menu (which we renamed) and when they click on an RITM it send them directly to the page with the Ticket Fields widget.