CMDBUtil : global

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 8 minutes de lecture
  • L’API CMDBUtil fournit des méthodes utilitaires pour créer et gérer les relations de table dans les bases de Base de données de gestion des configurations (CMDB) référence et les gérerCMDB.

    CMDBUtil est un objet ScriptableObject accessible en JavaScript. L’API CMDBUtil possède des méthodes dynamiques et statiques. Vous accédez aux méthodes dynamiques en créant un SNC. Objet CMDBUtil. Vous accédez aux méthodes statiques à l’aide de SNC. Objet global CMDBUtil 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 de table 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
    propositionsChangements GlideRecord Collecte 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 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 Le GlideRecord qui contient la collection des changements proposés.
    Changeset 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 faisant en sorte que la table de dictionnaire système se décrive elle-même.

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

    Tableau 5. Paramètres
    Nom Type Description
    dictFile (Fichier de dicte 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 relation.

    Par défaut : table Relations CI [cmdb_rel_ci].

    parent Chaîne Sys_id de l’enregistrement de CI parent dans la table Éléments de configuration [cmdb_ci].
    enfant Chaîne Sys_id de l’enregistrement CI enfant dans la table Éléments de configuration [cmdb_ci].
    Champ parent Chaîne Étiquette de relation parente répertoriée dans la table Type de relation CI [cmdb_rel_type].
    childField Chaîne É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 Relations CI [cmdb_rel_ci].

    L’exemple suivant montre comment créer une relation CI entre le champ de contenu CI parent et le champ de contained_by CI enfant. La relation est répertoriée dans la table Relations 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 Le nom de la table de base.
    Tableau 10. Renvoie
    Type Description
    Chaîne Liste séparée par des virgules des sys_ids de tables qui étendent 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 de la table Vue [cmdb_view] CMDB.

    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_view] CMDB.

    L’exemple suivant montre comment lister 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 une liste de tous les parents d’une table.

    Cette méthode est 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 parents de la table spécifiée.

    L’exemple suivant montre comment lister 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 les classes à exclure dans la table Listes d’exclusion des règles métier [cmdb_business_rule_exclusions].

    Tableau 15. Paramètres
    Nom Type Description
    Classname Chaîne Nom de la classe dont l’exclusion doit être vérifiée.
    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)

    Entoure l’appel dans 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 L’enregistrement cible.
    Tableau 18. Renvoie
    Type Description
    nul

    CMDBUtil : processRelChange(événement GlideRecord, GlideRecord actuel, chaîne relType, triplet de chaîne)

    Entoure l’appel dans 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.
    Type de relation Chaîne Le type de relation qui a changé.
    Triplet Chaîne L’enfant, le parent et le nom de 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 Relation CI [cmdb_rel_ci]

    Champ parent Chaîne Champ parent
    childField Chaîne Champ enfant
    parentDesc Chaîne Descripteur de relation parente
    Desc enfant 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(String table, String oldParent, String newParent)

    Remplace le parent de la table donnée par le nouveau parent.

    Cette méthode est une méthode statique.

    Tableau 23. Paramètres
    Nom Type Description
    table Chaîne Table dont le parent doit être changé.
    AncienParent Chaîne L’ancien parent.
    nouveauParent Chaîne Le nouveau parent.
    Tableau 24. Renvoie
    Type Description
    Booléen

    Marqueur indiquant si le changement parent est réussi.

    Valeurs valides :
    • true : le changement de parent a réussi.
    • false : le changement de parent n’a pas réussi.

    Pour recréer l’exemple suivant, utilisez le code fourni afin de créer une table personnalisée. Ensuite, créez un enregistrement et vérifiez-le dans la table de tâches. La table personnalisée créée s’étend à partir de la table Tâche, ce qui signifie qu’elle a changé de parent avec succès. 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