CopyDynamicSchemaAPI - Escopo, global

  • Versão de lançamento: Australia
  • Atualizado 12 de mar. de 2026
  • 12 min. de leitura
  • . CopyDynamicSchemaAPI a classe fornece métodos e pontos de extensão para duplicar metadados de esquema dinâmico.

    . CopyDynamicSchemaAPI A API aceita uma categoria dinâmica especificada como entrada e continua a copiar todos os metadados associados por meio de um processo assíncrono em segundo plano. Os metadados incluem categorias secundárias, membros da categoria, atributos, conjuntos de opções, escolhas, e substituições de opção.

    Por exemplo, o esquema de metadados é usado para descrever características do produto, como cor, tamanho da tela ou velocidade da rede. Essas características mudam com o tempo, e o esquema ajuda a rastrear essas mudanças em todas as versões para itens como suporte técnico ou garantias. . CopyDynamicSchemaAPI permite duplicar esses volumes de metadados em uma única solicitação.

    Esta API fornece um ID de transação e uma chave de verificação para fins de segurança e para garantir que sua lógica se aplique somente a operações autorizadas. Além disso, essa API permite a nomeação personalizada e a duplicação parcial, indicando quais registros ignorar no processo de cópia. Caso alguma parte do processo de cópia falhe, o sistema inicia automaticamente uma reversão para reverter todas as mudanças feitas durante a operação.

    Requisitos

    Esta API requer o plug-in Suporte a esquema dinâmico (com.glide.dynamic_schema) e a função de administrador ou dynamic_schema_writer para acessá-lo.

    Métodos de ponto de extensão

    . CopyDynamicSchema A API é compatível com uma classe JavaScript chamada DynamicSchemaCopyController , que implementa três opcional métodos de ponto de extensão que você define usando lógica personalizada. Se você optar por implementar os pontos de extensão, precisará primeiro criá-los e defini-los antes de chamar qualquer método de API. A invocação de tempo de execução dos métodos de ponto de extensão acontece após as chamadas de script RunAsync() .
    Nota:
    Predefinições ( Atributos() , SkipChoiceSets() , SkipChoiceOverrrides() ) têm precedência sobre o comportamento do método de extensão.

    Esses métodos de ponto de extensão definem se o processo de cópia se aplica à transação atual, se um registro específico é copiado ou ignorado e qual é o nome da nova cópia. Isso permite que você controle se determinados metadados devem ser ignorados, renomear itens, impor regras de negócios ou evitar copiar informações confidenciais.

    Se nenhum ponto de extensão for fornecido, a API copiará tudo (a menos que a API seja chamada com qualquer um dos métodos de ignorar, por exemplo Atributos() ) e gera nomes para os elementos copiados.

    Os métodos de ponto de extensão são os seguintes:
    1. CopyDynamicSchemaAPI - verifyCopyOperation (TransactionId de cadeia de caracteres) - Chamado antes de copiar cada tipo de componente principal. Deve retornar a mesma chave de verificação fornecida para GetCopyApi() . Se o método retornar nulo, a lógica do ponto de extensão será ignorada para esta operação.
    2. CopyDynamicSchemaAPI - shouldCopy(Object recordData) - Se falso, ignora a cópia desse registro.
    3. CopyDynamicSchemaAPI - getCopyName(Object recordData) - Cria um nome personalizado ou gerado automaticamente para a cópia.

    Fluxo de trabalho CopyDynamicSchemaAPI

    O fluxo de trabalho a seguir mostra a ordem na qual chamar CopyDynamicSchemaAPI métodos em seus scripts:
    Nota:
    Se você optar por implementar métodos de ponto de extensão, primeiro defina-os antes de chamar os métodos de API a seguir.
    1. CopyDynamicSchemaAPI - getCopyApi(cadeia de caracteres categoryToCopy, cadeia de caracteres verificationKey) - Cria um objeto usado posteriormente na operação de cópia e valida entradas.
    2. CopyDynamicSchemaAPI - skipAttributes(), CopyDynamicSchemaAPI - skipChoiceSets(), CopyDynamicSchemaAPI - skipChoiceOverrides()- Predefinições para opcionalmente ignorar atributos, escolhas, conjuntos de escolhas e substituições de escolha durante a operação de cópia. Deve ser chamado antes de RunAsync() .
    3. CopyDynamicSchemaAPI - getTransactionId() - Usado para armazenar o ID da transação para que seu ponto de extensão possa reconhecer esta operação de cópia específica.
    4. CopyDynamicSchemaAPI - runAsync() - Inicia o processo de cópia assíncrona e aciona os pontos de extensão para cada registro que está sendo copiado. Retorna o ID da transação.
    5. Após RunAsync() , o sistema executa os métodos de ponto de extensão que você pode ter definido anteriormente: VerifyCopyOperation() , ShouldCopy() , GetCopyName() .

    Se alguma etapa falhar, a API reverterá toda a transação. Você pode monitorar o status da operação na tabela Progress Worker [sys_progress_worker], coluna Nome com um formato de nome como Copiar esquema dinâmico – <transaction ID> .

    CopyDynamicSchemaAPI - getCopyApi(cadeia de caracteres categoryToCopy, cadeia de caracteres verificationKey)

    Cria e retorna um objeto CopyDynamicSchemaAPI usado para executar a operação de cópia. Este método é fornecido na classe DynamicSchemaCopyController.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    CategoriaTocopiy Cadeia de caracteres O nome do namespace que identifica exclusivamente a categoria fornecida da qual copiar.

    Exemplo: "tech_store/u_device_specs/u_mobile_devices"

    Tabela: Categorias dinâmicas [dynamic_categories], coluna de nome com namespace (calculada)
    Nota:
    Pode ser necessário adicionar manualmente esta coluna à exibição da tabela usando o ícone de engrenagem.
    VerificationKey Cadeia de caracteres Chave de verificação para autorizar a operação de cópia. Para obter mais informações, consulte CopyDynamicSchemaAPI - getTransactionId().
    Tabela 2. Retornos
    Tipo Descrição
    Objeto R CopyDynamicSchemaAPI Objeto usado para obter o ID da transação, executar a cópia ou configurar uma estratégia predefinida. Somente retorna nulo se não autorizado. Lança uma exceção se a categoria inválida ou não for encontrada.

    O script de exemplo a seguir mostra como usar GetCopyApi() para obter um CopyDynamicSchemaAPI objeto que permite duplicar uma categoria existente. Para fazer isso, o exemplo chama GetCopyApi() com o nome namespace da categoria de destino ( tech_store/u_device_specs ) onde u_mobile_devices é o nome e com uma chave de verificação ( verification_key ).

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

    Este script retorna um CopyDynamicSchemaAPI objeto. Saída:

    {CopyDynamicSchemaAPI@13721}

    Com este objeto, você pode monitorar a operação, configurar predefinições conforme necessário e iniciar o processo de cópia usando métodos adicionais da API copyDynamicSchema.

    CopyDynamicSchemaAPI - skipAttributes()

    Predefinição que permite que os usuários ignorem a cópia de atributos durante a operação de cópia.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 4. Retorna
    Tipo Descrição
    Objeto Retorna um CopyDynamicSchemaAPI objeto com atributos omitidos. Usado para obter o ID da transação, executar a cópia ou configurar uma estratégia predefinida. Somente retorna nulo se não autorizado. Lança uma exceção se a categoria inválida ou não for encontrada.

    O exemplo a seguir demonstra como usar Atributos() para ignorar a cópia de atributos. Os membros da categoria ainda são copiados, mas o link para o atributo original, pois os atributos em si não são copiados. Além disso, todas as opções ou substituições de opção associadas exclusivamente a atributos não são incluídas.

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

    Saída:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - skipChoiceOverrides()

    Predefinição que permite que os usuários ignorem a cópia de todas as substituições de opção durante a operação de cópia.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 6. Retorna
    Tipo Descrição
    Objeto Retorna um CopyDynamicSchemaAPI objeto com substituições de opção omitidas. Usado para obter o ID da transação, executar a cópia ou configurar uma estratégia predefinida. Somente retorna nulo se não autorizado. Lança uma exceção se a categoria inválida ou não for encontrada.

    O exemplo a seguir demonstra como usar SkipChoiceOverrides() . Quando esta predefinição for aplicada, nenhuma substituição de opção será copiada.

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

    Saída:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - skipChoiceSets()

    Predefinição que permite que os usuários ignorem a cópia de todos os conjuntos de opções e escolhas durante a operação de cópia. Em vez disso, todos os elementos copiados que teriam vinculado ao conjunto de opções copiado ou opção serão vinculados ao conjunto de opções ou opção original.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 8. Retorna
    Tipo Descrição
    Objeto Retorna um CopyDynamicSchemaAPI objeto com conjuntos de opções e opções omitidos. Usado para obter o ID da transação, executar a cópia ou configurar uma estratégia predefinida. Somente retorna nulo se não autorizado. Lança uma exceção se uma categoria inválida ou não for encontrada.

    O exemplo a seguir demonstra como usar SkipChoiceSets() . Quando esta predefinição é aplicada para ignorar conjuntos de seleção ou escolhas na operação de cópia. As substituições de opção ainda são copiadas, mas o link para a opção original, pois as escolhas em si não são copiadas.

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

    Saída:

    {CopyDynamicSchemaAPI@13721}

    CopyDynamicSchemaAPI - getTransactionId()

    Gera e retorna um ID de transação exclusivo para cada operação de cópia iniciada. Este ID é usado para rastrear a operação e é passado para pontos de extensão para validação e lógica personalizada. Este método é fornecido na classe DynamicSchemaCopyController.

    O ID da transação é usado por pontos de extensão como GetCopyName() para garantir que a lógica personalizada se aplique somente à transação de cópia correta. Você pode armazenar esse ID em uma tabela personalizada para referenciá-lo mais tarde ou para coordenar com outros scripts.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 10. Retorna
    Tipo Descrição
    Cadeia de caracteres ID da transação que pode ser usado para identificar a operação de cópia. Você pode verificar o status da operação de cópia na tabela Progress Worker [sys_progress_worker], coluna Nome.

    Formato de nomenclatura: Copiar esquema dinâmico - <transaction ID>

    O exemplo a seguir mostra como usar GetTransactionId() Para recuperar e armazenar um ID de transação antes de copiar um esquema dinâmico. O usuário chama GetTransactionId() Para obter o ID da transação e armazená-lo em uma tabela personalizada. Quando a implementação do ponto de extensão é invocada durante o processo de cópia, ela pode verificar os IDs de transação armazenados para determinar se deve fornecer lógica de nomenclatura personalizada ou retornar nulo para ignorar a transação.

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

    A saída retorna o ID de transação exclusivo:

    “9a8e0f92ff5032103c16ffffffffff82”

    CopyDynamicSchemaAPI - runAsync()

    Inicia o processo de cópia para componentes de esquema dinâmico e retorna um ID de transação para identificar a operação de cópia. Este método é fornecido na classe DynamicSchemaCopyController.

    . RunAsync() o método executa a operação de cópia de forma assíncrona em segundo plano e chama os pontos de extensão, GetCopyName() , ShouldCopy() e. VerifyCopyOperation() , durante o processo de cópia para personalizar nomenclatura e segurança. Para exibir o status da operação de cópia, consulte a tabela Progress Worker [sys_progress_worker], coluna Nome com um formato de nomenclatura de Copiar esquema dinâmico - <transaction ID> .

    Se alguma parte da cópia falhar, a API reverterá automaticamente todas as mudanças para manter a consistência dos dados.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 12. Retorna
    Tipo Descrição
    Cadeia de caracteres ID da transação usado para identificar a operação de cópia. O processo de cópia é assíncrono, mas você pode verificar o status da operação de cópia na tabela Progress Worker [sys_progress_worker], coluna Nome com um formato de nomenclatura de Copiar esquema dinâmico - <transaction ID> .

    O comportamento de cópia depende da implementação do ponto de extensão e das predefinições do método ignorar. Os componentes só serão ignorados se ignorar() as predefinições de método são chamadas ou se o ponto de extensão ShouldCopy() retorna falso.

    O script de exemplo a seguir mostra como iniciar uma operação de cópia de esquema dinâmico usando o. RunAsync() método em que tech_store/u_device_specs/u_mobile_devices é o nome exclusivo da categoria para copiar e. verification_key é uma chave de verificação. Depois de obter a instância da API de cópia e armazenar o ID da transação para referência do ponto de extensão, RunAsync() inicia o processo de cópia de todos os componentes do esquema (categorias, membros da categoria, atributos, conjuntos de opções, escolhas, e substituições de opção).

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

    Gera o ID da transação:

    “9a8e0f92ff5032103c16ffffffffff82”

    CopyDynamicSchemaAPI - getCopyName(Object recordData)

    Método de ponto de extensão que permite nomes personalizados para uma cópia ou um nome gerado automaticamente se vazio ou nulo. Este método de ponto de extensão é fornecido na classe JavaScript DynamicSchemaCopyController.

    Tabela 13. Parâmetros
    Nome Tipo Descrição
    recordData Objeto Objeto que contém metadados de registro:
    • nome : nome do registro
    • namespaced_name : namespace e nome do registro
    • table_name : nome da tabela
    • sys_id ID exclusivo do sistema
    Tabela 14. Retornos
    Tipo Descrição
    Cadeia de caracteres Nome proposto para esta cópia.
    Possíveis erros:
    • O nome tem mais de 60 caracteres.
    • O nome da cópia já existe.
    Cadeia de caracteres (vazia ou nula) Nome gerado automaticamente para esta cópia.

    Este exemplo mostra uma implementação do ponto de extensão. Após ShouldCopy() retornos de método verdadeiro para confirmar a intenção do usuário de copiar o registro, o usuário fornece um nome personalizado para a cópia definindo GetCopyName() . Por exemplo, o usuário pode anexar "_copy" ao nome original como um rótulo escolhido ou permitir que o sistema gere um nome automaticamente.

    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' 
    
    };
    Saída:
    Record's name + "_copy"

    CopyDynamicSchemaAPI - shouldCopy(Object recordData)

    Método de ponto de extensão para criar operações de cópia personalizadas, permitindo que os usuários especifiquem se um registro específico deve ser copiado. O método retorna verdadeiro se o registro deve ser copiado e falso se ele deve ser ignorado.

    Este método de ponto de extensão é fornecido no DynamicSchemaCopyController e fornece flexibilidade para que os usuários controlem quais registros são incluídos no processo de cópia com base em seus requisitos.

    Tabela 15. Parâmetros
    Nome Tipo Descrição
    recordData HashMap Java Java HashMap que contém metadados de registro:
    • nome : nome do registro
    • namespaced_name : namespace e nome do registro
    • table_name : nome da tabela
    • sys_id ID exclusivo do sistema
    Tabela 16. Retornos
    Tipo Descrição
    Booliano Caso contrário, retorna verdadeiro se uma cópia deve ser feita e falso.

    Sinalizador que indica se uma cópia deve ser feita.

    Valores válidos:
    • Verdadeiro: Faça uma cópia.
    • Falso: Não faça uma cópia.

    Este exemplo mostra uma implementação do ShouldCopy() ponto de extensão. Quando a verificação estiver concluída, o método permite que os usuários implementem lógica de cópia personalizada, permitindo que eles ignorem registros de acordo com critérios como name, namespaced_name, table ou 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' 
    
    };

    Retorna verdadeiro se namespaced_name não for igual a. tech_store/u_device_specs/u_phone ou tech_store/u_device_specs/u_storage .

    CopyDynamicSchemaAPI - verifyCopyOperation (TransactionId de cadeia de caracteres)

    Método de ponto de extensão usado para verificar o ID da transação da operação de cópia antes de retornar a chave de verificação correspondente de GetCopyApi() , garantindo a relevância para a implementação do ponto de extensão. Este método de ponto de extensão é fornecido no DynamicSchemaCopyController classe.

    Tabela 17. Parâmetros
    Nome Tipo Descrição
    TransactionId Cadeia de caracteres Uma cadeia de caracteres exclusiva que identifica cada operação de cópia.
    Tabela 18. Retornos
    Tipo Descrição
    Cadeia de caracteres Chave de verificação de GetCopyApi() , Ou nulo se o ID da transação não for relevante para este ponto de extensão.

    Este exemplo mostra uma implementação do VerifyCopyOperation() ponto de extensão. O usuário deve verificar o ID da transação associado à operação de cópia antes de retornar a chave de verificação. A chave de verificação deve corresponder ao valor fornecido como argumento para GetCopyApi() método.

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

    Saída:

    “verification_key”