- 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
‎08-16-2017 11:16 PM
Hi Ronald,
As you mentioned that your script is 907 lines long.. so just wondering how about the performance of your catalog item.. does it take long time to submit it?
Please let me know as I have similar requirements as yours..
Thanks,
Tamoghna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-17-2017 07:46 AM
In my Dev instance, it takes about 6 seconds to build the cart once you click 'Submit Request'.
Thanks,
Ron Legters
System Administrator
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-08-2015 10:09 AM
My problem is I have an order guide for New Hire. I have a variable set that has Requested For and Manager. I cascaded the variable. This variable set is the same for all catalog items: application 1, application 2, and so forth. Each of the application have their own variables specific to them. I turned on in Catalog Properties to reset cascading variable values when user goes back to "describe needs". However what is happening is if I set Requested for and Manager in the main form, do a choose options. I choose options for each of the items. I go back to Describe needs. I changed the Requested For or Manager and then do choose options again. The new Requested for and Manager are carried over to application 1 thru n. However, the specific variables for application 1 thru n was reset to their default. That is why I'm looking into a catalog script where I just want to copy Requested For and Manager to each of the catalog items so that I can set the reset cascading variables to false so that the rest of my variables for app1-n remains intact when I go back and forth from describe needs and choose options.
Sorry for the lengthy explanation but I have spent days already trying to figure out how to access the variables in main form to copy it to the other items.