Interrogation des tables dans le script

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 8 minutes de lecture
  • À l’aide des méthodes de l’API GlideRecord, vous pouvez renvoyer tous les enregistrements d’une table, renvoyer des enregistrements d’une table qui satisfont à des conditions spécifiques ou renvoyer des enregistrements qui incluent une chaîne à partir d’une seule table ou de plusieurs tables dans un groupe d’index de texte.

    Interrogez des tables à l’aide de l’API GlideRecord. Pour obtenir des informations de référence sur l’API, consultez GlideRecord - Scoped.

    Renvoyer tous les enregistrements d’une table

    Pour interroger une table, créez d’abord un objet GlideRecord. Pour créer un GlideRecord, créez les éléments suivants dans le script :
    var target = new GlideRecord('incident');

    La création d’un objet GlideRecord crée une variable cible qui est un objet GlideRecord pour la table d’incidents.

    Pour traiter tous les enregistrements de la table d’incidents, ajoutez le script suivant :
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    Ce script envoie la requête () à la base de données. Chaque appel à next() chargerait l’enregistrement suivant pour le traitement.

    Renvoyer les enregistrements d’une table qui satisfont aux conditions de la requête

    La plupart du temps, vous souhaitez récupérer un enregistrement spécifique ou un ensemble spécifique d’enregistrements, et vous disposez de certains critères (conditions de requête) qui définissent les enregistrements que vous souhaitez obtenir. Par exemple, supposons que vous souhaitiez obtenir tous les enregistrements d’incidents dont la valeur de priorité est 1. Voici le code qui permettrait d’accomplir cela.
    var target = new GlideRecord('incident'); 
    target.addQuery('priority',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    Notez que l’exemple de script inclut target.addQuery('priority', 1) ;. Cette ligne indique que vous ne voulez que les enregistrements dont le priority champ est égal à 1. En général, la plupart des requêtes que vous souhaitez effectuer sont des requêtes d’égalité ; Interroge les endroits où vous souhaitez rechercher des enregistrements avec un champ égal à une valeur. Pour cette raison, vous n’avez pas besoin de fournir un opérateur d’égalité. Toutefois, supposons que vous souhaitiez rechercher tous les incidents dont le priority champ est supérieur à 1. Dans ce cas, vous devez indiquer l’opérateur que vous souhaitez appliquer à la requête.
    var target = new GlideRecord('incident') ; 
    target.addQuery('priority','>',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    Renvoyer les enregistrements d’une table qui incluent une chaîne

    Utilisez le nom réservé « 123TEXTQUERY321 » pour rechercher des correspondances de chaîne dans tous les champs d’une table. Par exemple, ce script renvoie les enregistrements de la table Incident avec des valeurs de champ qui incluent la chaîne « e-mail ».

    var now_GR = new GlideRecord('incident');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.query();

    '123TEXTQUERY321' est une option réservée pour le name paramètre dans la méthode addQuery(). Vous pouvez utiliser cette option dans une chaîne de requête codée. Par exemple, au lieu de gr.addQuery('123TEXTQUERY321', 'email') ;, vous pouvez utiliser gr.addEncodedQuery('123TEXTQUERY321=email').

    La recherche de chaîne n’est pas sensible à la casse. Le système renvoie les mêmes résultats, que vous recherchiez E-mail, E-mail ou E-mail.

    Remarque :
    Avant de pouvoir effectuer une requête à l’aide d’une recherche de chaîne, vous devez configurer l’indexation de texte (et éventuellement les attributs de recherche) pour la table dans laquelle vous souhaitez effectuer la recherche. Pour plus d’informations, reportez-vous à la rubrique Configurer une table unique pour l’indexation et la recherche.

    Renvoyer les enregistrements de plusieurs tables dans un groupe d’index de texte qui incluent une chaîne

    Utilisez le nom réservé « 123TEXTINDEXGROUP321 » pour rechercher une chaîne dans une table à partir d’un groupe d’index de texte. Cette option renvoie des résultats avec des scores de pertinence calculés à l’aide des paramètres du groupe d’index de texte.

    Remarque :
    Vous ne pouvez interroger qu’une seule table du groupe d’index de texte à la fois. Utilisez cette option lorsque vous souhaitez émettre plusieurs requêtes à table unique et fusionner leurs résultats, en les classant par score de pertinence. L’avantage de cette option est que les scores de pertinence des résultats de recherche pour les requêtes de table individuelles sont normalisés de manière cohérente pour toutes les tables du groupe d’index de texte.
    Par exemple, ce script renvoie les enregistrements de la table de connaissances qui incluent le mot clé « e-mail », avec des scores de pertinence calculés pour le groupe d’index « portail ».
    var now_GR = new GlideRecord('kb_knowledge');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.addQuery('123TEXTINDEXGROUP321', 'portal');
    gr.query();

    Vous pouvez créer une requête similaire pour chaque table supplémentaire du groupe d’index « portail » que vous souhaitez rechercher, puis fusionner les résultats des requêtes individuelles, en affichant d’abord les résultats ayant le score de pertinence le plus élevé. Étant donné que toutes ces requêtes de recherche utilisent les mêmes paramètres de recherche de groupe d’index de texte, les scores de pertinence de leurs résultats sont tous normalisés de manière cohérente. Si vous cherchiez le même ensemble de tables sans utiliser la méthode gr.addQuery('123TEXTINDEXGROUP321', 'portal'), les scores de pertinence des requêtes individuelles seraient normalisés différemment et ne constitueraient pas une base utile pour trier le jeu de résultats fusionné.

    '123TEXTINDEXGROUP321' est une option réservée pour le name paramètre dans la méthode addQuery(). Vous pouvez utiliser cette option dans une chaîne de requête codée. Par exemple, au lieu de gr.addQuery('123TEXTINDEXGROUP321', 'portal') ;, vous pouvez utiliser gr.addEncodedQuery('123TEXTINDEXGROUP321=portal').

    La recherche de chaînes multi-tables n’est pas sensible à la casse. Le système renvoie les mêmes résultats, que vous recherchiez E-mail, E-mail ou E-mail.

    Remarque :
    Avant de pouvoir interroger les tables d’un groupe d’index, vous devez configurer l’indexation de texte et les attributs de recherche pour ces tables et les inclure dans le groupe d’index. Pour plus d’informations, consultez Configurer plusieurs tables pour l’indexation et la recherche. Toutes les tables du groupe d’index doivent utiliser le format d’indexation V4.

    Opérateurs JavaScript disponibles

    Décrit les opérateurs qui peuvent être utilisés dans une requête addQuery().

    Tableau 1. Opérateurs JavaScript disponibles
    Champ Définition addQuery (en anglais seulement)
    = Le champ doit être égal à la valeur fournie. addQuery('priorité', '=', 1) ;
    > La valeur du champ doit être supérieure à la valeur fournie. addQuery('priority', '>', 1) ;
    < La valeur du champ doit être inférieure à la valeur fournie. addQuery('priority', '<', 3) ;
    >= Le champ doit être égal ou supérieur à la valeur fournie. addQuery('priority', '>=', 1) ;
    <= Le champ doit être égal ou inférieur à la valeur fournie. addQuery('priority', '<=', 3) ;
    != Le champ ne doit pas être égal à la valeur fournie. addQuery('priority', ' !=', 1) ;
    STARTSWITH Le champ doit commencer par la valeur fournie. L’exemple de droite renvoie tous les enregistrements dans lesquels le champ short_description commence par le texte Erreur. addQuery('short_description', 'STARTSWITH', 'Erreur') ;
    CONTIENT Le champ doit contenir la valeur fournie quelque part dans le texte. L’exemple de droite renvoie tous les enregistrements dans lesquels le champ short_description contient le texte Erreur n’importe où dans le champ.
    Remarque :
    L’opération LIKE n’est pas prise en charge. Les administrateurs doivent utiliser CONTAINS dans la requête.
    addQuery('short_description', 'CONTIENT', 'Erreur') ;
    DANS Utilise une carte de valeurs qui autorise les virgules et rassemble une collection d’enregistrements qui répondent à un autre besoin. Se comporte comme Sélectionner * à partir de <table> où short_description IN ('Erreur', 'Réussite', 'Échec'), qui est identique à Sélectionner * à partir de <table> où short_description='Erreur'. Par exemple, pour interroger toutes les valeurs de variables qui appartiennent à une activité spécifique, utilisez la IN clause et stockez leurs sys_ids dans une carte ou une liste séparée par des virgules. Interrogez ensuite la table de valeurs de variables et fournissez cette liste de sys_ids. addQuery('short_description', 'IN', 'Erreur,Succès,Échec') ;
    SE TERMINE PAR Le champ doit se terminer avec la valeur fournie. L’exemple affiché à droite renvoie tous les enregistrements dont le champ short_description se termine par une erreur de texte. addQuery('short_description', 'ENDSWITH', 'Erreur') ;
    NE CONTIENT PAS Sélectionne les enregistrements qui ne correspondent PAS au modèle dans le champ. Cet opérateur ne récupère pas les champs vides. Pour les valeurs vides, utilisez les opérateurs « est vide » ou « n’est pas vide ». L’exemple affiché à droite renvoie tous les enregistrements dans lesquels le champ short_description ne contient pas le mot « Erreur ». addQuery('short_description', 'NE CONTIENT PAS', 'Erreur') ;
    PAS DANS Utilise une carte de valeurs qui autorise les virgules et rassemble une collection d’enregistrements qui répondent à un autre besoin. Se comporte comme suit : Sélectionnez * à partir de <table> l’endroit où short_description NOT IN (« Erreur »). addQuery('short_description', 'NOT IN', 'Erreur,Succès,Échec') ;
    INSTANCEOF Opérateur spécial qui récupère uniquement les enregistrements d’une « classe » spécifiée pour les tables étendues. L’exemple de code sur la droite montre comment récupérer tous les éléments de configuration qui sont classifiés comme des ordinateurs. addQuery('sys_class_name', 'INSTANCEOF', 'cmdb_ci_computer') ;

    Pour plus d’informations sur les opérateurs disponibles pour les filtres et les requêtes, reportez-vous à la section Operators available for filters and queries.

    Il existe également des méthodes spéciales que vous pouvez utiliser pour rechercher des données qui sont NULL ou NOT NULL. Pour rechercher tous les incidents pour lesquels le champ short_description n’a pas été renseigné (est nul), utilisez la requête suivante :
    var target = new GlideRecord('incident'); 
    target.addNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    Pour trouver tous les incidents dans lesquels un short_description a été fourni, utilisez la requête suivante :
    var target = new GlideRecord('incident'); 
    target.addNotNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    Pour plus d’informations sur l’API GlideRecord et ses méthodes disponibles, consultez GlideRecord.

    Exemples de requêtes GlideRecord

    Ces exemples montrent comment effectuer diverses requêtes GlideRecord .

    requête

    var rec = new GlideRecord('incident');
    rec.query(); 
    while(rec.next()) { 
      gs.print(rec.number + ' exists'); }

    mettre à jour

    var rec = new GlideRecord('incident');
    rec.addQuery('active',true);
    rec.query(); 
    while(rec.next()) { 
      rec.active = false;
      gs.print('Active incident ' + rec.number = ' closed');
      rec.update(); }

    insérer

    var rec = new GlideRecord('incident');
    rec.initialize();
    rec.short_description = 'Network problem'; 
    rec.caller_id.setDisplayValue('Joe Employee'); 
    rec.insert();

    supprimer

    var rec = new GlideRecord('incident');
    rec.addQuery('active',false);
    rec.query(); 
    while(rec.next()) { 
      gs.print('Inactive incident ' + rec.number + ' deleted');
      rec.deleteRecord(); }

    Interrogation des tables de Service Catalog

    Vous ne pouvez pas interroger directement les variables de la table Élément de demande de Catalogue de services [sc_req_item]. Au lieu de cela, interrogez la table Propriété de variable, [sc_item_option_mtom], en ajoutant deux requêtes, une pour le nom de variable et une autre pour la valeur. La requête renvoie la relation plusieurs-à-plusieurs, que vous pouvez remonter pas à pas vers l’élément demandé. L’exemple suivant trouve les éléments de demande dont la variable item_name a une valeur de item_value et affiche les numéros d’élément de demande :
    var now_GR = new GlideRecord('sc_item_option_mtom');
    gr.addQuery('sc_item_option.item_option_new.name','item_name');
    gr.addQuery('sc_item_option.value','item_value');
    gr.query();
     
    while(gr.next()) {
      gs.addInfoMessage(gr.request_item.number); }

    Pour plus d’informations, consultez GlideRecord.