The CreatorCon Call for Content is officially open! Get started here.

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
Mega 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