- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2025 09:55 AM
We wants to achieve reference qualifier for configuration Item variable based on two conditions:
1. if category selected as software it should show the records from table - cmdb_ci_service_discovered and cmdb_ci_service_auto.
(For this we have wrote advance qualifier , it is working fine -
javascript:current.variables.category=='software' ? 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto' : '' )
2. The field CI on the RRP should only show records from Primary classes.
In backend, on incident we have reference qualifier For CI - javascript: ['incident', 'problem'].indexOf(current.sys_class_name + '') == -1? '' : 'operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join()
How can we achieve this?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-12-2025 10:08 AM
Got the solution -
javascript:current.variables.category == 'software' ? 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto' : new TaskUtils().getConfigurationItemFilter({sys_class_name : 'incident'})
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2025 10:26 AM
Combine it into a single advanced ref qualifier
javascript:
(function() {
var qualifier = '';
// If category is software, limit to specific classes
if (current.variables.category == 'software') {
qualifier += 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto';
}
// Always apply operational_status filter for Primary Classes
var opsFilter = new OpsStatusFilter('cmdb_ci').by('CreateTask').join();
if (qualifier) {
qualifier = '(' + qualifier + ')^';
}
qualifier += 'operational_statusNOT IN' + opsFilter;
return qualifier;
})();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-11-2025 11:16 AM
Hi @Pratiksha KC ,
I did completely understood the requirement so i have created ref quals for 3 scenarios
use the appropriate one and share you feedback
//scenario1 : 2 conditions applied only when category is software else no filter
javascript: (function() {
return current.variables.category == 'software' ? 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto^operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() + getPricipleClasses() : '';
function getPricipleClasses() {
var refQual = ''
var cciGr = new GlideRecord("cmdb_class_info");
cciGr.addEncodedQuery("principal_class=true");
cciGr.query();
var clssArr = [];
while (cciGr.next()) {
clssArr.push(cciGr.getValue('class'));
}
return refQual ? refQual += '^sys_class_nameIN' + clssArr.join() : ''
}
})();
//scenario2: 2 conditions applied when category is software else only display primary cisjavascript:
(function() {
return current.variables.category == 'software' ? 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto^operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() + getPricipleClasses() : 'operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() + getPricipleClasses();
function getPricipleClasses() {
var refQual = ''
var cciGr = new GlideRecord("cmdb_class_info");
cciGr.addEncodedQuery("principal_class=true");
cciGr.query();
var clssArr = [];
while (cciGr.next()) {
clssArr.push(cciGr.getValue('class'));
}
return refQual ? refQual += '^sys_class_nameIN' + clssArr.join() : ''
}
})();
//scenario3: if category is software add one category else only disply primary cis
(function() {
return current.variables.category == 'software' ? 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto' : 'operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() + getPricipleClasses();
function getPricipleClasses() {
var refQual = ''
var cciGr = new GlideRecord("cmdb_class_info");
cciGr.addEncodedQuery("principal_class=true");
cciGr.query();
var clssArr = [];
while (cciGr.next()) {
clssArr.push(cciGr.getValue('class'));
}
return refQual ? refQual += '^sys_class_nameIN' + clssArr.join() : ''
}
})();
Please mark my answer as helpful/correct if it resolves your query.
Regards,
Chaitanya
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-12-2025 02:03 AM
I tried both scripts but not working.
I tried using script include also normal advance RQ but not worked.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-12-2025 02:38 AM
Hi @Pratiksha KC ,
whatever you have created it should work
you want only the primary class cis to available is it?
do you have any ci classes which are marked as primary/principal class?(table: cmdb_class_info)
or is it different thing you are talking about by means of primary class?
if it's the first case then use this as a ref qual
javascript:(function() {
if (current.variables.category == 'software')
return 'sys_class_name=cmdb_ci_service_discovered^ORsys_class_name=cmdb_ci_service_auto';
var cciGr = new GlideRecord("cmdb_class_info");
cciGr.addEncodedQuery("principal_class=true");
cciGr.query();
var clssArr = [];
while (cciGr.next()) {
clssArr.push(cciGr.getValue('class'));
}
return '^operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() + clssArr.length ? '^sys_class_nameIN' + clssArr.join() : '';
})();
if no
please share what's primary class ci
note: 'operational_statusNOT IN' + new OpsStatusFilter('cmdb_ci').by('CreateTask').join() this filter outs certain ci opearational status ci (like retired) etc if you don't need it remove it
Please mark my answer as helpful/correct if it resolves your query.
Regards,
Chaitanya