CMDBUtil : Global

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 8 Minuten Lesedauer
  • Die CMDBUtil- API stellt Dienstprogrammmethoden zum Erstellen und Verwalten von Tabellenbeziehungen in den Configuration Management Database (CMDB) sowie zum Verwalten von CMDB -Baselines bereit.

    CMDBUtil ist ein über JavaScript zugängliches ScriptableObject. Die CMDBUtil- API verfügt über dynamische und statische Methoden. Sie greifen auf dynamische Methoden zu, indem Sie ein SNC.CMDBUtil-Objekt erstellen. Sie greifen auf statische Methoden zu, indem Sie das globale Objekt SNC.CMDBUtil verwenden, um die Methoden aufzurufen.

    In diesem Beispiel wird ein CMDBUtil-Objekt erstellt.
    var cu = new SNC.CMDBUtil();
    cu.baselineProposedChangesGenDIFF(current, action.get('sysparm_changeset'));
    Dieses Beispiel ruft eine statische Methode auf.
    var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');

    Verwenden Sie diese Methoden, um Tabellenbeziehungen und Baselines CMDB zu verwalten.

    CMDBUtil – baselineProposedChangesApplyChanges(GlideRecord proposedChanges)

    Wendet vorgeschlagene Änderungen in einem Datensatz „task_ci“ an, die einen Aktualisierungssatz für alle CIs darstellen, die der Aufgabe zugeordnet sind.

    Dies ist eine dynamische Methode.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    proposedChange GlideRecord Die Sammlung vorgeschlagener Änderungen in dem Change Request (CHG).
    Tabelle : 2. Ergebnisse
    Typ Beschreibung
    void
    //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)

    Erzeugt das XML für vorgeschlagene Änderungsunterschiede und fügt es dem entsprechenden task_ci-Datensatz hinzu.

    Dies ist eine dynamische Methode.

    Tabelle : 3. Parameter
    Name Typ Beschreibung
    current GlideRecord Der GlideRecord, der die Sammlung der vorgeschlagenen Änderungen enthält.
    changeSet Zeichenfolge Die sysid des task_ci-Datensatzes, der den zu verwendenden Change-Satz darstellt.
    Tabelle : 4. Ergebnisse
    Typ Beschreibung
    void
    //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)

    Lädt die Umgebung, indem es die Datenbank erstellt, die Systemdictionarytabelle erstellt und die Systemdictionarytabelle sich selbst beschreiben lässt.

    Dies ist eine statische Methode.

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    dictFile Zeichenfolge Der Dateiname einschließlich Pfad des Dictionary, das geladen werden soll.
    Tabelle : 6. Ergebnisse
    Typ Beschreibung
    void

    CMDBUtil - createCIRelationship(Zeichenfolge tableName, übergeordnetes Zeichenfolgenelement, untergeordnetes Zeichenfolgenelement, übergeordnetes Zeichenfolgenfeld, untergeordnetes Zeichenfolgenfeld)

    Erstellt eine CI-Beziehung zwischen Feldern.

    Tabelle : 7. Parameter
    Name Typ Beschreibung
    tableName Zeichenfolge Optional. Der Name der Zieltabelle der Beziehung.

    Standard: CI-Beziehungstabelle [cmdb_rel_ci].

    übergeordnet Zeichenfolge Sys_id des übergeordneten CI-Datensatzes in der Tabelle „Konfigurationselemente“ [cmdb_ci].
    child Zeichenfolge Sys_id des untergeordneten CI-Datensatzes in der Tabelle „Konfigurationselemente“ [cmdb_ci].
    parentField Zeichenfolge Die Bezeichnung der übergeordneten Beziehung, die in der Tabelle „CI-Beziehungstyp“ [cmdb_rel_type] aufgeführt ist.
    childField Zeichenfolge Die Bezeichnung der untergeordneten Beziehung, die in der Tabelle „CI-Beziehungstyp“ [cmdb_rel_type] aufgeführt ist.
    Tabelle : 8. Rückgaben
    Typ Beschreibung
    Zeichenfolge Sys_id des neuen Datensatzes, der in der CI-Beziehungstabelle [cmdb_rel_ci] aufgeführt wird.

    Das folgende Beispiel zeigt, wie eine CI-Beziehung zwischen dem übergeordneten CI-Feld enthält und dem untergeordneten CI-Feld Contained_by erstellt wird. Die Beziehung wird in der CI-Beziehungstabelle [cmdb_rel_ci] aufgeführt.

    var base = new SNC.CMDBUtil();
    base.createCIRelationship('<parent_ci_sys_id>', '<child_ci_sys_id>, 'Contains', 'Contained by');

    CMDBUtil – getAllChildrenOfAsCommaList(String baseTable)

    Ruft alle der angegeben Tabelle untergeordneten Tabellen als durch Kommas getrennte Liste ab.

    Dies ist eine statische Methode.

    Tabelle : 9. Parameter
    Name Typ Beschreibung
    baseTable Zeichenfolge Der Name der Basistabelle.
    Tabelle : 10. Ergebnisse
    Typ Beschreibung
    Zeichenfolge Eine durch Kommas getrennte Liste von sys_ids von Tabellen, die die Basistabelle erweitern.
    //Where cmdv_ci_computer is a table.
    var output = SNC.CMDBUtil.getAllChildrenOfAsCommaList('cmdb_ci_computer');
    gs.print(output);

    CMDBUtil – getCMDBViews()

    Ruft alle Datensätze in der Tabelle „CMDB-Ansicht“ [cmdb_view] ab.

    Diese Methode ist dynamisch.

    Tabelle : 11. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 12. Ergebnisse
    Typ Beschreibung
    Array Liste der Datensätze in der Tabelle „CMDB-Ansicht“ [cmdb_view].

    Das folgende Beispiel zeigt, wie die CMDB-Ansichten aufgelistet werden.

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

    Ausgabe:

    [View 3, View 1, View 2, Another view]

    CMDBUtil – getTables0(String tableName)

    Ruft eine Liste aller übergeordneten Elemente einer Tabelle ab.

    Diese Methode ist eine statische Methode.

    Tabelle : 13. Parameter
    Name Typ Beschreibung
    tableName Zeichenfolge Der Tabellenname.
    Tabelle : 14. Rückgaben
    Typ Beschreibung
    Array Liste der Tabellen, die übergeordnete Elemente der angegebenen Tabelle sind.

    Das folgende Beispiel zeigt, wie die übergeordneten Tabellen der Tabelle „Server“ [cmdb_ci_server] aufgelistet werden.

    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);
    }

    Ausgabe:

    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)

    Bestimmt, ob eine CI-Klasse in der Tabelle „Business Rule-Ausschlusslisten“ [cmdb_business_rule_exclusions] definiert ist. Verwenden Sie diese Methode mit erweiterten Bedingungen, um zu verhindern, dass eine Business Rule für ausgeschlossene CI-Klassen ausgeführt wird.

    Beispielsweise verwendet die Business Rule „Asset beim Einfügen erstellen“ diese Methode mit erweiterten Bedingungen, um zu verhindern, dass die Regel Assets für CI-Klassen wie cmdb_ci_qualifier, cmdb_ci_endpoint, cmdb_ci_storage_volume und cmdb_ci_vcenter_datastore_disk erstellt. Definieren Sie Klassen für den Ausschluss in der Tabelle „Business Rule-Ausschlusslisten“ [cmdb_business_rule_exclusions].

    Tabelle : 15. Parameter
    Name Typ Beschreibung
    className Zeichenfolge Name der Klasse, die auf Ausschluss geprüft werden soll.
    Tabelle : 16. Ergebnisse
    Typ Beschreibung
    Boolean „True“, wenn die Klasse in der Tabelle „Business Rule-Ausschlusslisten“ [cmdb_business_rule_exclusions] definiert ist, ansonsten „false“.
    //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(GlideRecord event, GlideRecord target)

    Verkapselt den Anruf im RelationshipEventProcessor(), der alle Änderungen an CI-Beziehungen verarbeitet.

    Dies ist eine dynamische Methode.

    Tabelle : 17. Parameter
    Name Typ Beschreibung
    event GlideRecord Der Event-Datensatz.
    target GlideRecord Der Zieldatensatz.
    Tabelle : 18. Ergebnisse
    Typ Beschreibung
    void

    CMDBUtil – processRelChange(GlideRecord event, GlideRecord current, String relType, String triplet)

    Verkapselt den Anruf im RelationshipEventProcessor(), der alle Änderungen an CI-Beziehungen mit dem angegebenen Typ und Triplett verarbeitet.

    Dies ist eine dynamische Methode.

    Tabelle : 19. Parameter
    Name Typ Beschreibung
    event GlideRecord Der Ereignisdatensatz
    current GlideRecord Der aktuelle Datensatz, der entweder der Beziehungsdatensatz oder ein Benutzersatz ist, wenn der aktuelle Prozess eine Löschung ist.
    relType Zeichenfolge Die Art der Beziehung, die sich geändert hat.
    Triplett Zeichenfolge Die Namen des übergeordneten und des untergeordneten Elements sowie der Klasse der Beziehung, die sich geändert hat.
    Tabelle : 20. Ergebnisse
    Typ Beschreibung
    void

    CMDBUtil – removeCIRelationship(String tableName, String parentField, String childField, String parentDesc, Object childDesc)

    Löscht die angegebene CI-Beziehung.

    Dies ist eine dynamische Methode.

    Tabelle : 21. Parameter
    Name Typ Beschreibung
    tableName Zeichenfolge Optional. Tabellenname

    Standard: CI-Beziehungstabelle [cmdb_rel_ci].

    parentField Zeichenfolge Übergeordnetes Feld
    childField Zeichenfolge Untergeordnetes Feld
    parentDesc Zeichenfolge Deskriptor der übergeordneten Beziehung
    childDesc Objekt Deskriptor der untergeordneten Beziehung
    Tabelle : 22. Rückgaben
    Typ Beschreibung
    void

    Dieses Codebeispiel zeigt, wie jeder Beziehungstyp „Abhängig von::Verwendet von“ für das angegebene übergeordnete Element entfernt wird.

    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)

    Ändert das übergeordnete Element der angegebenen Tabelle in das neue übergeordnete Element.

    Diese Methode ist eine statische Methode.

    Tabelle : 23. Parameter
    Name Typ Beschreibung
    table Zeichenfolge Die erneut überzuordnende Tabelle.
    oldParent Zeichenfolge Das alte übergeordnete Element.
    newParent Zeichenfolge Das neue übergeordnete Element.
    Tabelle : 24. Rückgaben
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob der übergeordnete Change erfolgreich war.

    Gültige Werte:
    • wahr: Übergeordneter Change war erfolgreich.
    • „falsch“: Übergeordneter Change war nicht erfolgreich.

    Um das folgende Beispiel neu zu erstellen, verwenden Sie den bereitgestellten Code zum Erstellen einer benutzerdefinierten Tabelle. Erstellen Sie als Nächstes einen Datensatz, und überprüfen Sie ihn in der Aufgabentabelle. Die erstellte anwenderdefinierte Tabelle ist eine Erweiterung der Aufgabentabelle, d. h. sie wurde erfolgreich neu übergeordnet. Der Code ist nicht für die direkte Verwendung durch Kopieren und Einfügen vorgesehen. Um die Ausgabe anzuzeigen, wurde die anwenderdefinierte Tabelle vor dem Ausführen des Codes erstellt.

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

    Ausgabe:

    *** Script: true
    *** Script: true