CMDBUtil : global
L’API CMDBUtil fournit des méthodes utilitaires pour la création et la gestion des relations entre les tables dans les Base de données de gestion des configurations (CMDB)CMDB bases de référence.
CMDBUtil est un objet Scriptable accessible en JavaScript. L’API CMDBUtil a des méthodes dynamiques et statiques. Pour accéder aux méthodes dynamiques, créez un SNC. Objet CMDBUtil. Vous accédez aux méthodes statiques à l’aide de SNC. CMDBUtil objet global pour appeler les méthodes.
var cu = new SNC.CMDBUtil();
cu.baselineProposedChangesGenDIFF(current, action.get('sysparm_changeset'));var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');Utilisez ces méthodes pour gérer les CMDB relations entre les tables et les bases de référence.
CMDBUtil : baselineProposedChangesApplyChanges(GlideRecord proposedChanges)
Applique les changements proposés dans un enregistrement de task_ci qui représentent un ensemble de mises à jour pour tous les CI associés à la tâche.
Il s’agit d’une méthode dynamique.
| Nom | Type | Description |
|---|---|---|
| proposedChanges | GlideRecord | Collection des changements proposés dans la demande de changement (CHG). |
| Type | Description |
|---|---|
| nul |
//Where current is a GlideRecord and action is the current UI action
var base = new SNC.CMDBUtil();
base.baselineProposedChangesApplyChanges(current);
CMDBUtil : baselineProposedChangesGenDiff(GlideRecord current, String changeSet)
Génère le code XML pour la différence des changements proposés et l’ajoute à l’enregistrement de task_ci correspondant.
Il s’agit d’une méthode dynamique.
| Nom | Type | Description |
|---|---|---|
| current | GlideRecord | GlideRecord qui contient la collection des changements proposés. |
| Ensemble de changements | Chaîne | Sysid de l’enregistrement de task_ci qui représente l’ensemble de changements à utiliser. |
| Type | Description |
|---|---|
| nul |
//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(String dictFile)
Amorce l’environnement en créant la base de données, en créant la table de dictionnaire système et en demandant à la table de dictionnaire système de se décrire elle-même.
Il s’agit d’une méthode statique.
| Nom | Type | Description |
|---|---|---|
| dictFile | Chaîne | Le nom de fichier, y compris le chemin d’accès, du dictionnaire à charger. |
| Type | Description |
|---|---|
| nul |
CMDBUtil : createCIRelationship(String tableName, String parent, String child, String parentField, String childField)
Crée une relation CI entre les champs.
| Nom | Type | Description |
|---|---|---|
| tableName | Chaîne | Facultatif. Nom de la table cible de la relation. Par défaut : table Relation CI [cmdb_rel_ci]. |
| parent | Chaîne | Sys_id de l’enregistrement du CI parent dans la table Éléments de configuration [cmdb_ci]. |
| enfant | Chaîne | Sys_id de l’enregistrement du CI enfant dans la table Éléments de configuration [cmdb_ci]. |
| Champ parent | Chaîne | L’étiquette de relation parente répertoriée dans la table Type de relation CI [cmdb_rel_type]. |
| childField | Chaîne | L’étiquette de relation enfant répertoriée dans la table Type de relation CI [cmdb_rel_type]. |
| Type | Description |
|---|---|
| Chaîne | Sys_id du nouvel enregistrement répertorié dans la table Relation CI [cmdb_rel_ci]. |
L’exemple suivant montre comment créer une relation CI entre le champ CI contenant parent et le champ contained_by CI enfant. La relation est répertoriée dans la table Relation CI [cmdb_rel_ci].
var base = new SNC.CMDBUtil();
base.createCIRelationship('<parent_ci_sys_id>', '<child_ci_sys_id>, 'Contains', 'Contained by');
CMDBUtil : getAllChildrenOfAsCommaList(String baseTable)
Obtient toutes les tables enfants de la table spécifiée sous forme de liste séparée par des virgules.
Il s’agit d’une méthode statique.
| Nom | Type | Description |
|---|---|---|
| Table de base | Chaîne | Nom de la table de base. |
| Type | Description |
|---|---|
| Chaîne | Liste séparée par des virgules de sys_ids de tables étendant la table de base. |
//Where cmdv_ci_computer is a table.
var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');
gs.print(output);
CMDBUtil : getCMDBViews()
Obtient tous les enregistrements dans la table Vue CMDB [cmdb_view].
Cette méthode est dynamique.
| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Tableau | Liste des enregistrements de la table Vue CMDB [cmdb_view]. |
L’exemple suivant montre comment répertorier les vues 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);
Sortie :
[View 3, View 1, View 2, Another view]
CMDBUtil : getTables0(String tableName)
Obtient la liste de tous les parents d’une table.
Il s’agit d’une méthode statique.
| Nom | Type | Description |
|---|---|---|
| tableName | Chaîne | Le nom de la table. |
| Type | Description |
|---|---|
| Tableau | Liste des tables parentes de la table spécifiée. |
L’exemple suivant montre comment répertorier les tables parentes de la table Serveur [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);
}
Sortie :
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(String, className)
Détermine si une classe CI est définie dans la table Listes d’exclusion des règles métier [cmdb_business_rule_exclusions]. Utilisez cette méthode dans une condition avancée pour empêcher une règle métier de s’exécuter sur les classes CI exclues.
Par exemple, la règle métier Créer un actif à l’insertion utilise cette méthode dans la condition avancée pour empêcher la règle de créer des actifs pour les classes CI telles que cmdb_ci_qualifier, cmdb_ci_endpoint, cmdb_ci_storage_volume et cmdb_ci_vcenter_datastore_disk. Définissez des classes à exclure dans la table Listes d’exclusion des règles métier [cmdb_business_rule_exclusions].
| Nom | Type | Description |
|---|---|---|
| className | Chaîne | Nom de la classe dont vérifier l’exclusion. |
| Type | Description |
|---|---|
| Booléen | Vrai si la classe est définie dans la table Listes d’exclusion des règles métier [cmdb_business_rule_exclusions] ; sinon, faux. |
//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(événement GlideRecord, cible GlideRecord)
Encapsule l’appel à RelationshipEventProcessor(), qui traite tous les changements apportés aux relations CI.
Il s’agit d’une méthode dynamique.
| Nom | Type | Description |
|---|---|---|
| event | GlideRecord | Enregistrement de l’événement. |
| target | GlideRecord | Enregistrement cible. |
| Type | Description |
|---|---|
| nul |
CMDBUtil : processRelChange(événement GlideRecord, GlideRecord actuel, chaîne relType, triolet de chaîne)
Enveloppe l’appel à RelationshipEventProcessor(), qui traite tous les changements apportés aux relations CI, avec le type et le triplet spécifiés.
Il s’agit d’une méthode dynamique.
| Nom | Type | Description |
|---|---|---|
| event | GlideRecord | Enregistrement de l’événement |
| current | GlideRecord | L’enregistrement actuel, qui est soit l’enregistrement de relation, soit un enregistrement d’utilisateur si le processus actuel est une suppression. |
| relType | Chaîne | Type de relation qui a changé. |
| triplet | Chaîne | Le nom de l’enfant, du parent et de la classe de la relation qui a changé. |
| Type | Description |
|---|---|
| nul |
CMDBUtil : removeCIRelationship(String tableName, String parentField, String childField, String parentDesc, Object childDesc)
Supprime la relation CI spécifiée.
Il s’agit d’une méthode dynamique.
| Nom | Type | Description |
|---|---|---|
| tableName | Chaîne | Facultatif. Nom de la table Par défaut : table de relations CI [cmdb_rel_ci] |
| Champ parent | Chaîne | Champ parent |
| childField | Chaîne | Champ enfant |
| parentDesc | Chaîne | Descripteur de relation parente |
| childDesc | Objet | Descripteur de relation enfant |
| Type | Description |
|---|---|
| nul |
Cet exemple de code montre comment supprimer chaque type de relation « Depends on ::Used by » pour le parent spécifié.
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(Table de chaînes, Chaîne oldParent, Chaîne newParent)
Remplace le parent d’une table donnée par le nouveau parent.
| Nom | Type | Description |
|---|---|---|
| Table | Chaîne | Table dont le parent doit être modifié. |
| oldParent | Chaîne | Le vieux parent. |
| newParent | Chaîne | Le nouveau parent. |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant si le changement parent a réussi. Valeurs valides :
|
Pour recréer l’exemple suivant, utilisez le code fourni pour créer une table personnalisée. Créez ensuite un enregistrement et archivez-le dans la table de tâches. La table personnalisée créée s’étend à partir de la table de tâches, ce qui signifie qu’elle a changé de parent. Le code n’est pas destiné à être utilisé directement par copier-coller. Pour afficher la sortie, la table personnalisée a été créée avant d’exécuter le code.
/*
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;
}
Sortie :
*** Script: true
*** Script: true