- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-29-2025 08:37 AM
Hi everyone,
I'm trying to use GlideAjax in a Catalog Client Script to populate the Brand field based on the selected Category. I created a Script Include extending AbstractAjaxProcessor with a method called getBrandsByCategory. However, the client script always logs:
This is my Script Include (accessible from the global scope and set to "Client Callable"):
var VehicleLookupUtils = Class.create();
global.VehicleLookupUtils = VehicleLookupUtils;
VehicleLookupUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getBrandsByCategory: function() {
var categorySysId = this.getParameter('sysparm_category');
gs.info('[DEBUG] Script Include: getBrandsByCategory called with sysparm_category = ' + categorySysId);
var brands = [];
var grBrand = new GlideRecord('x_my_scope_brand');
grBrand.addQuery('category', categorySysId);
grBrand.query();
while (grBrand.next()) {
var id = grBrand.sys_id.toString();
var name = grBrand.name.toString();
gs.info('[DEBUG] Brand found - ID: ' + id + ', Name: ' + name);
brands.push({ id: id, name: name });
}
gs.info('[DEBUG] Total brands found: ' + brands.length);
return JSON.stringify(brands);
},
type: 'VehicleLookupUtils'
});
I originally had a gs.info("script entered"); line before the prototype definition, and I saw that in the system logs — but nothing appears from inside the actual function, so it seems the function is never being triggered.
My Catalog Client Script (onChange for Category) is:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || !newValue) {
g_form.clearOptions('Brand');
g_form.addOption('Brand', '', '-- Select a brand --');
return;
}
console.debug('[DEBUG] onChange triggered');
console.debug('[DEBUG] newValue is valid: ' + newValue);
var ga = new GlideAjax('VehicleLookupUtils');
ga.addParam('sysparm_name', 'getBrandsByCategory');
ga.addParam('sysparm_category', newValue);
console.debug('[DEBUG] GlideAjax called, waiting for response...');
ga.getXMLAnswer(function(response) {
console.debug('[DEBUG] Response from Script Include: ' + response);
if (!response) {
console.debug('[DEBUG] No response received. Adding fallback message.');
g_form.clearOptions('Brand');
g_form.addOption('Brand', '', '-- No brands available --');
return;
}
try {
var brands = JSON.parse(response);
g_form.clearOptions('Brand');
g_form.addOption('Brand', '', '-- Select a brand --');
brands.forEach(function(brand) {
g_form.addOption('Brand', brand.id, brand.name);
});
} catch (e) {
console.error('Error parsing JSON response:', e, response);
}
});
}
I double-checked that the Script Include is set to "Client Callable" and globally available.
Any ideas why the Script Include method is not being executed?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-29-2025 10:44 AM
In the Script Include, get rid of the second line and third(blank) lines so that it starts like this:
var VehicleLookupUtils = Class.create();
VehicleLookupUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getBrandsByCategory: function() {
If you are still not seeing the first/category log, is the Script Include in the same scope as the Client Script? Do you have anything in the Access Controls related list - an ACL with a user role?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-29-2025 10:44 AM
In the Script Include, get rid of the second line and third(blank) lines so that it starts like this:
var VehicleLookupUtils = Class.create();
VehicleLookupUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getBrandsByCategory: function() {
If you are still not seeing the first/category log, is the Script Include in the same scope as the Client Script? Do you have anything in the Access Controls related list - an ACL with a user role?