Skip to main content

Restrict quantity per catalog item

(other options discussed by other developers in these example links, see below for my approCH

https://community.servicenow.com/community?id=community_question&sys_id=6e3cc765db9cdbc01dcaf3231f961978

https://community.servicenow.com/community?id=community_question&sys_id=a09d7eafdb1294507d3e02d5ca9619fd

https://community.servicenow.com/community?id=community_question&sys_id=708e7767db5bef40107d5583ca9619d9

)



my solution:

whilst $('quantity').value worked beautifully in client script in classic UI, I could not locate an equivalent that was service portal friendly. As in this instance I did not wish to modify/copy the out of the box widget, I decided to follow this approach:

  • add a read only max quantity variable to the catalog item (reusable variable set) and set it per item in onload client script


  • below before insert business rule [sc_req_item] to override the value

(function executeRule(current, previous /*null when async*/ ) { var sMaxQuantity = current.variables.item_max_quantity + ""; if (sMaxQuantity != "") { if (parseInt(sMaxQuantity) > 0 && (parseInt(current.quantity) > parseInt(sMaxQuantity))) { var sMsg = 'This item has a maximum quantity. As a higher quantity was selected on checkout [' + current.quantity + '] this has defaulted to the maximum value [' + sMaxQuantity + ']'; //current.work_notes = sMsg; //gs.addInfoMessage(sMsg); current.comments = sMsg; } } })(current, previous);



Comments

Popular posts from this blog

URL link in addInfoMessage

var ga=new GlideAjax('gld_HR_ajax'); ga.addParam('sysparm_name', 'checkEmployeeNumber_hrProfile'); ga.addParam('sysparm_hrprofilenumber', g_form.getValue('number')); ga.addParam('sysparm_employeenumber', newValue); ga.getXMLAnswer(function(answer) { if (answer!='undefined' && answer!=''){ var navURL="<a style='text-decoration:underline;color:blue' href=hr_profile.do?sysparm_query=number=" + answer + ">" + answer + "</a><img width='3' src='images/s.gif'/>"; var sMsg='The employee number entered already exists on another HR Profile ' + navURL; //alert(sMsg); g_form.showErrorBox('employee_number', 'error - please check'); g_form.addInfoMessage(sMsg); } });

GlideRecord setValue

setValue(String name, Object value) Sets the specified field to the specified value. Normally a script would do a direct assignment, for example,  gr.category = value . However, if in a script the element name is a variable, then  gr.setValue(elementName, value)  can be used. When setting a value, ensure the data type of the field matches the data type of the value you enter. This method cannot be used on journal fields. If the value parameter is null, the record is not updated, and an error is not thrown https://developer.servicenow.com/app.do#!/api_doc?v=madrid&id=r_GlideRecord-setValue_String_Object