Carte avec scripts de carte de transformation explicite

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 3 minutes de lecture
  • Définissez explicitement les relations de mappage dans l’enregistrement de carte de transformation lui-même.

    Un script de carte de transformation explicite définit explicitement les relations de mappage dans l’enregistrement de carte de transformation lui-même. Il s’exécute une fois que les valeurs de champ source ont été copiées dans l’enregistrement cible et avant qu’elles ne soient écrites dans la base de données.

    Importation de logiciels CMDB facilitée par un script de mappage explicite

    Un exemple montrant comment un script de carte explicite peut être utilisé pour faciliter une importation d’instances logicielles vers la CMDB lorsqu’il est nécessaire que le nombre dans la table des packages logiciels reflète le nombre d’instances.

    Dans la CMDB, il existe des tables pour les packages logiciels et les instances logicielles. Un package logiciel fait référence à un titre de logiciel individuel, tel que Mozilla Firefox. Une instance logicielle fait référence à une instance individuelle d’un titre de logiciel tel que Mozilla Firefox sur Jared_T60_Laptop.

    En termes plus techniques, une instance logicielle est une relation plusieurs-à-plusieurs avec un package logiciel et un élément de configuration. Ce script importe des instances logicielles. Ce faisant, il vérifie s’il existe un package logiciel pour l’instance. Si le package logiciel n’existe pas, il est créé et le sys_id du package nouvellement créé est associé à l’instance via le champ Logiciel de l’enregistrement d’instance.

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

    Remplissage des tables enfants en définissant les noms de classes dans une importation dans la CMDB

    Exemple montrant comment importer des serveurs dans la base de données de gestion des configurations.

    La table de destination pour l’importation est la table 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";
    };

    Assainissement des données d’importation utilisateur

    Exemple de script montrant comment nettoyer les données utilisateur avant l’importation.

    //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(" ");
    }