---
sourceDocument: 호주 API 참조
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/api-reference

 Release :

    - australia

ft:locale :

    - ko-KR

ft:publication_title :

    - 호주 API 참조

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# CMDBDuplicateTaskUtils - 전역

# CMDBDuplicateTaskUtils - 전역 {#ariaid-title1}

* 릴리스 버전: Australia
* 
* 업데이트 날짜 2026년 03월 12일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 9분

CMDBDuplicateTaskUtils 스크립트 포함은 독립적인 유형의 중복 구성 항목(CI)을 포함하는 중복 제거 작업을 만드는 메서드를 제공합니다.

중복 제거 작업에는 다른 중복 제거 작업에 없는 CI만 포함될 구성 관리 데이터베이스(CMDB) 수 있습니다.

## CMDBDuplicateTaskUtils - CMDBDuplicateTaskUtils() {#ariaid-title2}

CMDBDuplicateTaskUtils 클래스의 인스턴스를 만듭니다.
{#CMDBDTU-CMDBDuplicateTaskUtils__table_hql_ls3_2db__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 없음 |   |   |
[표 1. 매개변수]

{#CMDBDTU-CMDBDuplicateTaskUtils__table_hql_ls3_2db}  

    /**
     * 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');

    }

출력(고유 sys_id):

    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(문자열 sysIDs) {#ariaid-title3}

중복 CI sys_ids가 지정된 중복 제거 작업을 만듭니다.
{#CMDBDTU-createDuplicateTask_S__table_ikd_gt3_2db__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| sysIDs | 문자열 | 중복 제거 작업을 생성할 sys_ids 목록이며 쉼표로 구분됩니다. |
[표 2. 매개변수]

{#CMDBDTU-createDuplicateTask_S__table_ikd_gt3_2db} {#CMDBDTU-createDuplicateTask_S__table_jkd_gt3_2db__entry__2}

| 유형 | 설명 |
|-|-|
| 문자열 | 생성된 중복 제거 작업의 sys_id입니다. 다음과 같은 경우 null을 반환합니다. * 입력 문자열이 비어 있습니다. * 입력 매개변수에 cmdb_ci 테이블에 없는 sys_id 포함되어 있습니다. * 입력 매개변수에 미결 중복 제거 작업에 있는 sys_id 포함되어 있습니다. {#CMDBDTU-createDuplicateTask_S__ul_axh_5vt_xxb} |
[표 3. 반환]

{#CMDBDTU-createDuplicateTask_S__table_jkd_gt3_2db}  

    // 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);

출력(고유 sys_id):

    04c53e2c1bac411079e52131604bcba9


