Script includes

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 10 minutes de lecture
  • Les script includes sont utilisés pour stocker le code JavaScript qui s’exécute sur le serveur.

    Créez des script includes pour stocker des fonctions et des classes JavaScript afin qu’elles soient utilisées par des scripts serveur. Chaque script include définit soit une classe d’objet, soit une fonction.

    Envisagez d’utiliser des script includes au lieu de règles métier globales, car les script includes ne sont chargés que sur demande.

    Voir Les paramètres de confidentialité sur les includes de script appelables par le client et Script de détection Includes pour plus d’informations.

    Formulaire Script Include

    Les script includes ont un nom, une description et un script. Ils spécifient également s’ils sont actifs ou non, et s’ils peuvent être appelés à partir d’un script client. Affichez un script include existant ou créez-en un à l’aide du formulaire Script Include.

    Pour accéder aux script includes, accédez à Définitions du système > Script includes.

    Tableau 1. Formulaire Script Include
    Champ Description
    Nom Nom du script include. Si vous définissez une classe, celle-ci doit correspondre au nom de la classe, du prototype et du type. Si vous utilisez un script include sans classe (à la demande), le nom doit correspondre au nom de la fonction.
    Nom d'API Nom d’API en lecture seule et renseigné automatiquement.
    Client joignable Met le script include à la disposition des scripts clients, des filtres de liste/rapport, des qualificatifs de référence ou si spécifié dans le cadre de l’URL. Lorsque cette option est sélectionnée, le lien connexe Contrôles d’accès est disponible. Consultez Les paramètres de confidentialité sur les includes de script appelables par le client pour plus d'informations.
    Application Application dans laquelle se trouve ce script include.
    Accessible depuis
    Définit les applications pouvant accéder à ce script include :
    Tous les périmètres de l'application
    Accessible depuis n’importe quel périmètre de l’application.
    Ce périmètre de l'application uniquement
    Uniquement accessible à partir du périmètre de l’application actuel.
    Actif Active le script include lorsqu’il est sélectionné. Désélectionnez le champ actif pour désactiver le script include.
    Description Fournit un contenu descriptif concernant le script include.
    Script Définit le script côté serveur à exécuter lorsqu’il est appelé à partir d’autres scripts.

    Le script doit définir une seule classe JavaScript ou une fonction globale. Le nom de la classe ou de la fonction doit correspondre au champ Nom .

    Package Le package qui contient ce script include.
    Créé par L’utilisateur qui a créé ce script include.
    Mis à jour par L’utilisateur qui a récemment mis à jour ce script include.
    Politique de protection
    Définit le niveau de protection du script include :
    Néant
    Permet à n’importe qui de lire et de modifier ce script include téléchargé ou installé.
    Lecture seule
    Permet à quiconque de lire les valeurs de ce script include téléchargé ou installé. Personne ne peut modifier les valeurs de script sur l’instance sur laquelle il télécharge ou installe le script include.
    Protégé
    Assure la protection de la propriété intellectuelle des développeurs d’applications. Les clients qui téléchargent le script include ne peuvent pas voir le contenu du champ de script. Le script est chiffré en mémoire pour empêcher les utilisateurs non autorisés de le voir en texte brut.
    Listes connexes dans la vue de formulaire :
    Versions Affiche toutes les versions du script include. Utilisez cette liste pour comparer des versions ou revenir à une version précédente. Reportez-vous à la section Versions.
    Contrôles des accès Devient disponible lorsque la case Client pouvant être appelé est cochée et est masquée dans les script includes standard. Utiliser pour protéger un CCSI contre toute utilisation non autorisée lorsque l’accès public n’est pas accordé.

    Utiliser des script includes

    Les script includes sont accessibles sous Définition du système ou Interface utilisateur du système. Vous pouvez appeler des script includes existants à partir d’un script ou en créer un nouveau.

    Pour créer un script include entièrement nouveau, vous pouvez suivre le format de l’un des script includes existants. Dans cet exemple, le nom de votre script include est NewInclude et il existe une seule fonction appelée myFunction. Il est important que le nom du script include corresponde au nom de la classe, du prototype et du type. Lorsque vous créez un script include et que vous lui donnez un nom, le système fournit un extrait de code avec la classe et le prototype correctement configurés.

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

    Vous pouvez ensuite utiliser la ligne myFunction comme ceci :

    var foo =new NewInclude();
    foo.myFunction();
    Remarque :
    Essayez de ne pas modifier un ServiceNow script include fourni. Si vous voulez un script include qui fait quelque chose de similaire à un script existant, copiez-le et apportez des modifications à la copie ou envisagez d’étendre l’objet. Il s’agit d’une pratique courante lors de l’utilisation de GlideAjax.

    Includes de script pouvant être appelés par le client

    Les includes de script pouvant être appelés par le client (CCSI) rendent le script include disponible pour les scripts clients, les filtres de liste/rapport, les qualificatifs de référence ou si spécifiés dans le cadre de l’URL.

    Avant de commencer

    Rôle requis : admin

    Procédure

    1. Accédez à la Définition du système > Includes de script.
    2. Sélectionnez Nouveau ou sélectionnez un script include existant pour l’affichage ou la modification.
      Consultez Utiliser des script includes pour plus d’informations sur l’écriture de script includes.
    3. Remplissez le formulaire et cochez la case Client joignable .
      Un sélecteur de rôle s’affiche pour sélectionner un rôle d’utilisateur et créer automatiquement une entrée de contrôle d’accès. Sélectionnez un rôle d’utilisateur, puis cliquez sur OK.Fenêtre Sélectionner un rôle d’utilisateur.
      Remarque :
      Pour désactiver la fenêtre du sélecteur de rôle, définissez le glide.script.ccsi.enable_acl_create_ux sur false.

      Un nouvel enregistrement CCSI avec un contrôle d’accès basé sur les rôles est créé. Le lien connexe Contrôle d’accès devient disponible en cochant la case Client pouvant être calé .

      Affiche le formulaire Script Include et le lien connexe Contrôles d’accès lorsque le client pouvant être appelé est sélectionné.

    Les paramètres de confidentialité sur les includes de script appelables par le client

    Les paramètres de confidentialité pour les includes de script pouvant être appelés par le client (CCSI) déterminent qui peut accéder à un script include pouvant être appelé par le client.

    Intimité privée

    Le paramètre de confidentialité privé signifie que les invités qui accèdent aux pages publiques ne peuvent pas accéder au script include appelable par le client. Un script privé ne peut pas être exécuté par un utilisateur non connecté.

    Respect de la vie privée du public

    Un paramètre de confidentialité public signifie que le script client peut être exécuté par des utilisateurs non connectés qui créent une requête HTTP appropriée. Cela peut créer un problème de sécurité si le script client fournit des informations confidentielles.

    Les script includes suivants restent publics par défaut, car Rendre les pages de l’interface utilisateur publiques ou privées doivent y accéder :
    • GlideSystemAjax
    • SysMessageAjax (en anglais seulement)
    • KnowledgeMessagingAjax
    • Knowledge Ajax
    • Réinitialisation du mot de passeAjax

    Définir la confidentialité sur tous les includes de script pouvant être appelés par le client

    Modifiez le paramètre de confidentialité sur tous les script includes pouvant être appelés par le client.

    Pour fournir un contrôle supplémentaire sur tous les script includes pouvant être appelés par le client, les administrateurs peuvent ajouter la propriété glide.script.ccsi.ispublic . Cette propriété modifie la visibilité des includes de script pouvant être appelés par le client en les rendant tous publics ou privés. Configurez la propriété comme suit :

    Tableau 2. Configurer la propriété
    Titre Propriété
    Nom glide.script.ccsi.ispublic
    Type true|false
    Valeur faux
    Remarque :
    Pour en savoir plus sur cette propriété, reportez-vous à la section Confidentialité sur les includes de script appelables par le client dans les paramètres de renforcement de la sécurité de l’instance.

    Changer la confidentialité sur un seul include de script de client pouvant être appelé

    Modifiez le paramètre de confidentialité pour un seul script include pouvant être appelé par un client en ajoutant la fonction isPublic().

    Le paramètre isPublic() a priorité sur la glide.script.ccsi.ispublic propriété. Par exemple, si la propriété est définie sur false, ce qui rend privés tous les script-includes pouvant être appelés par le client, et qu’un script définit isPublic() sur true, le script est public.

    Pour modifier la confidentialité d’un seul script include de client pouvant être appelé, ajoutez la méthode suivante au script include :

      isPublic:function(){return[true/false];},
    Rendre privé le script client NewInclude.
    var NewInclude =Class.create();
     
    NewInclude.prototype={
       initialize:function(){},
     
       myFunction:function(){//Put function code here},
       isPublic:function(){return false;},
     
       type:'NewInclude'};

    Sécurité sur les includes de script pouvant être appelés par le client

    Protégezvotre script include client pouvant être appelé (CCSI) contre toute utilisation non autorisée. Pour tous les enregistrements CCSI qui sont créés dans une application cliente, des recommandations qui peuvent aider à réduire le risque de sécurité s’affichent.

    Lors de la création d’un CCSI, le système affiche les recommandations de sécurité suivantes si elles n’ont pas encore été configurées :

    • Ajoutez ou définissez un contrôle d’accès, sauf si le CCSI dispose d’un accès public.
    • Utilisez GlideRecordSecure au lieu de l’API GlideRecord pour une meilleure sécurité, si le script interroge la base de données.

      Recommandations de sécurité du CCSI.

      Remarque :
      Pour désactiver les messages de recommandation de sécurité, définissez la propriété glide.script.ccsi.customer_scoped.security_msgs_enabled sur faux dans la table sys_properties. La valeur par défaut est définie sur vrai.

    Consultez Paramètres de renforcement de la sécurité de l’instance pour plus d’informations sur la conformité de la sécurité.

    Script de détection Includes

    Détection Les script includes définissent les classes JavaScript que vous pouvez utiliser pour accomplir Détection des tâches.

    Remarque :
    Les utilisateurs disposant de discovery_admin rôle peuvent écrire des script includes. Suivez les meilleures pratiques en matière de scripting côté serveur et côté client afin d’éviter les problèmes de sécurité. Consultez l’article de la base de connaissances KB0550828 pour plus d’informations.

    Utilisation de GlideRecordUtil pour travailler avec GlideRecords

    GlideRecordUtil est une classe utilitaire qui fournit des méthodes utiles pour travailler avec GlideRecords pendant Détection. Reportez-vous à GlideRecordUtil pour obtenir des descriptions des méthodes disponibles.

    Obtention d’une instance GlideRecord

    Pour obtenir une instance GlideRecord pour un élément de configuration donné, ainsi que la classe et la table correctes, utilisez la méthode getCIGR(sys_id). Par exemple, le code suivant obtient le GlideRecord d’un CI avec le sys_id 2dfd7c8437201000deeabfc8bcbe5d56 :
    var now_GR = new GlideRecordUtil().getCIGR("2dfd7c8437201000deeabfc8bcbe5d56");
    Pour récupérer une table hiérarchique sans connaître son type de classe, utilisez la méthode getGR(base_table, sys_id). Par exemple, pour obtenir un GlideRecord pour un CI de classe d’ordinateur, vous devrez peut-être distinguer s’il s’agit d’une classe d’ordinateur, Windows de serveur ou Linux de classe de serveur. L’utilisation de cette méthode garantit un GlideRecord avec la classe correcte. Différentes classes ont des attributs différents. Dans ce cas d’utilisation, un serveur possède des Windows attributs différents de ceux d’un Linux serveur. L’exemple suivant montre comment obtenir un GlideRecord dans la classe correcte avec ses attributs.
    var now_GR = new GlideRecordUtil().getGR( "cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");

    Obtention de tous les champs d’un GlideRecord

    La méthode getFields(now_GR) renvoie un objet JavaScript, tel qu’une carte de hachage, de tous les champs ou attributs qui existent dans un GlideRecord donné.
    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

    Remplissage des champs d’objet GlideRecord

    La méthode populateFromGR(hashmap, gr, ignore) vous permet de prendre un objet GlideRecord et de renseigner ses champs et valeurs dans un objet JavaScript. Le troisième argument (ignorer) est un objet JavaScript facultatif qui vous permet d’exclure certains champs. Par exemple, vous ne vous souciez peut-être pas des champs OR sys_created_bysys_updated_by dans un 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.03().populateFromGR(objectToPopulate, gr, ignore); 
    // Now the objectToPopulate contains field/value pairs from the computer GlideRecord
    La méthode mergeToGR(hashmap, gr, ignore) vous permet de remplir un GlideRecord avec un objet apparié champ/valeur. L’argument ignorer empêche la mise à jour des champs spécifiés. L’exemple de code suivant met à jour les enregistrements et os les champs d’un name ordinateur, mais ne met pas à jour le sys_created_by champ :
    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();

    Obtention des hiérarchies de tables

    La méthode getTables(table) renvoie une liste de hiérarchies de tables, comme illustré dans l’exemple suivant :
    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".

    Utilisation de DiscoveryException et d’AutomationException

    Lors de l’écriture Détection de capteurs et de scripts liés aux capteurs, vous pouvez utiliser DiscoveryException ou AutomationException pour indiquer qu’une exception provient de Détection.

    Le script include DiscoveryException étend AutomationException, qui étend la classe GenericException . L’exemple suivant utilise DiscoveryException pour lever une exception :
    function foo() { 
      if(//condition matches) throw new DiscoveryException("The message", "The cause"); }
    Le premier argument prend le message de l’exception et le second argument (facultatif) prend la cause de l’exception. Vous pouvez également intercepter l’exception et la consigner comme illustré dans l’exemple ci-dessous :
    try {
      foo(); 
    } 
    catch(e) { 
       if(e instanceof DiscoveryException)
         gs.log("A DiscoveryException occurred. It is " + e. getMessage() + " caused by " + e.getCause()); }

    L’exemple ci-dessus s’applique également à AutomationException. DiscoveryException est généralement utilisé pour fournir un traitement d’exception spécifique pour Discovery, tandis qu’AutomationException est utilisé pour le traitement des exceptions qui s’applique à la fois à Orchestration et Détectionà .