- 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-22-2015 01:39 PM
Is it an option where you can only show them one screen ( the order guide first screen ) and then have Submit there?
If so, I would say , go along with one Catalog Item, take all the inputs and create 5 different Request Items with Service Catalog API.
Here is a link to ServiceCatalog API and some examples : http://wiki.servicenow.com/index.php?title=Service_Catalog_Script_API
This way, you will have only one Form, submitting which will spawn 5 different RITMs from 5 Catalog items.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-22-2015 02:53 PM
Is there better documentation someplace for the Service Catalog API? The syntax in all the examples in that article is server-side, and I couldn't figure out how to run it from a Catalog Client Script.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-22-2015 03:03 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-22-2015 03:10 PM
I saw that article; I was hoping you might know of a more detailed article someplace else. That one's pretty short, and it doesn't address my question of "How do I run this from a Catalog Client Script"