CMDBDuplicateTaskUtils - Global

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 3 min. de leitura
  • . CMDBDuplicateTaskUtils A inclusão de script fornece métodos para criar uma tarefa de desduplicação que contém ICs (itens de configuração) duplicados que são do tipo independente.

    Uma tarefa de desduplicação só pode conter Configuration Management Database (CMDB) ICs que não estão em outra tarefa de desduplicação.

    CMDBDuplicateTaskUtils - CMDBDuplicateTaskUtils()

    Cria uma instância do CMDBDuplicateTaskUtils classe.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    Nenhum(a)
    /**
     * CMDBDeduplicateTaskUtil().createDeduplicateTask() example
     * 
     * OVERVIEW
     * 
     * This script will allow you to search the CMDB
     * for records that may be duplicates based on the field
     * and filter definitions of your chosing
     * 
     */
    
    try {
    
        //SET INITIAL VARIABLES
    
        //Set the table that you would like to check for duplicates - note this MUST be a CMDB table
        var cmdbTable = 'cmdb_ci';
    
        //Add a filter as an encoded query if desired - only objects within this filter will be matched
        // this query filters items are Apple computers located in New York (NY)
        var filterQuery = 'sys_class_name=cmdb_ci_computer^sys_class_name=cmdb_ci_computer^manufacturer=b7e9e843c0a80169009a5a485bb2a2b5^sys_class_name=cmdb_ci_computer^manufacturer=b7e9e843c0a80169009a5a485bb2a2b5^locationLIKENY';
    
        //Which field shall we use to check for duplicates?
        var matchField = 'name';
    
        //Do matches need to have the same cmdb_ci class? - This prevents child device types from matching if enabled i.e. Computer, Server
        var sameClass = true;
    
        //Should empty values be excluded from match?
        var excludeEmpty = true;
    
        //Minimum number of duplicates required to create a de-duplication task - must be at least 2
        var numberOfMatches = 2;
    
    
        //USE GLIDE AGGREGATE TO IDENTIFY POSSIBLE DUPLICATES
    
        var dupeSetAgg = new GlideAggregate(cmdbTable);
        if (filterQuery) dupeSetAgg.addEncodedQuery(filterQuery);
        dupeSetAgg.addAggregate('COUNT', matchField);
        dupeSetAgg.orderByAggregate('COUNT', matchField);
        dupeSetAgg.groupBy(matchField);
        if (sameClass) dupeSetAgg.groupBy('sys_class_name');
        if (excludeEmpty) dupeSetAgg.addNotNullQuery(matchField);
    
        //Group by domain if domain separation is enabled (prevent matches across domains)
        if (gs.getProperty('glide.sys.domain.partitioning') == 'true') dupeSetAgg.groupBy('sys_domain');
    
        //Must have at least 2 CI records that match
        if (numberOfMatches < 2) numberOfMatches = 2;
        dupeSetAgg.addHaving('COUNT', matchField, '>=', parseInt(numberOfMatches));
    
        dupeSetAgg.query();
    
    
        //LOOP THROUGH EACH SET OF MATCHES
    
        while (dupeSetAgg.next()) {
            var dupeRecordCount = dupeSetAgg.getAggregate('COUNT', matchField);
            var dupeRecordsList = [];
            var dupeAggQuery = dupeSetAgg.getAggregateEncodedQuery();
            var dedupeShortDesc = 'Found ' + dupeRecordCount + ' records where ' + matchField + ' = ' + dupeSetAgg.getValue(matchField) + '\n';
            var dedupeDescription = '';
    
            gs.log(dedupeShortDesc, 'Dedupe Task Script');
    
            //Prepare notes - Header row
            dedupeDescription += 'NAME | CREATED ON | UPDATED ON'
    
    
            //GATHER ADDITIONAL DEVICE DETAILS (NEED SYS_IDs)
    
            var dupeDevices = new GlideRecord(cmdbTable);
            dupeDevices.addEncodedQuery(dupeAggQuery); //Use the exact query that the aggregate used for this group
            dupeDevices.query();
    
            while (dupeDevices.next()) {
                var devName = dupeDevices.getValue('name');
                var devCreated = dupeDevices.getDisplayValue('sys_created_on');
                var devUpdated = dupeDevices.getDisplayValue('sys_updated_on');
                var devId = dupeDevices.getUniqueValue();
    
                //Add CI to notes
                dedupeDescription += '\n' + devName + ' | ' + devCreated + ' | ' + devUpdated;
    
                //Add sys_id to list of matched records for this group
                dupeRecordsList.push(devId);
            }
            gs.log(dedupeDescription, 'Dedupe Task Script');
    
    
            //CREATE DEDUPLICATION TASK
    
            //Convert array to string - .createDuplicateTask() expects a comma separated string
            var deviceIdString = dupeRecordsList.join();
    
            var dedupeUtil = new CMDBDuplicateTaskUtils();
            var dedupeTaskId = dedupeUtil.createDuplicateTask(deviceIdString);
    
    
            //UPDATE DEDUPLICATION TASK - ADD DETAILS
    
            if (dedupeTaskId) {
    
                var dedupeTask = new GlideRecord('reconcile_duplicate_task');
                dedupeTask.get(dedupeTaskId);
                dedupeTask.setValue('short_description', dedupeShortDesc);
                dedupeTask.work_notes = dedupeDescription;
                dedupeTask.update();
    
                gs.log('>>>Created de-duplication task ' + dedupeTask.getValue('number') + ' for ' + devName, 'Dedupe Task Script');
    
            }
    
        }
    
    } catch (er) {
        gs.log(er, 'Dedupe Task Script');
    
    }

    Saída (sys_id exclusivo):

    Dedupe Task Script: Found 2 records where name = MacBook Pro 15"
    
    Dedupe Task Script: NAME | CREATED ON | UPDATED ON
    MacBook Pro 15" | 2012-02-18 00:14:21 | 2021-12-17 04:28:17
    MacBook Pro 15" | 2012-02-18 00:14:37 | 2021-12-17 04:28:21
    MacBook Pro 15" | 2012-02-18 00:14:29 | 2021-12-17 04:28:31
    ...
    MacBook Pro 15" | 2012-02-18 00:14:36 | 2021-12-17 04:30:17
    MacBook Pro 15" | 2012-02-18 00:14:32 | 2021-12-17 04:30:14
    MacBook Pro 15" | 2012-02-18 00:14:19 | 2021-12-17 04:30:14
    Dedupe Task Script: >>>Created de-duplication task DUP0001002 for MacBook Pro 15"

    CMDBDuplicateTaskUtils - createDuplicateTask (SYSID de cadeia de caracteres)

    Crie uma tarefa de desduplicação na qual os sys_ids de ICs duplicados sejam especificados.

    Tabela 2. Parâmetros
    Nome Tipo Descrição
    sysIDs Cadeia de caracteres Uma lista separada por vírgulas de sys_ids para a qual criar uma tarefa de desduplicação.
    Tabela 3. Retornos
    Tipo Descrição
    Cadeia de caracteres O sys_id da tarefa de desduplicação criada.
    Retorna nulo se:
    • A cadeia de caracteres de entrada está vazia.
    • O parâmetro de entrada contém um sys_id que não está na tabela cmdb_ci.
    • O parâmetro de entrada contém um sys_id que está em uma tarefa de desduplicação aberta
    // where <sys-id1> and <sys-id2> are sys_IDs of CIs in the cmdb_ci table
    var sysIDs = '<sys-id1>,<sys-id2>';
    var dupTaskUtil = new CMDBDuplicateTaskUtils();
    var deDupTaskID = dupTaskUtil.createDuplicateTask(sysIDs);
    gs.info(deDupTaskID);

    Saída (sys_id exclusivo):

    04c53e2c1bac411079e52131604bcba9