- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-22-2015 01:24 PM
I'm building a New Hire Order Guide. We're collecting all the information we need to generate the requests on the first screen. Right now, users have to click 'Choose Options', and click on each tab (there are 9 of them), even though they don't need to choose any options, then click Checkout. I'd like them to be able to just answer the questions on the first screen, then click 'Checkout' and get to the order confirmation screen. I'm using Cascading variables from my Order Guide, but 5 of the catalog items have the same variables, so I've created catalog scripts that move the information from the cascaded-to variables that match the Order Guide variables. These don't run unless the tab is clicked on. I've also set 'Ignore Mandatory Evaluation' to True for all of the items, but that doesn't help if the variables aren't getting set correctly without clicking on the tabs.
My users would really like to not see the tabs at all, just click 'Checkout' from the first screen, and go right to the checkout screen.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-23-2015 08:40 AM
I would agree with Abhiram and you can use a catalog item and then you can automatically add other items into the user's cart via client script on the submit of the cart via an AJAX call. Below is some sample code:
On Submit Client Script:
var ajax = new GlideAjax('AJAXAddCatItems');
ajax.addParam('sysparm_name', 'addCatItems');
ajax.addParam('sysparm_variable1', g_form.getValue('variable1'));
ajax.addParam('sysparm_variable2', g_form.getValue('variable2'));
ajax.getXMLWait();
Then create an AJAX script include to add the catalog items. You will notice that I did not use the script in the Wiki article that Abhiram included and that is because calling new Cart() clears the user's existing cart which is not what I wanted. So I took code from the out of the box Script Included named Cart, which is the code that it was calling. Below is example code for your new AJAX Script Include based on the above example
var AJAXAddCatItems = Class.create();
AJAXValidateInstance.prototype = Object.extendsObject(AbstractAjaxProcessor, {
addCatItems: function() {
var scCart = new GlideRecord("sc_cart");
scCart.addQuery("user", gs.getUserID());
scCart.query();
if (scCart.next()) {
var scCartID = scCart.sys_id;
var catItemSysID = 'SYS_ID_OF_CAT_ITEM';
var scCartItem = new GlideRecord("sc_cart_item");
scCartItem.addQuery("cart", scCartID);
scCartItem.addQuery("cat_item", catItemSysID);
scCartItem.query();
if (!scCartItem.next()) {
var variable1 = this.getParameter('sysparm_variable1');
var variable2 = this.getParameter('sysparm_variable2');
var itemID = catItemSysID;
scCartItem.initialize();
scCartItem.cart = scCartID;
scCartItem.cat_item = itemID;
scCartItem.quantity = 1;
var rc = scCartItem.insert();
var ci = GlideappCatalogItem.get(itemID);
var gr = ci.getStandaloneVariables();
var seq = ci.getKeySequence();
while (gr.next()) {
var question = new GlideappQuestion(gr.sys_id);
var variable = new GlideRecord('sc_item_option');
variable.initialize();
variable.item_option_new = gr.sys_id;
var variableValue = "";
var variableName = variable.item_option_new.name.toString();
switch (variableName) {
case 'variable1':
variableValue = variable1;
break;
case 'variable2':
variableValue = variable2;
break;
default:
variableValue = question.getValue();
break;
}
variable.value.setValue(variableValue);
variable.cart_item = rc;
for (var i = 0; i < seq.size(); i++) {
if (seq.get(i) + "" == gr.sys_id + "")
variable.order = i + "";
}
variable.insert();
}
}
}
return 'proceed';
},
type: 'AJAXAddCatItems'
});
You can repeat lines 11-53 to add other items into the cart or better yet create a function that is called so you don't repeat the code. But hopefully this gets you started.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-26-2015 05:25 PM
Just want to confirm that you have an on submit client script calling the AJAX script include correct? If so there are a few hidden attributes on the catalog item definition that you can set: no order now is one. This will allow them to add to the cart and then they can continue shopping. I believe there is also a no proceed to checkout attribute too, not in front of my computer at the moment. This will force them through the cart process.
you shouldn't need to call that UI
page at all.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-27-2015 09:39 AM
Thank you so much for your help so far. Yes, I am using an on submit client script calling the AJAX script include.
Those attributes, though, don't appear to work the way you're describing them. It seems like they just control what buttons show up in the cart UI Macro in the upper right. 'no order now' makes the 'Order Now' button not show, and 'no proceed to checkout' just hides the 'Proceed to Checkout' button. Neither attribute appears to influence how the item progresses, unless I'm just missing something.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-27-2015 10:10 AM
Well based on your requirement of allowing them to display the catalog checkout page, these options can force the user through the checkout screen. You are correct where they are controlling the buttons that show up, but if you want them to always go to the checkout page, then removing those two buttons will force them to edit their cart and then have the option to continue shopping or checkout. Otherwise if they choose order now, then it will add all the items to the cart and order the item. Proceed to checkout has similar behavior.
I hope this make sense.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-28-2015 08:46 AM
Sorry, thought I replied to this yesterday - Got this figured out. Just needed the right combination of buttons.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-28-2015 09:51 AM
Awesome glad to hear you got this requirement sorted out. If you don't mind please mark this solution answered so others can benefit from it in the future.