Reference qualifier on CI in Record Producer

Pratiksha KC
Tera Guru

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?

PratikshaKC_0-1749660882433.png

 

1 ACCEPTED SOLUTION

Pratiksha KC
Tera Guru

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'})

View solution in original post

17 REPLIES 17

goldenjc97
Tera Contributor

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;
})();

 

 

Chaitanya ILCR
Kilo Patron

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

@Chaitanya ILCR  @goldenjc97 

 

I tried both scripts but not working. 
I tried using script include also normal advance RQ but not worked. 

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)

ChaitanyaILCR_0-1749720490123.png

 

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