Call Intake, combine the power of the Incident form and Service Catalog

General Add comments
by:

If you are creating an Incident as a servicedesk agent, this might not always be an Incident, it can very well be that you need to go to the Service Catalog to create a Service Request.
For example: the end user called about a broken laptop and at the end of the call, the servicedesk agent needs to order a new laptop.

So normally the servicedesk agent will resolve/close the incident and create a new item in the Service Catalog. Bit a waste of time for the servicedesk agent.

We designed a new process called – Call intake.
Combine the efficiency of creating a new incident and use the power of the Service Catalog.
We are using a special feature called the sc_cart table.

Process steps:

  1. Create a new incident
  2. If it’s not an incident, leave the current settings the same and change the category to Request
  3. The data will be pushed to the Service Catalog
  4. In the item you can use the data of the filled Request For user, like ordering a new Development Laptop
  5. After the order procedure, your request will be filled with the data from the sc_cart record

I will describe the steps you need to perform to create this functionality. The basics are simple, and you can create or expand this with more functionality using the sc_cart table.

Request for Widget

This is the out-of-the-box widget “Request for”; I will use this functionality on my incident form.

Create a new UI Action on the Incident form

Create a new UI action “Create request” on the Incident form.

Script:

var url = “catalog_home.do?sysparm_view=catalog_default”;
var requestfor = current.opened_by;
// Check Category is Request.

if(current.category == ‘request’) {
//Prepare the current user’s cart
try {
var realCart = getCart(requestfor);
}
catch (err) {
gs.log(err);
}
}

action.setRedirectURL(url);

function getCart(user) {
var cart = new GlideRecord(‘sc_cart’);
var userid = gs.getUserID();
cart.addQuery(‘user’, userid);
cart.query();
if(cart.next()) {
//Override the values with the values for the current Incident form.
cart.requested_for = current.caller_id;
cart.update();

//First delete all existing cart Items.
var cartItems = new GlideRecord(‘sc_cart_item’);
cartItems.addQuery(‘cart’, cart.sys_id);
cartItems.deleteMultiple();
}
else {
//Create a new cart record and fill them with the information from the Incident form.
cart.initialize();
cart.user = userid;
cart.requested_for = current.caller_id;
cart.insert();
}
return cart;
}

The data will be pushed to the sc_cart table

Standard the sc_cart record is always filled with the same User as the Requested for; so the User == Requested for.
For our situation the Requested for is filled with the name what we have taken from the Incident form.
The data will be available until the order is finished – after that the cart will be emptied.
So the next thing is to prepare the Catalog Item to manage the Requested for variable.

Add a new variable to the Catalog Item “Development Laptop”

Name: Requestedfor
Reference: sys_user
Question: Requested For

Note:
if you want to use the variable for more items, you can also change this variable to a variable set

Create a new Client Catalog script

Name: Fill data from sc_cart
Applies to: A catalog item
Type: On load

Script:

function onLoad() {
var userid = g_user.userID;
var cart = new GlideRecord(‘sc_cart’);
cart.addQuery(‘user’, userid);
cart.query();

if(cart.next()) {
if (cart.user != cart.requested_for) {
g_form.setValue(‘Requestedfor’, cart.requested_for);
}
}
}

New updated Catalog Item

This is the updated Catalog Item “Development Laptop” – with the default Request for value.
In this case that’s the System Administrator user.

Let’s give it a try!

Create a new Incident for e.g. Beth Anglin.
She has troubles with her laptop. The servicedesk agent isn’t sure about resolving the incident and expects the laptop to be broken.
Therefore the servicedesk agent decides to request a new laptop for Beth Anglin.
The servicedesk agent changes the Category from Inquiry / Help to Request.
The Create Request button shows up and the servicedesk agent clicks on the button.

Choose an Catalog Item

We can choose e.g. the Development Laptop.

Note:
in the screenshot you will see the Request for widget.

Order the Development Laptop

In the Item, the Requested for is populated with the sc_cart data – using the Requested for value: Beth Anglin.
Just click on Order Now and you’re done!

Order status

The request is submitted, let’s look to the backend.

The backend

At the backend you can see the result of our action. The Request is created by the System administrator and Request for is Beth Anglin.
In our example we only used the Requested for value.
But you can use all data from your Incident form to push to the Cart table and use that for the Service Catalog.

I’m curious to know your experiences with the sc_cart table or similar Call intake Processes.
Please let me know if you have any questions.
You can contact me by mail lam.hoang@2e2.nl, twitter @mrlamhoang or Linkedin

NOTE: The SNCGuru website previously posted an article on this same topic. You can find the article HERE.

Leave a Reply