Create catalog request through email inbound

jamesgo
Giga Contributor

I have a requirement to auto-create catalog request through email inbound action, my approach is to use the Cart API(any better solution?) in inbound action script, I set up the inbound on sc_req_item table but I am not doing a current.insert() otherwise it will double submit the request(as the order is already placed through Cart API), things working fine but one problem I don't find a way to attach the original inbound email to the Activity field, any idea?

1 ACCEPTED SOLUTION

Here are some ideas:



Option 1: Add Message to Comments



Inbound Action: Create Requested Item


Table: sc_req_item


Condition: <your condition here>


Script:


createRequest();


function createRequest() {


  var cart = new Cart();


  // add in cart


  var item = cart.addItem('8c2a069c242cb800839dec45b40a7496');


  // set requested for


  cart.setVariable(item, 'requested_for', '5136503cc611227c0183e96598c4f706');


  cart.setVariable(item, 'request_short_description', email.subject.toString());


  cart.setVariable(item, 'request_description', email.body_html);


  cart.setVariable(item, 'request_type', 'others');


  // set application


  cart.setVariable(item, 'application', '3243d574bd05300071578913764fb117');


  // set assignment group


  cart.setVariable(item, 'assignment_group', '4769d53099266800d7ea6843423a4c2b');


  cart.setVariable(item, 'priority', 'PR3');


  var cartmsg = "received from: " + email.origemail + "\n\n" + email.body_text;


  cart.setVariable(item,'comments',cartmsg);


  var rc = cart.placeOrder();


}




Option 2: Generate without Cart API



Inbound Action: Create Requested Item


Table: sc_req_item


Condition: <your condition here>


Script:


createRequest();


function createRequest() {


      //Create Request


      var grRequest = new GlideRecord ("sc_request");


      grRequest.initialize();


      grRequest.requested_for = '5136503cc611227c0183e96598c4f706';


      grRequest.short_description = email.subject.toString();


      grRequest.description = "received from: " + email.origemail + "\n\n" + email.body_text;


      var requestSysId = grRequest.insert();


      //Create Request Item


      current.requested_for = '5136503cc611227c0183e96598c4f706';


      current.short_description = email.subject.toString();


      current.description = "received from: " + email.origemail + "\n\n" + email.body_text;


      current.cat_item = '8c2a069c242cb800839dec45b40a7496';


      current.parent = requestSysId;


      current.request = requestSysId;


      current.request_type = 'others';


      current.application= '3243d574bd05300071578913764fb117';


      current.assignment_group='4769d53099266800d7ea6843423a4c2b';


      current.priority= 'PR3';


      current.insert();


}



I tested Option 2 and it did work for me.   I used a different Catalog Item (Dev Laptop), because I didn't have your item in my catalog, but most everything else worked the same.Capture.PNG


View solution in original post

48 REPLIES 48

Did you get an answer?


hey Bill..



I am assuming you had the same problem as well. Did you get an answer for the workflow issue?


Hey,



Were you able to make the workflow work?


Ashutosh Munot1
Kilo Patron
Kilo Patron

HI james,



Can You help me on this script


Hello @Ashutosh Munot  and @mkaufman ,

(i) I created a catalog item with view variables.

(ii) created a workflow to generate a task, and to set the assignment group value.

(iii) Wrote an inbound action  :

Name : Create request

Target Table: sc_req_item

active : check

condition: subject starts with [abc]

actions: script:

 

var TECHNICAL_USER = 'd64be78cdbee1c50c6ea7cde3b96191c'; //

 

createRequest();

function createRequest() {

var cart = new Cart();

var item = cart.addItem('003d54d0dba25c50c6ea7cde3b9619f3');

cart.setVariable(item, 'request_description', email.body_html);

cart.setVariable(item, 'requested_by', TECHNICAL_USER);

cart.setVariable(item, 'requested_for', TECHNICAL_USER);

cart.setVariable(item, 'request_type', 'new');


var indexOfAdditionalInformation = email.body_text.indexOf("comments:");
var indexOfLanguage = email.body_text.indexOf("language:");
var add_inf = email.body_text.substring(indexOfAdditionalInformation + "comments:".length,indexOfLanguage);

cart.setVariable(item, 'comments', add_inf.trim());

 

var rc = cart.placeOrder();


}

})(current, event, email, logger, classifier);

 

(iv) I sent an email with subject [abc] to ServiceNow

(v) It created an RITM 

(vi) Also an incident is created, when I checked the condition in create incident  inbound action it is written as below:

(email.direct.toString().toLowerCase().indexOf(gs.getProperty('glide.email.user')) > -1 || email.direct.toString().toLowerCase().indexOf(gs.getProperty('snow.email.user')) > -1) && (new inboundEmailAction()). ignoreEmailAlerts(email)

 

what do I need to do so that it only creates an RITM and not an Incident.

 

Also how will the reply emails for additional comments work?

 

Thanks!