Skripteinbindungen

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 8 Minuten Lesedauer
  • Skripteinbindungen werden verwendet, um JavaScript zu speichern, das auf dem Server ausgeführt wird.

    Erstellen Sie Skripteinbindungen, um JavaScript-Funktionen und -Klassen zur Verwendung durch Serverskripts zu speichern. Jede Skripteinbindung definiert entweder eine Objektklasse oder eine Funktion.

    Erwägen Sie die Verwendung von Skripteinbindungen anstelle globaler Business-Regeln, da Skripteinbindungen nur auf Anforderung geladen werden. Siehe Datenschutzeinstellungen für vom Client aufrufbare SkripteinbindungenUnd Discovery-SkripteinbindungenFür weitere Informationen.

    Weitere Beispiele für Skripts finden Sie unter Nützliche Skripts.

    Skripteinbindungsformular

    Skripteinbindungen haben einen Namen, eine Beschreibung und ein Skript. Sie geben auch an, ob sie aktiv sind oder nicht und ob sie über ein Client-Skript aufgerufen werden können. Zeigen Sie vorhandene an, oder erstellen Sie eine neue Skripteinbindung mithilfe des Formulars „Skripteinbindung“.

    Um auf Skripteinbindungen zuzugreifen, navigieren Sie zu Alle > Systemdefinitionen > Skripteinbindungenan.

    Tabelle : 1. Skripteinbindungsformular
    Feld Beschreibung
    Name Der Name der Skripteinbindung. Wenn Sie eine Klasse definieren, muss dies mit dem Namen der Klasse, dem Prototyp und dem Typ übereinstimmen. Wenn Sie eine klassenlose Skripteinbindung (bei Bedarf) verwenden, muss der Name mit dem Funktionsnamen übereinstimmen.
    API-Name Der interne Name der Skripteinbindung. Wird verwendet, um die Skripteinbindung aus Anwendungen außerhalb des Umfangs aufzurufen.
    Glide AJAX aktiviert Die Skripteinbindung ist für Client-Skripts, Listen-/Berichtsfilter, Referenzqualifizierer oder wenn als Teil der URL angegeben. Vom Client aufrufbare Skripteinbindungen werden über aufgerufen GlideAjax Und erfordern, dass Anwender eine ACL erfüllen, die der Skripteinbindung zugeordnet ist. Wenn ausgewählt, wird Zugriffssteuerungen Zugehöriger Link ist verfügbar. Weitere Informationen finden Sie unter Datenschutzeinstellungen für vom Client aufrufbare Skripteinbindungen.
    Mobil aufrufbar Die Skripteinbindung ist für Client-Skripts verfügbar, die von Mobilgeräten aufgerufen werden.
    Sandbox aktiviert Die Skripteinbindung wird über die Skript-Sandbox aufgerufen, z. B. eine Abfragebedingung. Diese Methode erfordert keine Authentifizierung. Weitere Informationen zur Sandbox finden Sie unter Configuring Script sandbox property.
    Anwendung Die Anwendung, in der sich diese Skripteinbindung befindet.
    Zugänglich von
    Legt fest, welche Anwendungen auf dieses Skript zugreifen können:
    Alle Anwendungsbereiche
    Kann von jedem Anwendungsbereich aus aufgerufen werden.
    Nur dieser Anwendungsbereich
    Kann nur über den aktuellen Anwendungsbereich aufgerufen werden.
    Aktiv Aktiviert die Skripteinbindung, wenn ausgewählt. Deaktivieren Sie das aktive Feld, um die Skripteinbindung zu deaktivieren.
    Beschreibung Stellt beschreibenden Inhalt zur Skripteinbindung bereit.
    Skript Definiert das serverseitige Skript, das ausgeführt werden soll, wenn es von anderen Skripts aufgerufen wird.

    Das Skript muss eine einzelne JavaScript-Klasse oder eine globale Funktion definieren. Der Klassen- oder Funktionsname muss mit übereinstimmen Name Feld.

    Paket Das Paket, das diese Skripteinbindung enthält.
    Erstellt von Der Anwender, der diese Skripteinbindung erstellt hat.
    Aktualisiert von Der Anwender, der diese Skripteinbindung zuletzt aktualisiert hat.
    Schutzrichtlinie
    Legt die Schutzstufe für die Skripteinbindung fest:
    Keine
    Ermöglicht jedem, diese heruntergeladene oder installierte Skripteinbindung zu lesen und zu bearbeiten.
    Abgebrochen
    Ermöglicht jedem, Werte aus dieser heruntergeladenen oder installierten Skripteinbindung zu lesen. Niemand kann Skriptwerte in der Instanz ändern, auf der die Skripteinbindung heruntergeladen oder installiert wird.
    Geschützt
    Bietet Schutz geistigen Eigentums für Anwendungsentwickler. Kunden, die die Skripteinbindung herunterladen, können den Inhalt des Skriptfelds nicht sehen. Das Skript wird im Arbeitsspeicher verschlüsselt, um zu verhindern, dass nicht autorisierte Anwender es im nur-Text sehen.
    Zugehörige Listen in der Formularansicht:
    Versionen Zeigt alle Versionen der Skripteinbindung an. Verwenden Sie diese Liste, um Versionen zu vergleichen oder eine vorherige Version wiederherzustellen. Siehe Versionen .
    Zugriffssteuerungen Wird verfügbar, wenn Vom Client aufrufbar Das Kontrollkästchen ist aktiviert und in Standardskripteinbindungen ausgeblendet. Verwenden Sie diese Option, um eine CCSI vor nicht autorisierter Verwendung zu schützen, wenn kein öffentlicher Zugriff gewährt wird.

    Skripteinbindungen verwenden

    Skripteinbindungen finden Sie unter Systemdefinition oder System-UI. Sie können vorhandene Skripteinbindungen aus einem Skript aufrufen oder eine neue Skripteinbindung erstellen.

    Um eine vollständig neue Skripteinbindung zu erstellen, können Sie dem Format einer beliebigen vorhandenen Skripteinbindung folgen. In diesem Beispiel lautet der Name Ihrer Skripteinbindung Neu einbeziehen Und es wird eine einzelne Funktion aufgerufen MyFunction . Es ist wichtig, dass der Name der Skripteinbindung mit dem Namen der Klasse, des Prototyps und des Typs übereinstimmt. Wenn Sie eine neue Skripteinbindung erstellen und ihr einen Namen geben, stellt das System ein Codefragment bereit, in dem die Klasse und der Prototyp ordnungsgemäß eingerichtet sind.

    var NewInclude =Class.create();
     
    NewInclude.prototype={
      initialize :function(){},
     
      myFunction :function(){<Put function code here>},
     
      type :'NewInclude'};

    Sie können dann verwenden MyFunction Zeile wie diese:

    var foo =new NewInclude();
    foo.myFunction();

    Vom Client aufrufbare Skripteinbindungen

    Aufrufbare Clientskripteinbindungen (CCSI) machen die Skripteinbindung für Client-Skripts, Listen-/Berichtsfilter, Referenzqualifizierer oder, wenn als Teil der URL angegeben, verfügbar.

    Vorbereitungen

    Erforderliche Rolle: Administrator

    Prozedur

    1. Navigieren zu Systemdefinition > Skripteinbindungenan.
    2. Wählen Sie Aus Neu Oder wählen Sie eine vorhandene Skripteinbindung zum Anzeigen oder Bearbeiten aus.
      Siehe Skripteinbindungen verwendenFür zusätzliche Informationen zum Schreiben von Skripteinbindungen.
    3. Füllen Sie das Formular aus, und wählen Sie aus Vom Client aufrufbar Kontrollkästchen.
      Eine Rollenauswahl wird angezeigt, um eine Anwenderrolle auszuwählen und automatisch einen Zugriffssteuerungseintrag zu erstellen. Wählen Sie eine Anwenderrolle aus, und klicken Sie auf OK .Wählen Sie ein Anwenderrollenfenster aus.
      Hinweis:
      Um das Rollenauswahlfenster zu deaktivieren, legen Sie fest glide.script.ccsi.enable_acl_create_ux Bis Falsch .

      Ein neuer CCSI-Datensatz mit einer rollenbasierten Zugriffssteuerung wird erstellt. Der zugehörige Link für die Zugriffssteuerung wird mit der Auswahl von verfügbar Client-kalilierbar Kontrollkästchen.

      Zeigt das Formular „Skripteinbindung“ und den zugehörigen Link „Zugriffssteuerungen“ an, wenn „vom Client aufrufbar“ ausgewählt ist.

    Datenschutzeinstellungen für vom Client aufrufbare Skripteinbindungen

    Datenschutzeinstellungen für vom Client aufrufbare Skripteinbindungen (CCSI) bestimmen, wer auf eine vom Client aufrufbare Skripteinbindung zugreifen kann.

    Private Datenschutzeinstellung

    Die private Datenschutzeinstellung bedeutet, dass Gäste, die auf öffentliche Seiten zugreifen, nicht auf die vom Client aufrufbare Skripteinbindung zugreifen können. Ein privates Skript kann nicht von einem nicht angemeldeten Anwender ausgeführt werden.

    Öffentliche Datenschutzeinstellung

    Eine öffentliche Datenschutzeinstellung bedeutet, dass das Clientskript von nicht angemeldeten Anwendern ausgeführt werden kann, die eine entsprechende HTTP-Anforderung erstellen. Dies kann zu einem Sicherheitsproblem führen, wenn das Client-Skript vertrauliche Informationen bereitstellt.

    Die folgenden Skripteinbindungen bleiben standardmäßig öffentlich, da UI-Seiten öffentlich oder privat machen Zugriff erforderlich:
    • GlideSystemAjax
    • SysMessageAjax
    • KnowledgeMessagingAjax
    • KnowledgeAjax
    • PasswortZurücksetzenAjax

    Legen Sie den Datenschutz für alle vom Client aufrufbaren Skripteinbindungen fest

    Ändern Sie die Datenschutzeinstellung für alle vom Client aufrufbaren Skripteinbindungen.

    Um eine weitere Kontrolle über alle vom Client aufrufbaren Skripteinbindungen bereitzustellen, können Administratoren hinzufügen Glide.script.ccsi.isöffentlich Eigenschaft. Diese Eigenschaft ändert die Sichtbarkeit von vom Client aufrufbaren Skripteinbindungen, indem sie alle öffentlich oder privat macht. Konfigurieren Sie die Eigenschaft wie folgt:

    Tabelle : 2. Konfigurieren Sie die Eigenschaft
    Titel Eigenschaft
    Name Glide.script.ccsi.isöffentlich
    Typ Wahr|falsch
    Wert falsch
    Hinweis:
    Weitere Informationen zu dieser Eigenschaft finden Sie unter Require authentication by default for client-callable script includes [Updated in Security Center 1.3]In Instanzsicherheits-Härtungseinstellungen.

    Ändern Sie den Datenschutz für eine einzelne vom Client aufrufbare Skripteinbindung

    Ändern Sie die Datenschutzeinstellung für eine einzelne vom Client aufrufbare Skripteinbindung, indem Sie hinzufügen IsPublic() Funktion.

    Die IsPublic() Die Einstellung hat Vorrang vor glide.script.ccsi.ispublicEigenschaft. Beispiel: Wenn die Eigenschaft auf festgelegt ist Falsch , Macht alle vom Client aufrufbaren Skripteinbindungen privat und einen Skriptsatz IsPublic() Bis Wahr , Das Skript ist öffentlich.

    Um den Datenschutz für eine einzelne vom Client aufrufbare Skripteinbindung zu ändern, fügen Sie der Skripteinbindung die folgende Methode hinzu:

    isPublic:function(){return[true/false];},
    Legen Sie das Clientskript „NewInclude“ als privat fest.
    var NewInclude =Class.create();
     
    NewInclude.prototype={
       initialize:function(){},
     
       myFunction:function(){//Put function code here},
       isPublic:function(){return false;},
     
       type:'NewInclude'};

    Sicherheit für vom Client aufrufbare Skripteinbindungen

    P Wechseln Sie Ihre aufrufbare Clientskripteinbindung (CCSI) gegen nicht autorisierte Verwendung. Für alle CCSI-Datensätze, die eine Kundenanwendung erstellt werden, werden Empfehlungen angezeigt, die zur Reduzierung des Sicherheitsrisikos beitragen können .

    Beim Erstellen einer CCSI zeigt das System die folgenden Sicherheitsempfehlungen an, wenn sie noch nicht konfiguriert wurden:

    • Fügen Sie eine Zugriffssteuerung hinzu oder definieren Sie sie, es sei denn, die CCSI hat öffentlichen Zugriff.
    • Verwenden GlideRecordSecure Anstelle von GlideRecord API für bessere Sicherheit, wenn das Skript die Datenbank abfragt.

      CCSI-Sicherheitsempfehlungen.

      Hinweis:
      Legen Sie die Eigenschaft fest, um die Sicherheitsempfehlungsnachrichten zu deaktivieren glide.script.ccsi.customer_scoped.security_msgs_enabled Bis Falsch In der Tabelle „sys_properties“. Der Standardwert ist auf festgelegt Wahr .

    Siehe Härtungseinstellungen Für Instanzsicherheit Für zusätzliche Informationen zur Sicherheits-Compliance.

    Discovery-Skripteinbindungen

    DiscoverySkripteinbindungen definieren JavaScript-Klassen, die Sie verwenden können, um sie auszuführen DiscoveryAufgaben.

    Hinweis:
    Anwender mit der Rolle „Discovery_admin“ können Skripteinbindungen schreiben. Befolgen Sie Best Practices für serverseitiges und clientseitiges Skripting, um Sicherheitsprobleme zu vermeiden. Siehe wissensartikel KB0550828 Für weitere Informationen.

    Verwenden von GlideRecordUtil zur Arbeit mit GlideRecords

    GlideRecordUtil Ist eine Dienstprogrammklasse, die Methoden bereitstellt, die für die Arbeit mit GlideRecords während nützlich sind Discovery. Siehe GlideRecordUtil Für Beschreibungen der verfügbaren Methoden.

    GlideRecord-Instanz wird abgerufen

    Um zu erhalten GlideRecord Instanz für ein bestimmtes Konfigurationselement und der richtigen Klasse und Tabelle verwenden Sie GetCIGR(sys_ID) Methode. Der folgende Code ruft beispielsweise den GlideRecord eines CI mit der sys_ID 2dfd7c8437201000deeabfc8bcbe5d56 ab:
    var now_GR = new GlideRecordUtil().getCIGR("2dfd7c8437201000deeabfc8bcbe5d56");
    Verwenden Sie zum Abrufen einer hierarchischen Tabelle, ohne ihren Klassentyp zu kennen GetGR(Base_table, sys_ID) Methode. Um beispielsweise einen GlideRecord für ein Computerklasse-CI abzurufen, müssen Sie möglicherweise unterscheiden, ob es sich um eine Computerklasse handelt. WindowsServer, oder LinuxServerklasse. Die Verwendung dieser Methode garantiert einen GlideRecord mit der richtigen Klasse. Verschiedene Klassen haben unterschiedliche Attribute. In diesem Anwendungsfall WindowsServer hat andere Attribute als LinuxServer. Das folgende Beispiel zeigt, wie ein GlideRecord in der richtigen Klasse mit seinen Attributen abgerufen wird.
    var now_GR = new GlideRecordUtil().getGR( "cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");

    Ruft alle Felder in einem GlideRecord ab

    Die GetFields (now_GR) Methode gibt ein JavaScript-Objekt, z. B. eine Hashmap, aller Felder oder Attribute zurück, die in einem bestimmten GlideRecord vorhanden sind.
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");
    var fields = new GlideRecordUtil().getFields(now_GR);
    gs.log(fields.join(" ")); // List all the fields that are in a computer CI

    GlideRecord-Objektfelder werden ausgefüllt

    Die PopulateFromGR(Hashmap, gr, Ignorieren) Mit der Methode können Sie ein GlideRecord-Objekt verwenden und seine Felder und Werte in ein JavaScript-Objekt ausfüllen. Das dritte Argument ( Ignorieren ) Ist ein optionales JavaScript-Objekt, mit dem Sie bestimmte Felder ausschließen können. Beispielsweise ist Ihnen möglicherweise egal sys_created_byOder sys_updated_byFelder in einem GlideRecord.
    var objectToPopulate = { }; 
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var ignore = {"sys_created_on": true, "sys_updated_by": true}; 
    new GlideRecordUtil().populateFromGR(objectToPopulate, now_GR, ignore); 
    // Now the objectToPopulate contains field/value pairs from the computer GlideRecord
    Die MergeToGR(Hashmap, gr, Ignorieren) Mit der Methode können Sie einen GlideRecord mit einem Feld/Wert-gekoppelten Objekt ausfüllen. Das Ignorieren-Argument verhindert, dass angegebene Felder aktualisiert werden. Das folgende Codebeispiel aktualisiert einen Computerdatensatz nameUnd osFelder, aktualisiert aber nicht sys_created_byFeld:
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var obj = {"name": "xyz", "os": "windows 2000", "sys_created_by", "aleck.lin"};
    var ignore = {"sys_created_by": true}; 
    new GlideRecordUtil().mergeToGR(obj, gr, ignore);
    gr.update();

    Tabellenhierarchien Werden Abgerufen

    Die GetTables (Tabelle) Methode gibt eine Liste von Tabellenhierarchien zurück, wie im folgenden Beispiel gezeigt:
    var tables = new GlideRecordUtil().getTables("cmdb_ci_linux_server");
    gs.log(tables.join(",")); 
    // The result would be "cmdb_ci, cmdb_ci_computer, cmdb_ci_server, cmdb_ci_linux_server".

    Verwenden Sie DiscoveryException und AutomationException

    Beim Schreiben DiscoverySensoren und sensorbezogene Skripts. Sie können DiscoveryException oder AutomationException verwenden, um anzugeben, dass eine Ausnahme stammt Discovery.

    Die DiscoveryException Skripteinbindung erweitert AutomationException , Der erweitert Generische Ausnahme Klasse. Das folgende Beispiel verwendet DiscoveryException So lösen Sie eine Ausnahme aus:
    function foo() { 
      if(//condition matches) throw new DiscoveryException("The message", "The cause"); }
    Das erste Argument übernimmt die Nachricht der Ausnahme, das zweite Argument (optional) die Ursache der Ausnahme. Sie können die Ausnahme auch erfassen und protokollieren, wie im folgenden Beispiel gezeigt:
    try {
      foo(); 
    } 
    catch(e) { 
       if(e instanceof DiscoveryException)
         gs.log("A DiscoveryException occurred. It is " + e. getMessage() + " caused by " + e.getCause()); }

    Das obige Beispiel gilt auch für AutomationException . DiscoveryException Wird normalerweise verwendet, um die Ausnahmeverarbeitung speziell für Discovery bereitzustellen, während AutomationException Wird für die Ausnahmeverarbeitung verwendet, die sowohl für Orchestration als auch gilt Discovery.