- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2016 01:46 PM
Hi All,
I was trying to clone a RITM with all its variable what ever is entered . Like a clone button which creates a new RITM with all the variables. I am stuck with the copy of variables.
I heard their is OOB clone available in some discussions but did not pointed exactly what it do and how to use it.
Any help is appreciated .
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-12-2016 01:07 PM
Hi Guys here is the code to copy the RITM with all variables to new RITM without workflow issues ,
var user=current.request.requested_for;
deleteCart();
var realCart = getCart();
var cartID = realCart.sys_id;
gs.log("cartID..",cartID);
addToCart(cartID, current.cat_item, 1);
addOptions(cartID);
doOrder();
deleteCart();
function addToCart(cartid, cat_item, quantity) {
var gr = new GlideRecord('sc_cart_item');
gr.initialize();
gr.cart = cartid;
gr.cat_item = cat_item;
gr.quantity = quantity;
gr.insert();
}
function addOptions(cartID) {
var kids = new GlideRecord('sc_cart_item');
kids.addQuery('cart', cartID);
kids.query();
if (kids.next()) {
gs.log("kids",kids.sys_id);
var sc_item_option_mtom = new GlideRecord('sc_item_option_mtom');
sc_item_option_mtom.addQuery('request_item', current.sys_id);
sc_item_option_mtom.query();
while(sc_item_option_mtom.next()){
var sc_item_option = new GlideRecord('sc_item_option');
sc_item_option.addQuery('sys_id', sc_item_option_mtom.sc_item_option);
sc_item_option.query();
if(sc_item_option.next()){
var sc_item_option_insert = new GlideRecord('sc_item_option');
sc_item_option_insert.initialize();
sc_item_option_insert.item_option_new=sc_item_option.item_option_new;
sc_item_option_insert.value=sc_item_option.value;
sc_item_option_insert.cart_item.setValue(kids.sys_id);
sc_item_option_insert.insert();
}
}
}
}
function deleteCart() {
var cart = getCart();
var id = cart.sys_id;
var kids = new GlideRecord('sc_cart_item');
kids.addQuery('cart', cart.sys_id);
kids.deleteMultiple();
}
function getCart() {
var cart = new GlideRecord('sc_cart');
var userid = user;
cart.addQuery('user', userid);
cart.query();
if (cart.next()) {
// we already have a cart all is well
}
else {
cart.initialize();
cart.user = userid;
cart.insert();
}
return cart;
}
function doOrder() {
var req = new GlideappRequestNew();
var result= req.copyCart(null,user);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-12-2017 03:14 AM
Michael Ritchie 's suggestion works for me. Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-16-2017 07:55 AM
Sam can you breakdown what this script is doing?
I'm trying to use it in a BR, and need to know if I can essentially force a variable value to be blank instead of what it is in the original RITM. I don't know where in this script I could do that.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-16-2019 02:29 AM
Hi,
We can use Cart API to achieve the requirement. Initiate the cart api and set the variable values from the RITM to be copied.
If you have a variable pointing towards RITM table and bulk of RITMs are to be created with same variable values, you may use the below script in WF runscript :
var cart,id;
cart = new Cart();
var item = cart.addItem(current.variables.ritm.cat_item);
var catVariables = new GlideRecord('sc_item_option_mtom');
catVariables.addQuery('request_item',current.variables.ritm);
catVariables.query();
while(catVariables.next()){
var obj ={};
gs.info('ques '+catVariables.sc_item_option.item_option_new.name.toString() + ' val '+catVariables.sc_item_option.value.toString());
obj.ques = catVariables.sc_item_option.item_option_new.name.toString();
obj.value = catVariables.sc_item_option.value.toString();
var k = new JSON().encode(obj);
arr.push(k);
}
for(var j=0;j<arr.length;j++)
{
var d = new JSON().decode(arr[j]);
cart.setVariable(item,d.ques,d.value);
}
var rc = cart.placeOrder();
Note : Put the script in a loop to create N number of RITMs as required.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-03-2022 01:13 AM
variable Arr is not declared