Carte avec des scripts de carte de transformation explicites
Définissez explicitement les relations de mappage dans l’enregistrement de carte de transformation proprement dit.
Un script de carte de transformation explicite définit explicitement les relations de mappage dans l’enregistrement de carte de transformation proprement dit. 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 logiciel CMDB facilitée par un script de mappage explicite
Exemple illustrant comment un script de mappage explicite peut être utilisé pour faciliter l’importation d’instances logicielles dans la CMDB, lorsqu’il est nécessaire que le nombre dans la table 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 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 la sys_id du package nouvellement créé est associée à 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 des noms de classes dans une importation vers la CMDB
Exemple illustrant l’importation de serveurs dans la base de données de gestion des configurations.
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 de l’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(" ");
}