Populating an array from a glide_list field - Works when there is ONE entry but not if there is more

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2024 08:15 AM - edited ‎06-28-2024 08:20 AM
As the title - I have a UI action that calls a script include. It gets the values from a glide_list field and populates an array. I then do a query using the sys_ids from the array and put the results in another array. The idea is that one glide_list will populate another glide_list of related records.
If the original glide_list has one value then I get results out in the log but if I add more than one (say, two, for example!!), I get nothing at all.
My code is on VDI. I'll get it out and post it.
Update: As promised, code from Script Include:
var refreshIBS = Class.create();
refreshIBS.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
RefreshImportantBusinessServices: function() {
var kb = this.getParameter('sysparm_kb');
var mappedApplicationServices = [];
var kbMAS = new GlideRecord('kb_knowledge');
//query knowledge article
kbMAS.addQuery('sys_id', kb);
kbMAS.query();
/*Get values from Mapped Application Service field
and add to mappedApplicationServices array*/
var relatedIbs = [];
while (kbMAS.next()) {
mappedApplicationServices.push(kbMAS.getValue('u_mapped_application_service'));
/*query service offerings using values from
mappedApplicationServices array*/
for (var i in mappedApplicationServices) {
var ibs = new GlideRecord('service_offering');
ibs.addEncodedQuery('parent=' + mappedApplicationServices[i]);
ibs.query();
//instantiate array to store results
// var relatedIbs = [];
//loop through results and add to relatedIbs array
while (ibs.next()) {
relatedIbs.push(ibs.sys_id.toString());
// relatedIbs.push(ibs.getUniqueValue());
}
gs.info('AJB Related IBS 1:' + relatedIbs.join(', \n'));
}
gs.info('AJB Related IBS 2:' + relatedIbs);
}
gs.info('AJB Related IBS 3:' + relatedIbs);
},
type: 'refreshIBS'
});
I thought it was to do with where I instantiate my array but nothing seems to make any difference.
Any ideas?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2024 08:31 AM
Hi @Andrew Bettcher ,
I believe the issue is in this line of code.
kbMAS.addQuery('sys_id', kb);
Reason: If kb equals one sys_id, then this query will return results. But if kb = <sys_id>,<sys_id>,... then this will not return any results.
Try changing that line to the following:
kbMAS.addQuery('sys_id', 'IN', kb);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2024 08:46 AM
Thank you Kris. I tried that out. Same result.
Single entry in glide_list = All OK. All three of my log statement output the related sys_ids. but, as soon as I add another entry to the glide_list, the whole thing fails.
This is the log showing the last two runs:
The first 3 are with one entry in the glide_list and the latest 3 are with two.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-28-2024 09:42 AM
Mind trying this version of your script? I'm curious about what kb contains and the various row counts.
var kb = this.getParameter('sysparm_kb');
gs.info('kb = ' + kb);
var mappedApplicationServices = [];
var kbMAS = new GlideRecord('kb_knowledge');
//query knowledge article
kbMAS.addQuery('sys_id', kb);
kbMAS.query();
gs.info(kbMAS.getRowCount() + ' records returned from kb_knowledge');
/*Get values from Mapped Application Service field
and add to mappedApplicationServices array*/
var relatedIbs = [];
var mappedApplicationServices = [];
while (kbMAS.next()) {
mappedApplicationServices.push(kbMAS.getValue('u_mapped_application_service'));
}
gs.info('mappedApplicationServices = ' + mappedApplicationServices.join('\n'));
var ibs = new GlideRecord('service_offering');
ibs.addQuery('parent', 'IN', mappedApplicationServices);
ibs.query();
gs.info(ibs.getRowCount() + ' records returned from service_offering');
while (ibs.next()) {
relatedIbs.push(ibs.getUniqueValue());
}
gs.info('AJB Related IBS 1:' + relatedIbs.join('\n'));