Copying Over Attachments in Inbound Action when creating Catalog Item
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-21-2023 06:34 PM
I have an inbound action that is making catalog items as it should. I need to also copy over any included attachments and associate them with the created catalog item. What I am finding is that the script is creating a blank catalog item and associating the attachments with that request and then creating a separate catalog item. For example when the script below triggered RITM0412277 was created blank with the attachments associated and then the correct catalog request RITM0412278 was created. What might I need to change in my script below?
createRequest();
function createRequest() {
// Get the Supervisor
var mgr = '';
var gr = new GlideRecord('sys_user');
if (gr.get('employee_number', email.body.buyer_employee_id)) {
mgr = gr.sys_id;
}
var cart = new Cart();
// Add item in cart
var item = cart.addItem('d7d7a9b00fc13640da42d23be1050ecb'); //Furniture Cost Change sys_id
// Set variables
cart.setVariable(item, 'mpc_vendor_code', email.body.vendor_code);
cart.setVariable(item, 'mpc_vendor_name', email.body.vendor_name);
cart.setVariable(item, 'mpc_vendor_email', email.body.vendor_email);
cart.setVariable(item, 'mpc_rep_name', email.body.rep_name);
cart.setVariable(item, 'mpc_buyer_id', email.body.buyer_employee_id);
cart.setVariable(item, 'mpc_date_of_change', email.body.requested_date);
cart.setVariable(item, 'mpc_last_price_increase', email.body.date_of_last_increase);
cart.setVariable(item, 'mpc_comments', email.body.comments);
cart.setVariable(item, 'mpc_buyer', email.body.buyer_employee_id);
cart.setVariable(item, 'mpc_mgr', mgr);
// Place the order
var rc = cart.placeOrder();
// Associate attachments
var sysEmail = new GlideRecord('sys_email');
sysEmail.addQuery('sys_id', current.email.sys_id);
sysEmail.query();
while (sysEmail.next()) {
var att = new GlideSysAttachment();
att.copy('sys_email', sysEmail.sys_id, 'sc_req_item', rc.sys_id.toString());
}
// Update the current record
current.update();
event.state = "stop_processing";
}
Here is the working script with out doing anything with the attachments:
createRequest();
function createRequest() {
// Get the Supervisor
var mgr = '';
var gr = new GlideRecord('sys_user');
if (gr.get('employee_number', email.body.buyer_employee_id)) {
mgr = gr.sys_id;
}
var cart = new Cart();
// add in cart
var item = cart.addItem('d7d7a9b00fc13640da42d23be1050ecb'); //Furniture Cost Change sys_id
cart.setVariable(item, 'mpc_vendor_code', email.body.vendor_code);
cart.setVariable(item, 'mpc_vendor_name', email.body.vendor_name);
cart.setVariable(item, 'mpc_vendor_email', email.body.vendor_email);
cart.setVariable(item, 'mpc_rep_name', email.body.rep_name);
cart.setVariable(item, 'mpc_buyer_id', email.body.buyer_employee_id);
cart.setVariable(item, 'mpc_date_of_change', email.body.requested_date);
cart.setVariable(item, 'mpc_last_price_increase', email.body.date_of_last_increase);
cart.setVariable(item, 'mpc_comments', email.body.comments);
cart.setVariable(item, 'mpc_buyer, mgr');
var rc = cart.placeOrder();
}
var ritmSysID = "";
var ritmRec = new GlideRecord("sc_req_item");
ritmRec.addQuery("request", rc.sys_id);
ritmRec.query();
if(ritmRec.next()){
ritmSysID = ritmRec.sys_id;
}
current.update();
event.state="stop_processing";
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎12-11-2023 09:24 AM
I am doing something similar, this code I found elsewhere here (sorry, can't credit author, no idea who it was anymore) seems to work. I think it's down to the added function to update the (current) RITM:
createRequest();
function createRequest() {
var cart = new Cart(); //calling the cart API
var item = cart.addItem('XXXXXXXXXXXXXXXXXXXXXXXX'); //sys_id of the catalog item I want to fire
cart.setVariable(item, 'xxxx_email_subject', email.subject); //sets catalog variable to the email's subject
cart.setVariable(item, 'xxxx_email_body', email.body_text); //sets catalog variable to email's body
var rc = cart.placeOrder(); //this launches the catalog item, and creates a request object. rc = the request object
updateRITM(rc.sys_id); //call a function immediately to update the ritm. This must be a nested function, otherwise inbound actions get weird.
//also, we're passing the sys_id of the request so we know what RITM to grab.
}
function updateRITM(req){
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('request', req); //req is what we passed from the previous function. the sys_id of the request.
ritm.query();
while (ritm.next()){
ritm.description = email.body_text; //we're still in the inbound action so why not exploit?
ritm.short_description = email.subject;
GlideSysAttachment.copy('sys_email',sys_email.sys_id,'sc_req_item',ritm.sys_id); // Should copy attachments
ritm.update();
}
}
event.state="stop_processing";