Mapa com scripts de mapa de transformação explícitos

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 3 min. de leitura
  • Defina explicitamente os relacionamentos de mapeamento no próprio registro do mapa de transformação.

    Um script de mapa de transformação explícito define explicitamente os relacionamentos de mapeamento no próprio registro do mapa de transformação. Ele é executado depois que os valores do campo de origem são copiados para o registro de destino e antes de serem gravados no banco de dados.

    Importação de software do CMDB facilitada pelo script de mapeamento explícito

    Um exemplo que demonstra como o script de mapa explícito pode ser usado para facilitar uma importação de instâncias de software para o CMDB em que é necessário que a contagem na tabela de pacotes de software reflita o número de instâncias.

    No CMDB, existem tabelas para pacotes de software e instâncias de software. Um pacote de software refere-se a um título de software individual, como o Mozilla Firefox. Uma instância de software se refere a uma instância individual de um título de software, como o Mozilla Firefox em Jared_T60_Laptop.

    Em termos mais técnicos, uma instância de software é um relacionamento muitos para muitos com um pacote de software e um item de configuração. Este script importa instâncias de software. Ao fazer isso, ele verifica se existe um pacote de software para a instância. Se o pacote de software não existir, ele será criado e o sys_id do pacote recém-criado será associado à instância por meio do registro da instância Software campo.

    //First we will initialize some temporary variables, 
    //referencing values from the Import Set table source that will be used to 
    //reference software package records and create them if necessary. 
     
    var name= source.u_name;
    var version = source.u_version;
    var sid =""; 
     
    //Next we will perform a glide query on the software package table (Note: The target table 
    //for the import is software instances) 
    var sgr =new GlideRecord("cmdb_ci_spkg");
     
    //Here we are building our query to search for software packages where the name and 
    //version of the package matches the name and version of the instance being imported 
    sgr.addQuery("name",name);
    sgr.addQuery("version", version);
    sgr.query();
     
    //Now if a software package with the correct name and version are found then we record 
    //the sys_id of the package record otherwise we create the package and then record the sys_id
    if(sgr.next()){
       sid = sgr.sys_id;}else{// create it
       sgr.initialize();
       sgr.newRecord();
       sgr.name=name;
       sgr.version= version;
       sid = sgr.insert();
       
       //Here we make an entry in System Import Set Log saying that we had to create a software package  
       log.info("Created new spkg: "+name+" - "+ version);
    }
    //Finally we set the reference field on our software instance record to the sys_id we have 
    //recorded for the software package. In doing so we are also relating the 
    //software package with the instance and so the count, which keeps track of
    //the number of instances associated with a package, will automatically be incremented.
    target.software= sid;

    Preencher tabelas secundárias definindo nomes de classe em uma importação para o CMDB

    Um exemplo que demonstra como importar servidores para o banco de dados de gestão de configuração.

    A tabela de destino da importação é a tabela cmdb_ci_servers.
    var operating_system = source.u_operating_system.toString();
     
     
    //This if statement uses JavaScript regular expressions to search the operating system
    if( operating_system.match(/linux/i)!=null){
       target.sys_class_name="cmdb_ci_linux_server";
    };
     
    if( operating_system.match(/win/i)!=null){
       target.sys_class_name="cmdb_ci_win_server";
    };

    Limpeza de dados de importação do usuário

    Exemplo de script que demonstra como limpar os dados do usuário antes da importação.

    //Note: The field names referenced from an import set are 
    //prefixed with an "u_", also note that it is necessary  to use the java method
    // toString() to so that we can use JavaScript functions to 
    //manipulate the data.
    var name= source.u_name.toString();
     
    //Use native JavaScript function split to create an array for each word in the name "splitting" it 
    //anywhere that there is a space
    var split_names =name.split(" ");
     
    //Find the number of of names (i.e., first and last name only, or first middle and last name, etc.)
    var num_names = split_names.length;
     
    // If there is only one name then map it to the last name field in the user table
    if(num_names ==1){
       target.last_name= split_names[0];
    }
     
    //if there are two names then map the first one to first name and the last one to last name
    if(num_names ==2){
       target.first_name= split_names[0]; 
       target.last_name= split_names[1];
    }
     
    //if there are more than 3 names then all middle names get combined into one middle name this is done 
    //by shifting off the first name (array element 0 ) and mapping to first name and popping off the last
    // name and returning it to the last name field
    if(num_names >=3){
       target.first_name= split_names.shift();
       target.last_name= split_names.pop();
       target.middle_name= split_names.join(" ");
    }