CMDBUtil : global

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 8 minutes de lecture
  • 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.

    Cet exemple crée un objet CMDBUtil.
    var cu = new SNC.CMDBUtil();
    cu.baselineProposedChangesGenDIFF(current, action.get('sysparm_changeset'));
    Cet exemple appelle une méthode statique.
    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.

    Tableau 1. Paramètres
    Nom Type Description
    proposedChanges GlideRecord Collection des changements proposés dans la demande de changement (CHG).
    Tableau 2. Renvoie
    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.

    Tableau 3. Paramètres
    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.
    Tableau 4. Renvoie
    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.

    Tableau 5. Paramètres
    Nom Type Description
    dictFile Chaîne Le nom de fichier, y compris le chemin d’accès, du dictionnaire à charger.
    Tableau 6. Renvoie
    Type Description
    nul

    CMDBUtil : createCIRelationship(String tableName, String parent, String child, String parentField, String childField)

    Crée une relation CI entre les champs.

    Tableau 7. Paramètres
    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].
    Tableau 8. Renvoie
    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.

    Tableau 9. Paramètres
    Nom Type Description
    Table de base Chaîne Nom de la table de base.
    Tableau 10. Renvoie
    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.

    Tableau 11. Paramètres
    Nom Type Description
    Aucun
    Tableau 12. Renvoie
    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.

    Tableau 13. Paramètres
    Nom Type Description
    tableName Chaîne Le nom de la table.
    Tableau 14. Renvoie
    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].

    Tableau 15. Paramètres
    Nom Type Description
    Nom de classe Chaîne Nom de la classe dont vérifier l’exclusion.
    Tableau 16. Renvoie
    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.

    Tableau 17. Paramètres
    Nom Type Description
    event GlideRecord Enregistrement de l’événement.
    target GlideRecord Enregistrement cible.
    Tableau 18. Renvoie
    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.

    Tableau 19. Paramètres
    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é.
    Tableau 20. Renvoie
    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.

    Tableau 21. Paramètres
    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
    Tableau 22. Renvoie
    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.

    Il s’agit d’une méthode statique.

    Tableau 23. Paramètres
    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.
    Tableau 24. Renvoie
    Type Description
    Booléen

    Marqueur indiquant si le changement parent a réussi.

    Valeurs valides :
    • vrai : le changement parent a réussi.
    • faux : le changement parent n’a pas réussi.

    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