チュートリアル:外部ナレッジベースの検索ソースを設定する

  • リリースバージョン: Yokohama
  • 更新日 2026年03月13日
  • 所要時間:5分
  • 詳細な検索ソースを定義して、インターネット上の任意のソースからデータを返します。検索ソースの機能を理解するには、このチュートリアルに従って外部のナレッジベースの検索ソースを設定します。

    始める前に

    必要なロール:なし

    詳細な検索ソースを作成するには、REST API を介した外部 Web サイトへの認証されたアクセスと AngularJS の基礎知識が必要です。

    このタスクについて

    この統合では、次のことを行います。

    • ServiceNow テーブル API を使用するデータ フェッチ スクリプトを作成して ServiceNowインスタンスからナレッジベースを照会します。
    • JSON 応答をデコードし、検索ウィジェットが予期するフィールドを定義します。
    • 検索ソースの HTML テンプレートを更新して、外部サイトの検索結果を開きます。

    手順

    1. プラットフォーム UI で、次の場所に移動します: サービスポータル > ポータル をクリックし、検索ソースを追加するポータルを選択します。
    2. [検索ソース] 関連リストから、[新規] をクリックします。
    3. 検索ソースの名前と ID を作成します。
      ID は一意でなければならず、スペースや特殊文字を含めることはできません。
    4. [データ ソース] タブで、[スクリプト化済みソース] チェックボックスをオンにします。
    5. データ フェッチ スクリプト フィールドにコンテンツを追加します。
      1. インスタンスによって実行される検索機能を定義します。

        この例では、 レコードレス RESTMessageV2 の例を使用していますが、必要に応じてこの例を変更して、事前設定された 送信 REST Web サービス を使用するか、より安全な認証プロファイルを作成することができます。

        (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);
        注:
        前の例では、ws.setBasicAuth にリモートインスタンスのユーザー名とパスワードが必要です。詳しくは、 RESTMessageV2 - スコープ指定、グローバル を参照してください。
      2. if ステートメントをデータフェッチスクリプトに追加して、返される JSON オブジェクトをデコードし、各結果を繰り返し処理してから期待されるフィールドを設定します。

        最終データ フェッチ スクリプト:

        (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); 
        この例では、結果オブジェクトに次のフィールドが設定されています。
        • urlServiceNow インスタンスのレコードを開くのではなく、外部のサイトにリンクする場合は、これによりリンクの移動先が定義されます。
        • target:リンクのターゲット。ターゲットを _blank に設定して結果を新しいタブで開くか、または空白のままにします。
        • primary:検索結果に表示されるプライマリ フィールド。
    6. 検索ページ テンプレートを更新して、外部サイトの検索結果を開きます。
      <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. [更新] をクリックします。

    タスクの結果

    ポータルで外部検索をテストします。結果は、ステップ 3 で定義された名前フィールド値の下に表示されます。

    検索ページの外部検索ソース

    各検索結果は、検索ページ テンプレートで定義された外部サイトで開きます。

    外部検索ソースからの単一の検索結果