CMDBUtil - Global

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 9 min. de leitura
  • A API CMDBUtil fornece métodos de utilitário para criar e gerenciar relacionamentos de tabela nas linhas de base Configuration Management Database (CMDB) e gerenciar CMDB.

    CMDBUtil é um ScriptableObject acessível por JavaScript. A API CMDBUtil tem métodos dinâmicos e estáticos. Você acessa métodos dinâmicos criando um objeto SNC.CMDBUtil. Você acessa métodos estáticos usando o objeto global SNC.CMDBUtil para chamar os métodos.

    Este exemplo cria um objeto CMDBUtil.
    var cu = new SNC.CMDBUtil();
    cu.baselineProposedChangesGenDIFF(current, action.get('sysparm_changeset'));
    Este exemplo chama um método estático.
    var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');

    Use esses métodos para gerenciar CMDB relacionamentos de tabela e linhas de base.

    CMDBUtil - baselineProformedChangesApplyChanges(GlideRecord assignedChanges)

    Aplica mudanças propostas em um registro task_ci que representam um conjunto de atualizações para todos os ICs associados à tarefa.

    Este é um método dinâmico.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    propostasMudanças GlideRecord A coleção de mudanças propostas na solicitação de mudança (CHG).
    Tabela 2. Retorna
    Tipo Descrição
    vazio
    //Where current is a GlideRecord and action is the current UI action
    var base = new SNC.CMDBUtil();
    base.baselineProposedChangesApplyChanges(current);

    CMDBUtil - baselinePropostoChangesGenDif(GlideRecord atual, Cadeia de caracteres changeSet)

    Gera o XML para o diff de mudanças propostas e o adiciona ao registro task_ci correspondente.

    Este é um método dinâmico.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    atual GlideRecord O GlideRecord que contém a coleção de mudanças propostas.
    changeSet Cadeia de caracteres O sysid do registro task_ci que representa o conjunto de mudanças a ser usado.
    Tabela 4. Retorna
    Tipo Descrição
    vazio
    //Where current is a GlideRecord and action is the current UI action
    var base = new SNC.CMDBUtil();
    base.baselineProposedChangesGenDIFF(current, action.get('sysparm_changeset'));

    CMDBUtil - bootstrap(cadeia de caracteres dictFile)

    Inicializa o ambiente criando o banco de dados, criando a tabela de dicionário do sistema e fazendo com que a tabela de dicionário do sistema descreva a si mesma.

    Este é um método estático.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    dictArquivo Cadeia de caracteres O nome do arquivo, incluindo o caminho, do dicionário a ser carregado.
    Tabela 6. Retorna
    Tipo Descrição
    vazio

    CMDBUtil - createCIRelationship(cadeia de caracteres "tableName", cadeia de caracteres primário, cadeia de caracteres secundários, cadeia de caracteres parentField, cadeia de caracteres "childField")

    Cria um relacionamento de IC entre campos.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    tableName Cadeia de caracteres Opcional. O nome da tabela de destino do relacionamento.

    Padrão: tabela Relacionamento de IC [cmdb_rel_ci].

    primário Cadeia de caracteres Sys_id do registro de IC primário na tabela Itens de configuração [cmdb_ci].
    secundário Cadeia de caracteres Sys_id do registro de IC secundário na tabela Itens de configuração [cmdb_ci].
    parentField Cadeia de caracteres O rótulo de relacionamento primário listado na tabela Tipo de relacionamento de IC [cmdb_rel_type].
    childField Cadeia de caracteres O rótulo do relacionamento secundário listado na tabela Tipo de relacionamento de IC [cmdb_rel_type].
    Tabela 8. Retorna
    Tipo Descrição
    Cadeia de caracteres Sys_id do novo registro listado na tabela Relacionamento de IC [cmdb_rel_ci].

    O exemplo a seguir mostra como criar um relacionamento de IC entre o campo "contém" do IC primário e o campo "contains_by" do IC secundário. O relacionamento está listado na tabela Relacionamento de IC [cmdb_rel_ci].

    var base = new SNC.CMDBUtil();
    base.createCIRelationship('<parent_ci_sys_id>', '<child_ci_sys_id>, 'Contains', 'Contained by');

    CMDBUtil - getAllChildrenOfAsCommaList(cadeia de caracteres baseTable)

    Obtém todas as tabelas secundárias da tabela especificada como uma lista separada por vírgulas.

    Este é um método estático.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    baseTable Cadeia de caracteres O nome da tabela base.
    Tabela 10. Retorna
    Tipo Descrição
    Cadeia de caracteres Uma lista separada por vírgulas de sys_ids de tabelas que estendem a tabela base.
    //Where cmdv_ci_computer is a table.
    var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');
    gs.print(output);

    CMDBUtil – getCMDBViews()

    Obtém todos os registros na tabela Exibição do CMDB [cmdb_view].

    Este método é dinâmico.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 12. Retorna
    Tipo Descrição
    Matriz Lista dos registros na tabela Exibição do CMDB [cmdb_view].

    O exemplo a seguir mostra como listar as exibições do CMDB.

    var util = new SNC.CMDBUtil(); 
    var cmdbViews = util.getCMDBViews();
    gs.info(cmdbViews);
    
    // Note that the output in the example is type: java.util.ArrayList
    // To convert to JS Array, use ArrayUtils (add these lines preceding gs.info):
    // var arrUtil = new global.ArrayUtil();
    // var arrViews = arrUtil.convertArray(cmdbViews);

    Saída:

    [View 3, View 1, View 2, Another view]

    CMDBUtil - getTables0(cadeia de caracteres "tableName")

    Obtém uma lista de todos os primários de uma tabela.

    Este método é um método estático.

    Tabela 13. Parâmetros
    Nome Tipo Descrição
    tableName Cadeia de caracteres O nome da tabela.
    Tabela 14. Retorna
    Tipo Descrição
    Matriz Lista de tabelas que são primárias da tabela especificada.

    O exemplo a seguir mostra como listar as tabelas primárias da tabela Servidor [cmdb_ci_server].

    var gr = new GlideRecord('incident');
    
    // Querying the incident table
    gr.addQuery('number','INC0000005'); 
    gr.query();
    
    
    if(gr.next()){
      // Find the list of parent tables for Configuration item field of this Incident
      var ciParent = SNC.CMDBUtil.getTables0(gr.cmdb_ci.sys_class_name); 
      gs.print("Parent Tables for the Configuration Item '" + gr.cmdb_ci.name + "' belonging to the CMDB Class '"+ gr.cmdb_ci.sys_class_name+ "' are: \n" + ciParent);
    }

    Saída:

    Parent Tables for the Configuration Item 'ApplicationServerPeopleSoft' belonging to the CMDB Class 'cmdb_ci_server' are: 
    [cmdb_ci_server, cmdb_ci_computer, cmdb_ci_hardware, cmdb_ci, cmdb]

    CMDBUtil – isExcludedFromBR(cadeia de caracteres className)

    Determina se uma classe de IC está definida na tabela Listas de exclusões de regra de negócio [cmdb_business_rule_exclusions]. Use este método em uma condição avançada para impedir que uma regra de negócios seja executada em classes de IC excluídas.

    Por exemplo, a regra de negócios Criar ativo na inserção usa este método na condição avançada para impedir que a regra crie ativos para classes de IC, como cmdb_ci_qualifier, cmdb_ci_endpoint, cmdb_ci_storage_volume e cmdb_ci_vcenter_datastore_disk. Defina classes para exclusão na tabela Listas de exclusões de regra de negócio [cmdb_business_rule_exclusions].

    Tabela 15. Parâmetros
    Nome Tipo Descrição
    className Cadeia de caracteres Nome da classe para verificar se há exclusão.
    Tabela 16. Retorna
    Tipo Descrição
    Booliano Verdadeiro se a classe estiver definida na tabela Listas de exclusões de regra de negócio [cmdb_business_rule_exclusions]; caso contrário, falso.
    //Returns true if the cmdb_ci_endpoint class is defined 
    //in the Business Rule Exclusion Lists table
    var exclusion = SNC.CMDBUtil.isExcludedFromBR("cmdb_ci_endpoint");
    
    //Advanced condition that prevents business rules from executing on 
    //classes in the Business Rule Exclusion Lists table
    (!SNC.CMDBUtil.isExcludedFromBR(current.getTableName()))

    CMDBUtil - processCIChange(evento GlideRecord, destino GlideRecord)

    Encapsula a chamada para RelationshipEventProcessor(), que processa todas as mudanças nos relacionamentos de IC.

    Este é um método dinâmico.

    Tabela 17. Parâmetros
    Nome Tipo Descrição
    evento GlideRecord O registro do evento.
    destino GlideRecord O registro de destino.
    Tabela 18. Retorna
    Tipo Descrição
    vazio

    CMDBUtil - processRelChange(evento GlideRecord, GlideRecord atual, Cadeia de caracteres relType, Cadeia de caracteres trigêmeo)

    Encapsula a chamada para RelationshipEventProcessor(), que processa todas as mudanças nos relacionamentos de IC, com o tipo e o trio especificados.

    Este é um método dinâmico.

    Tabela 19. Parâmetros
    Nome Tipo Descrição
    evento GlideRecord O registro do evento
    atual GlideRecord O registro atual, que é o registro de relação ou um registro de usuário se o processo atual for uma exclusão.
    relType Cadeia de caracteres O tipo de relação que mudou.
    trigêmeo Cadeia de caracteres O secundário, o primário e o nome da classe da relação que mudou.
    Tabela 20. Retorna
    Tipo Descrição
    vazio

    CMDBUtil - removeCIRelationship(cadeia de caracteres tableName, cadeia de caracteres parentField, cadeia de caracteres childField, cadeia de caracteres parentDesc, object childDesc)

    Exclui o relacionamento de IC especificado.

    Este é um método dinâmico.

    Tabela 21. Parâmetros
    Nome Tipo Descrição
    tableName Cadeia de caracteres Opcional. Nome da tabela

    Padrão: tabela Relacionamento de IC [cmdb_rel_ci]

    parentField Cadeia de caracteres Campo primário
    childField Cadeia de caracteres Campo secundário
    parentDesc Cadeia de caracteres Descritor de relacionamento primário
    criançaDesc Objeto Descritor de relacionamento secundário
    Tabela 22. Retorna
    Tipo Descrição
    vazio

    Este exemplo de código mostra como remover todos os tipos de relação "Depends on::Used by" do primário especificado.

    var cu = new SNC.CMDBUtil();
    var parentSysID = '27d18f6fc0a8000b00ad14d4929d1b45';
    var parentDesc = 'Depends on';
    var childDesc = 'Used by'
     
    // Get records with parent equal parentSysID
    var relation = new GlideRecord('cmdb_rel_ci');
    relation.addQuery('parent', parentSysID);
    relation.query();
    while(relation.next()){
        // Remove every relation of type: 'Depends on::Used by' for the parent
        // If the relation type does not exist, it inserts this relation type into [cmdb_rel_type].
        cu.removeCIRelationship('cmdb_rel_ci', parentSysID, relation.child.getValue('sys_id'), parentDesc, childDesc)
    }

    CMDBUtil - reParentTable(cadeia de caracteres tabela, cadeia de caracteres oldParent, cadeia de caracteres newParent)

    Altera o primário da tabela fornecida para o novo primário.

    Este método é um método estático.

    Tabela 23. Parâmetros
    Nome Tipo Descrição
    tabela Cadeia de caracteres A tabela a ser redefinida.
    oldParent Cadeia de caracteres O pai antigo.
    novoPai Cadeia de caracteres O novo primário.
    Tabela 24. Retorna
    Tipo Descrição
    Booliano

    Sinalizador que indica se a mudança primária foi bem-sucedida.

    Valores válidos:
    • verdadeiro: a mudança primária foi bem-sucedida.
    • falso: a mudança primária não foi bem-sucedida.

    Para recriar o exemplo a seguir, use o código fornecido para criar uma tabela personalizada. Em seguida, crie um registro e verifique-o na tabela de tarefas. A tabela personalizada criada se estende da tabela Tarefa, o que significa que ela foi redefinida com sucesso. O código não deve ser usado diretamente por meio de copiar e colar. Para mostrar a saída, a tabela personalizada foi criada antes de executar o código.

    /*
      Before running the code in the background Script Make Sure 'Record For Rollback' is unchecked.
    
      This API CMDBUtil.reParentTable changes the parent of the table but will not allow the OOB tables to change the parent it works only in the custom table. Hence this script contains the creation of the custom table.
      API CMDBUtil.reParentTable has 3 parameters (Table, Old Parent , New Parent);
      We can make the Parent as Null as well by using this (Table, Old Parent, '');
    
      The code in this example shows how to create a custom table without any extension.
      Then creating a record and then again creating a record and checking in the task table after it gets extended to the task table.
    
      If the code returns false means the record is not present in the task table as it is not extended. It returns true only when the record is found in the task table after the table is extended.
    
    */
    
    /* Run the following code to create the custom table without an extension
    createCustomTable('u_custom_table','Custom Table'); // Creating a custom Table (don't create if you have one)
    var CreatedRecord = CreateCustomRecord('u_custom_table'); // Creating a record in the custom table
    gs.print(CheckRecord('u_custom_table'));  // Checking of the record in the task table by passing the Class Name (A.K.A your custom Table)
    
    var getParentTables = new SNC.CMDBUtil.reParentTable('u_custom_table','','task'); // Extending the custom table to task table . This Works only when the table is extendable
    var CreatedRecordAfter = CreateCustomRecord('u_custom_table'); // Creating a record in the custom table
    gs.print(CheckRecord('u_custom_table'));  // Checking of the record in the task table by passing the Class Name (A.K.A your custom Table)
    */
    
    // If the custom Table is already created, run this. (Do not run these 4 lines when creating the table)
    gs.print(CheckRecord('u_custom_table')); //Checking of the record in the task table by passing the Class Name (A.K.A your custom Table)
    var getParentTables = new SNC.CMDBUtil.reParentTable('u_custom_table','','task'); //Extending the custom table to task table . This Works only when the table is extendable
    var CreatedRecordAfter = CreateCustomRecord('u_custom_table'); //Creating a record in the custom table
    gs.print(CheckRecord('u_custom_table'));  //Checking of the record in the task table by passing the Class Name (A.K.A your custom Table)
    
    
    function createCustomTable(Name, Label)
    {
      var customTable = new GlideRecord('sys_db_object');
      customTable.initialize();
      customTable.name=  Name ;
      customTable.label= Label ;
      customTable.is_extendable= true;
      customTable.insert();
    }
    
    function CreateCustomRecord(customTableName)
    {
      var customTable = new GlideRecord(customTableName);
      customTable.initialize();
      return customTable.insert();
    }
    
    function CheckRecord(customTableName)
    {
      var task =new GlideRecord('task');
      task.addQuery('sys_class_name', customTableName);
      task.query();
    
      if(task.next())
      {
        return true;
      }
    
      return false;
    }

    Saída:

    *** Script: true
    *** Script: true