CopyDynamicSchemaAPI - 범위, 전역

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 20분
  • CopyDynamicSchemaAPI 클래스는 동적 스키마 메타데이터를 복제하기 위한 메서드와 확장점을 제공합니다.

    CopyDynamicSchemaAPI API는 지정된 동적 범주를 입력으로 받아들이고 비동기 백그라운드 프로세스를 통해 연결된 모든 메타데이터를 복사합니다. 메타데이터에는 하위 범주, 범주 구성원, 속성, 선택 세트, 선택 및 선택 무효화가 포함됩니다.

    예를 들어 메타데이터 스키마는 색상, 화면 크기 또는 네트워크 속도와 같은 제품 특성을 설명하는 데 사용됩니다. 이러한 특성은 시간이 지남에 따라 변경되며 스키마는 기술 지원 또는 보증과 같은 사항에 대해 버전 간에 이러한 변경 내용을 추적하는 데 도움이 됩니다. CopyDynamicSchemaAPI를 사용하면 단일 요청으로 이러한 양의 메타데이터를 복제할 수 있습니다.

    이 API는 보안을 위해 그리고 논리가 승인된 작업에만 적용되도록 하기 위해 트랜잭션 ID 및 검증 키를 제공합니다. 또한 이 API를 사용하면 복사 프로세스에서 건너뛸 기록을 표시하여 사용자 지정 이름 지정 및 부분 복제가 가능합니다. 복사 프로세스의 일부가 실패하면 시스템은 자동으로 롤백을 시작하여 작업 중에 변경된 모든 내용을 되돌립니다.

    요구 사항

    이 API에 액세스하려면 동적 스키마 지원(com.glide.dynamic_schema) 플러그인과 관리자 또는 dynamic_schema_writer 역할이 필요합니다.

    확장점 메서드

    copyDynamicSchema API는 사용자 지정 논리를 사용하여 정의하는 세 가지 선택적 확장점 메서드를 구현하는 DynamicSchemaCopyController라는 JavaScript 클래스를 지원합니다. 확장점을 구현하기로 선택한 경우 API 메서드를 호출하기 전에 먼저 확장점을 생성하고 정의해야 합니다. 확장점 메서드의 런타임 호출은 스크립트가 runAsync()를 호출한 후에 발생합니다.
    주:
    사전 설정(skipAttributes(), skipChoiceSets(), skipChoiceOverrrides())는 확장 메서드 동작보다 우선합니다.

    이러한 확장점 메서드는 복사 프로세스가 현재 트랜잭션에 적용되는지 여부, 특정 레코드를 복사하거나 건너뛰는지 여부, 새 복사 이름을 정의합니다. 이를 통해 특정 메타데이터를 건너뛰거나, 항목 이름을 바꾸거나, 비즈니스 규칙을 적용하거나, 중요한 정보의 복사를 방지할지 여부를 제어할 수 있습니다.

    확장점이 제공되지 않으면 API는 모든 것을 복사하고( 예를 들어 skipAttributes()와 같은 skip 메서드를 사용하여 API가 호출되지 않는 한) 복사된 요소의 이름을 생성합니다.

    확장점 메서드는 다음과 같습니다.
    1. CopyDynamicSchemaAPI - verifyCopyOperation(문자열 transactionId) - 각 주요 구성 요소 유형을 복사하기 전에 호출됩니다. getCopyApi()에 제공된 것과 동일한 검증 키를 반환해야 합니다. 메서드가 null을 반환하면 이 작업에 대한 확장점 논리가 무시됩니다.
    2. CopyDynamicSchemaAPI - shouldCopy(객체 recordData) - false인 경우 해당 레코드의 사본을 건너뜁니다.
    3. CopyDynamicSchemaAPI - getCopyName(객체 recordData) - 사본의 사용자 지정 또는 자동 생성 이름을 작성합니다.

    CopyDynamicSchemaAPI 워크플로우

    다음 워크플로우는 스크립트에서 CopyDynamicSchemaAPI 메서드를 호출하는 순서를 보여줍니다.
    주:
    확장점 메서드를 구현하도록 선택하는 경우 다음 API 메서드를 호출하기 전에 먼저 확장점 메서드를 정의해야 합니다.
    1. CopyDynamicSchemaAPI - getCopyApi(String categoryToCopy, 문자열 verificationKey) - 나중에 복사 조작에서 사용되는 오브젝트를 작성하고 입력의 유효성을 검증합니다.
    2. CopyDynamicSchemaAPI - skipAttributes(), , CopyDynamicSchemaAPI - skipChoiceSets()CopyDynamicSchemaAPI - skipChoiceOverrides() - 복사 작업 중에 속성, 선택 사항, 선택 세트 및 선택 재정의를 선택적으로 건너뛰는 사전 설정입니다. runAsync() 전에 호출되어야 합니다.
    3. CopyDynamicSchemaAPI - getTransactionId() - 확장점이 이 특정 복사 조작을 인식할 수 있도록 트랜잭션 ID를 저장하는 데 사용됩니다.
    4. CopyDynamicSchemaAPI - runAsync() - 비동기 복사 프로세스를 시작하고 복사되는 각 레코드에 대한 확장점을 트리거합니다. 트랜잭션 ID를 반환합니다.
    5. runAsync() 후 시스템은 verifyCopyOperation(), shouldCopy(), getCopyName()과 같이 이전에 정의했을 수 있는 확장점 메서드를 실행합니다.

    단계가 실패하면 API는 전체 트랜잭션을 롤백합니다. Progress Worker [sys_progress_worker] 테이블, 동적 스키마 복사 – <트랜잭션 ID>와 같은 이름 형식의 이름 열에서 작업 상태를 모니터링할 수 있습니다.

    CopyDynamicSchemaAPI - getCopyApi(String categoryToCopy, 문자열 verificationKey)

    복사 작업을 실행하는 데 사용되는 CopyDynamicSchemaAPI 객체를 만들어 반환합니다. 이 메서드는 DynamicSchemaCopyController 클래스에 제공됩니다.

    표 1. 매개변수
    이름 유형 설명
    categoryTocopy 문자열 복사할 주어진 범주를 고유하게 식별하는 네임스페이스 이름입니다.

    예: "tech_store/u_device_specs/u_mobile_devices"

    테이블: 동적 범주 [dynamic_categories], (계산된) 네임스페이스 이름 열
    주:
    톱니바퀴 아이콘을 사용하여 테이블 뷰에 이 열을 수동으로 추가해야 할 수도 있습니다.
    검증키 문자열 복사 작업에 권한을 부여하는 검증 키입니다. 자세한 내용은 CopyDynamicSchemaAPI - getTransactionId() 문서를 참조하십시오.
    표 2. 반환
    유형 설명
    객체 트랜잭션 ID를 가져오거나, 복사를 수행하거나, 사전 설정 전략을 구성하는 데 사용되는 CopyDynamicSchemaAPI 객체입니다. 권한이 없는 경우에만 null을 반환합니다. 잘못되었거나 범주를 찾을 수 없는 경우 예외를 발생시킵니다.

    다음 예제 스크립트는 getCopyApi() 를 사용하여 기존 범주를 복제할 수 있는 CopyDynamicSchemaAPI 객체를 가져오는 방법을 보여줍니다. 이를 위해 예제에서는 대상 범주의 네임스페이스 이름(tech_store/u_device_specs)(이름은 u_mobile_devices)과 확인 키(verification_key)를 사용하여 getCopyApi()를 호출합니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    
    api.runAsync();

    이 스크립트는 CopyDynamicSchemaAPI 객체를 반환합니다. 출력:

    {CopyDynamicSchemaAPI@13721}

    이 객체를 사용하면 작업을 모니터링하고, 필요에 따라 사전 설정을 구성하고, 추가 copyDynamicSchema API 메서드를 사용하여 복사 프로세스를 시작할 수 있습니다.

    CopyDynamicSchemaAPI - skipAttributes()

    사용자가 복사 작업 중에 속성 복사를 건너뛸 수 있도록 하는 사전 설정입니다.

    표 3. 매개변수
    이름 유형 설명
    안 함
    표 4. 반환
    유형 설명
    객체 속성이 생략된 CopyDynamicSchemaAPI 객체를 반환합니다. 트랜잭션 ID를 가져오거나, 복사를 수행하거나, 사전 설정된 전략을 구성하는 데 사용됩니다. 권한이 없는 경우에만 null을 반환합니다. 잘못되었거나 범주를 찾을 수 없는 경우 예외를 발생시킵니다.

    다음 예제에서는 skipAttributes() 를 사용하여 속성 복사를 건너뛰는 방법을 보여줍니다. 범주 구성원은 여전히 복사되지만 속성 자체가 복사되지 않는 원래 속성에 대한 링크입니다. 또한 속성에만 연결된 선택 항목 또는 선택 사항 재정의는 포함되지 않습니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    
    api.skipAttributes().runAsync(); 

    출력:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - skipChoiceOverrides()

    복사 작업 중에 사용자가 모든 선택 재정의의 복사를 건너뛸 수 있도록 하는 사전 설정입니다.

    표 5. 매개변수
    이름 유형 설명
    안 함
    표 6. 반환
    유형 설명
    객체 선택 재정의가 생략된 CopyDynamicSchemaAPI 객체를 반환합니다. 트랜잭션 ID를 가져오거나, 복사를 수행하거나, 사전 설정된 전략을 구성하는 데 사용됩니다. 권한이 없는 경우에만 null을 반환합니다. 잘못되었거나 범주를 찾을 수 없는 경우 예외를 발생시킵니다.

    다음 예제에서는 skipChoiceOverrides()를 사용하는 방법을 보여줍니다. 이 사전 설정이 적용되면 선택 재정의가 복사되지 않습니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    
    api.skipChoiceOverrides().runAsync();

    출력:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - skipChoiceSets()

    복사 작업 중에 사용자가 모든 선택 세트와 선택 항목의 복사를 건너뛸 수 있도록 하는 사전 설정입니다. 복사된 선택 세트 또는 선택에 연결될 모든 복사된 요소는 대신 원래의 선택 세트 또는 선택에 연결됩니다.

    표 7. 매개변수
    이름 유형 설명
    안 함
    표 8. 반환
    유형 설명
    객체 선택 세트와 선택 항목이 생략된 CopyDynamicSchemaAPI 객체를 반환합니다. 트랜잭션 ID를 가져오거나, 복사를 수행하거나, 사전 설정된 전략을 구성하는 데 사용됩니다. 권한이 없는 경우에만 null을 반환합니다. 잘못되었거나 범주를 찾을 수 없는 경우 예외를 발생시킵니다.

    다음 예제에서는 skipChoiceSets()를 사용하는 방법을 보여줍니다. 이 사전 설정이 적용되는 경우 복사 작업에서 선택 세트 또는 선택 항목을 건너뜁니다. 선택 사항 재정의는 여전히 복사되지만 선택 사항 자체는 복사되지 않으므로 원래 선택에 연결됩니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    
    api.skipChoiceSets().runAsync();

    출력:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - getTransactionId()

    시작하는 각 복사 작업에 대해 고유한 트랜잭션 ID를 생성하고 반환합니다. 이 ID는 작업을 추적하는 데 사용되며 유효성 확인 및 사용자 지정 논리를 위해 확장점으로 전달됩니다. 이 메서드는 DynamicSchemaCopyController 클래스에 제공됩니다.

    트랜잭션 ID는 getCopyName() 과 같은 확장점에서 사용되어 사용자 지정 논리가 올바른 복사 트랜잭션에만 적용되도록 합니다. 나중에 참조하거나 다른 스크립트와 조정하기 위해 이 ID를 사용자 지정 테이블에 저장할 수 있습니다.

    표 9. 매개변수
    이름 유형 설명
    안 함
    표 10. 반환
    유형 설명
    문자열 복사 작업을 식별하는 데 사용할 수 있는 트랜잭션 ID입니다. Progress Worker [sys_progress_worker] 테이블의 이름 열에서 복사 작업의 상태를 확인할 수 있습니다.

    명명 형식: 동적 스키마 복사 - <트랜잭션 ID>

    다음 예제는 동적 스키마를 복사하기 전에 getTransactionId() 를 사용하여 트랜잭션 ID를 검색하고 저장하는 방법을 보여줍니다. 사용자는 getTransactionId() 를 호출하여 트랜잭션 ID를 가져오고 이를 사용자 지정 테이블에 저장합니다. 복사 프로세스 중에 확장점 구현이 호출되면 저장된 트랜잭션 ID를 확인하여 사용자 지정 명명 논리를 제공해야 하는지 또는 트랜잭션을 무시하기 위해 null을 반환해야 하는지 확인할 수 있습니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    var id = api.getTransactionId(); 
    
    var gr = new GlideRecord("u_copy_transactions"); 
    gr.initialize(); 
    gr.setValue("u_transaction_id", id); 
    gr.insert(); 
    
    api.runAsync(); 

    출력은 고유한 트랜잭션 ID를 반환합니다.

    “9a8e0f92ff5032103c16ffffffffff82”

    CopyDynamicSchemaAPI - runAsync()

    동적 스키마 구성요소에 대한 복사 프로세스를 시작하고 복사 작업을 식별하기 위한 트랜잭션 ID를 반환합니다. 이 메서드는 DynamicSchemaCopyController 클래스에 제공됩니다.

    runAsync() 메서드는 백그라운드에서 복사 작업을 비동기식으로 실행하고 복사 프로세스 중에 확장점인 getCopyName(), shouldCopy()verifyCopyOperation()을 호출하여 이름 지정 및 보안을 사용자 지정합니다. 복사 작업의 상태를 보려면 Progress Worker [sys_progress_worker] 테이블, 명명 형식이 Copy Dynamic Schema - <transaction ID>인 이름 열을 참조하십시오.

    복사의 일부가 실패하면 API는 데이터 일관성을 유지하기 위해 모든 변경 내용을 자동으로 롤백합니다.

    표 11. 매개변수
    이름 유형 설명
    안 함
    표 12. 반환
    유형 설명
    문자열 복사 작업을 식별하는 데 사용되는 트랜잭션 ID입니다. 복사 프로세스는 비동기식이지만 Progress Worker [sys_progress_worker] 테이블, 명명 형식이 Copy Dynamic Schema - <transaction ID>인 이름 열에서 복사 작업 상태를 확인할 수 있습니다.

    복사 동작은 확장점 구현 및 건너뛰기 메서드 사전 설정에 따라 달라집니다. skip() 메서드 사전 설정이 호출되거나 확장점 shouldCopy()가 false를 반환하는 경우에만 구성요소를 건너뛰어야 합니다.

    다음 예제 스크립트에서는 runAsync() 메서드를 사용하여 동적 스키마 복사 작업을 시작하는 방법을 보여 줍니다. 여기서 tech_store/u_device_specs/u_mobile_devices 는 복사할 범주의 고유 이름이고 verification_key 는 확인 키입니다. 복사 API 인스턴스를 가져오고 확장점 참조를 위해 트랜잭션 ID를 저장한 후 runAsync() 는 모든 스키마 구성 요소(범주, 범주 멤버, 속성, 선택 집합, 선택 및 선택 재정의)에 대한 복사 프로세스를 시작합니다.

    var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key"); 
    
    api.runAsync();

    트랜잭션 ID를 출력합니다.

    “9a8e0f92ff5032103c16ffffffffff82”

    CopyDynamicSchemaAPI - getCopyName(객체 recordData)

    비어 있거나 null인 경우 복사본의 사용자 지정 이름 또는 자동 생성된 이름을 허용하는 확장점 메서드입니다. 이 확장점 메서드는 DynamicSchemaCopyController JavaScript 클래스에 제공됩니다.

    표 13. 매개변수
    이름 유형 설명
    recordData 객체 기록 메타데이터를 포함하는 객체:
    • 이름: 기록 이름
    • namespaced_name: 네임스페이스 + 기록 이름
    • table_name: 테이블 이름
    • sys_id: 고유 시스템 ID
    표 14. 반환
    유형 설명
    문자열 이 사본의 제안된 이름입니다.
    가능한 오류:
    • 이름이 60자를 초과합니다.
    • 복사 이름이 이미 있습니다.
    문자열(비어 있음 또는 null) 이 사본의 자동 생성된 이름입니다.

    이 예에서는 확장점의 구현을 보여줍니다. shouldCopy() 메서드가 기록을 복사하려는 사용자의 의도를 확인하기 위해 true를 반환한 후 사용자는 getCopyName()을 정의하여 복사본의 사용자 지정 이름을 제공합니다. 예를 들어, 사용자는 원래 이름에 "_copy"을 선택한 레이블로 추가하거나 시스템에서 자동으로 이름을 생성하도록 허용할 수 있습니다.

    var DynamicSchemaCopyController = Class.create(); 
    DynamicSchemaCopyController.prototype = { 
     
        initialize: function() {}, 
    
        verifyCopyOperation: function(transactionId) { 
            var transactionIdExist = new GlideRecord('u_copy_transactions'); 
            transactionIdExist.addQuery('u_transaction_id', transactionId); 
            transactionIdExist.query(); 
     
            if (transactionIdExist.hasNext()) { 
                return 'verification_key'; 
            } 
            else { 
                return null; 
            } 
        }, 
     
        shouldCopy: function(recordData) { 
            var namespacedNameSkip = [ 
                'tech_store/u_device_specs/u_phone', 
                'tech_store/u_device_specs/u_storage' 
            ]; 
            var recordNamespacedName = String(recordData.get('namespaced_name')); 
            if (namespacedNameSkip.includes(recordNamespacedName)) { 
                return false; 
            } 
            return true; 
        }, 
     
        getCopyName: function(recordData) { 
            return String(recordData.get('name') + '_copy'); 
        }, 
     
        type: 'DynamicSchemaCopyController' 
    
    };
    출력:
    Record's name + "_copy"

    CopyDynamicSchemaAPI - shouldCopy(객체 recordData)

    사용자가 특정 기록을 복사할지 여부를 지정할 수 있도록 하여 사용자 지정 복사 작업을 만드는 확장점 메서드입니다. 이 메서드는 기록을 복사하는 경우 true를 반환하고 건너뛰어야 하는 경우 false를 반환합니다.

    이 확장점 메서드는 DynamicSchemaCopyController 클래스에 제공되며 사용자가 요구 사항에 따라 복사 프로세스에 포함되는 기록을 제어할 수 있는 유연성을 제공합니다.

    표 15. 매개변수
    이름 유형 설명
    recordData Java 해시 맵 기록 메타데이터를 포함하는 Java HashMap:
    • 이름: 기록 이름
    • namespaced_name: 네임스페이스 + 기록 이름
    • table_name: 테이블 이름
    • sys_id: 고유 시스템 ID
    표 16. 반환
    유형 설명
    부울 사본을 만들어야 하는 경우 예를 반환하고 그렇지 않으면 아니오를 반환합니다.

    사본을 만들어야 하는지 여부를 나타내는 플래그입니다.

    유효한 값은 다음과 같습니다.
    • true: 사본을 만듭니다.
    • false: 사본을 만들지 않습니다.

    이 예제에서는 shouldCopy() 확장점의 구현을 보여줍니다. 검증이 완료되면 이 메서드를 통해 사용자는 사용자 지정 복사 논리를 구현하여 이름, namespaced_name, 테이블 또는 sys_id와 같은 기준에 따라 기록을 건너뛸 수 있습니다.

    var DynamicSchemaCopyController = Class.create(); DynamicSchemaCopyController.prototype = { 
     
        initialize: function() {}, 
    
        verifyCopyOperation: function(transactionId) { 
            var transactionIdExist = new GlideRecord(‘u_copy_transactions’); 
            transactionIdExist.addQuery(‘u_transaction_id’, transactionId); 
            transactionIdExist.query(); 
     
            if (transactionIdExist.hasNext()) { 
                return ‘verification_key’; 
            } 
            else { 
                return null; 
            } 
        }, 
     
        shouldCopy: function(recordData) { 
            var namespacedNameSkip = [ 
                ‘tech_store/u_device_specs/u_phone’, 
                ‘tech_store/u_device_specs/u_storage’ 
            ]; 
            var recordNamespacedName = String(recordData.get(‘namespaced_name’)); 
            if (namespacedNameSkip.includes(recordNamespacedName)) { 
                return false; 
            } 
            return true; 
        }, 
     
        getCopyName: function(recordData) { 
            return String(recordData.get(‘name’) + ‘_copy’); 
        }, 
     
        type: 'DynamicSchemaCopyController' 
    
    };

    namespaced_name이 tech_store/u_device_specs/u_phone 또는 tech_store/u_device_specs/u_storage과 같지 않으면 예를 반환합니다.

    CopyDynamicSchemaAPI - verifyCopyOperation(문자열 transactionId)

    getCopyApi()에서 일치하는 검증 키를 반환하기 전에 복사 작업의 트랜잭션 ID를 확인하는 데 사용되는 확장점 메서드로, 확장점 구현과의 관련성을 보장합니다. 이 확장점 메서드는 DynamicSchemaCopyController 클래스에 제공됩니다.

    표 17. 매개변수
    이름 유형 설명
    트랜잭션 ID 문자열 각 복사 작업을 식별하는 고유 문자열입니다.
    표 18. 반환
    유형 설명
    문자열 getCopyApi()의 검증 키 또는 트랜잭션 ID가 이 확장점과 관련이 없는 경우 null입니다.

    이 예제에서는 verifyCopyOperation() 확장점의 구현을 보여줍니다. 사용자는 검증 키를 반환하기 전에 복사 작업과 관련된 트랜잭션 ID를 확인해야 합니다. 검증 키는 getCopyApi() 메서드에 대한 인수로 제공된 값과 일치해야 합니다.

    var DynamicSchemaCopyController = Class.create(); DynamicSchemaCopyController.prototype = { 
     
        initialize: function() {}, 
    
        verifyCopyOperation: function(transactionId) { 
            var transactionIdExist = new GlideRecord(‘u_copy_transactions’); 
            transactionIdExist.addQuery(‘u_transaction_id’, transactionId); 
            transactionIdExist.query(); 
     
            if (transactionIdExist.hasNext()) { 
                return ‘verification_key’; 
            } 
            else { 
                return null; 
            } 
        }, 
     
        shouldCopy: function(recordData) { 
            var namespacedNameSkip = [ 
                ‘tech_store/u_device_specs/u_phone’, 
                ‘tech_store/u_device_specs/u_storage’ 
            ]; 
            var recordNamespacedName = String(recordData.get(‘namespaced_name’)); 
            if (namespacedNameSkip.includes(recordNamespacedName)) { 
                return false; 
            } 
            return true; 
        }, 
     
        getCopyName: function(recordData) { 
            return String(recordData.get(‘name’) + ‘_copy’); 
        }, 
     
        type: 'DynamicSchemaCopyController' 
    
    }; 

    출력:

    “verification_key”