Didacticiel : configurer une source de recherche dans la base de connaissances externe

  • Rversion finale: Zurich
  • Mis à jour 17 juin 2026
  • 2 minutes de lecture
  • Définissez une source de recherche avancée pour renvoyer des données provenant de n’importe quelle source sur Internet. Pour comprendre la puissance des sources de recherche, suivez ce didacticiel pour configurer une source de recherche de base de connaissances externe.

    Avant de commencer

    Rôle requis : aucun

    Pour créer une source de recherche avancée, vous avez besoin d’un accès authentifié à un site Web externe via une API REST et de connaissances de base d’AngularJS.

    Pourquoi et quand exécuter cette tâche

    Dans cette intégration, vous allez :

    • Créez un script d’extraction de données qui utilise ServiceNow l’API Table pour interroger une base de connaissances à partir d’une autre ServiceNow instance.
    • Décodez la réponse JSON et définissez les champs attendus par le widget de recherche.
    • Mettez à jour le modèle HTML des sources de recherche pour ouvrir le résultat de la recherche sur le site externe.

    Procédure

    1. Dans l’interface utilisateur de la plateforme, accédez à Portail de services > Portails et sélectionnez le portail auquel vous souhaitez ajouter la source de recherche.
    2. Dans la liste connexe à Sources de recherche , cliquez sur Nouveau.
    3. Créez un nom et un ID pour la source de recherche.
      L’ID doit être unique et ne doit pas inclure d’espaces ou de caractères spéciaux.
    4. Sous l’onglet Source de données , cochez la case Est une source scriptée .
    5. Ajoutez du contenu au champ de script d’extraction des données.
      1. Définissez la fonction de recherche à exécuter par l’instance.

        Cet exemple utilise un exemple de RESTMessageV2 sans enregistrement, mais vous pouvez modifier cet exemple pour utiliser un service Web REST sortant préconfiguré si nécessaire, ou créer un profil d’authentification plus sécurisé.

        (function(query) {  
        var results = [];  
        /* Calculate your results here. */ 
        var url= "https://myInstance.service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" + encodeURI(query) + "&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";  
            var ws = new sn_ws.RESTMessageV2();
                ws.setBasicAuth("search_user", "search");  
                ws.setHttpMethod("get");  
                ws.setEndpoint(url);  
          
                var jsonOutput = ws.execute();  
        
        return results;  
        })(query);
        Remarque :
        Dans l’exemple précédent, ws.setBasicAuth nécessite un nom d’utilisateur et un mot de passe pour l’instance distante. Pour plus de détails, consultez RESTMessageV2 - Scoped, Global .
      2. Ajoutez une instruction if au script d’extraction de données pour décoder l’objet JSON renvoyé, itérer sur chaque résultat et définir les champs attendus.

        Le script d’extraction des données final :

        (function(query) {  
        var results = [];  
        /* Calculate your results here. */  
        var url= "https://<my-instance>.service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" + 
        encodeURI(query) + "&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";  
        var ws = new sn_ws.RESTMessageV2();  
            ws.setBasicAuth("search_user", "search");  
            ws.setHttpMethod("get");  
            ws.setEndpoint(url);  
          
            var jsonOutput = ws.execute(); 
            if (jsonOutput) {  
                var response = new JSON().decode(jsonOutput.getBody());  
                results = response.result;  
                results.forEach(function(result) {  
                    result.url = "https://myInstance.service-now.com/kb_view.do?sysparm_article=" + result.number;            
                    result.target = "_blank";  
                    result.primary = result.short_description;  
                });  
            }  
        
            if (jsonOutput.haveError()){
                gs.addErrorMessage(jsonOutput.getErrorMessage());
            }
        
        return results;  
        })(query); 
        Dans cet exemple, les champs suivants sont définis sur l’objet de résultat :
        • url : si vous créez un lien vers un site externe plutôt que d’ouvrir l’enregistrement dans votre ServiceNow instance, cela définit où le lien mène.
        • target : cible du lien. Définissez la cible sur _blank pour ouvrir les résultats dans un nouvel onglet, sinon laissez-la vide.
        • primaire : champ primaire affiché dans les résultats de la recherche.
    6. Mettez à jour le modèle de page de recherche pour ouvrir les résultats de la recherche sur le site externe.
      <div>
       <a href="https://myInstance.service-now.com/kb_view.do?sysparm_article={{item.number}}" target="_blank" class="h4 text-primary m-b-sm block">   
          <span ng-bind-html="highlight(item.primary, data.q)"></span>
        </a>
        <span class="text-muted" ng-repeat="f in item.fields | limitTo: 4">
          <span class="m-l-xs m-r-xs" ng-if="!$first"> · </span>
          {{f.label}}: <span ng-bind-html="highlight(f.display_value, data.q)"></span>
        </span>
      </div>
    7. Cliquez sur Mettre à jour.

    Résultats

    Testez la recherche externe dans votre portail. Les résultats s’affichent sous la valeur du champ nom définie à la troisième étape.

    Une source de recherche externe dans la page de recherche

    Chaque résultat de recherche s’ouvre dans le site externe défini dans le modèle de page de recherche.

    Un résultat de recherche unique provenant de la source de recherche externe