インターネット上の任意のソースからデータを返すための詳細検索ソースを定義します。検索ソースの機能を理解するには、このチュートリアルに従って外部ナレッジベース検索ソースを設定します。
始める前に
必要なロール:なし
高度な検索ソースを作成するには、REST API を介した外部 Web サイトへの認証されたアクセスと 、AngularJS の基本的な知識が必要です。
このタスクについて
この統合では、次のことを行います。
- ServiceNow テーブル API を使用して別の ServiceNow インスタンスからナレッジベースをクエリするデータフェッチスクリプトを作成します。
- JSON 応答をデコードし、検索ウィジェットで想定されるフィールドを定義します。
- 検索ソース HTML テンプレートを更新して、検索結果を外部サイトで開きます。
手順
-
プラットフォーム UI で、 をクリックし、検索ソースを追加するポータルを選択します。
-
[ 検索ソース] 関連リストで、[ 新規] をクリックします。
-
検索ソースの名前と ID を作成します。
ID は一意である必要があり、スペースや特殊文字を含めることはできません。
-
[ データソース ] タブで、[ スクリプト化されたソースである] チェックボックスをオンにします。
-
データフェッチスクリプトフィールドにコンテンツを追加します。
-
インスタンスによって実行される検索関数を定義します。
この例では Recordless 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);
-
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);
この例では、結果オブジェクトに次のフィールドが設定されています。
- url: ServiceNow インスタンスでレコードを開くのではなく、外部サイトにリンクする場合、リンク先を定義します。
- target:リンクのターゲット。結果を新しいタブで開くにはターゲットを _blank に設定します。それ以外の場合は空白のままにします。
- primary:検索結果に表示されるプライマリフィールド。
-
検索ページテンプレートを更新して、検索結果を外部サイトで開きます。
<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>
-
[更新] をクリックします。
タスクの結果
ポータルで外部検索をテストします。結果は、手順 3 で定義した名前フィールド値の下に表示されます。

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