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

Michael Kaufman
Giga Guru

Post your code, and I can try it out in a demo system.   I have some ideas.



I understand your dilemma, you want to use the Cart API, so you don't do a current,insert in the Inbound Action.   However when you don't do a current.insert, it doesn't attach the email to the Activities.  



One kind of poor fix would just to have a variable called comments and attach the email to the comments



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


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



Another idea I have is to not use the Cart API at all and generate the request item without it.   I have some code for that.   However that is a little more complicated than my easy fix above.



If you post your code I can help more.



Mike


jamesgo
Giga Contributor

Hi Mike, below are the codes. By the way what is your another approach, if you can just let me know the brief idea that will be very helpful.



  1. var cart = new Cart();
  2. // add in cart
  3. var item = cart.addItem('8c2a069c242cb800839dec45b40a7496');
  4. // set requested for
  5. cart.setVariable(item, 'requested_for', '5136503cc611227c0183e96598c4f706');
  6. cart.setVariable(item, 'request_short_description', email.subject.toString());
  7. cart.setVariable(item, 'request_description', email.body_html);
  8. cart.setVariable(item, 'request_type', 'others');
  9. // set application
  10. cart.setVariable(item, 'application', '3243d574bd05300071578913764fb117');
  11. // set assignment group
  12. cart.setVariable(item, 'assignment_group', '4769d53099266800d7ea6843423a4c2b');
  13. cart.setVariable(item, 'priority', 'PR3');
  14. var rc = cart.placeOrder();

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


Thanks Mike!