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

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

    Avant de commencer

    Rôle requis : aucun

    Pour créer une source de recherche avancée, vous devez disposer 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 les résultats 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. Cliquez sur Nouveau dans la liste connexe Sources de recherche.
    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. Dans l’onglet Source de données , cochez la case Est une source scriptée .
    5. Ajoutez du contenu au champ de script d’extraction de données.
      1. Définissez la fonction de recherche à exécuter par l’instance.

        Cet exemple utilise un exemple 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 d’informations, consultez RESTMessageV2 - Scoped, Global .
      2. Ajoutez une instruction if au script d’extraction de données pour décoder l’objet JSON retourné, 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 au lieu d’ouvrir l’enregistrement dans votre ServiceNow instance, cela définit l’endroit 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 ce champ vide.
        • primaire : champ principal 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 de champ nom définie à l’étape trois.

    Une source de recherche externe dans la page de recherche

    Chaque résultat de recherche s’ouvre sur 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