ServiceNow:REST APIを使った外部データ連携
概要
ServiceNowのRESTメッセージ機能を使って外部APIからデータを取得し、カタログアイテムのフォームに動的に反映する実装パターン。
1. RESTメッセージの設定
| 項目 | 値 |
|---|---|
| エンドポイント | https://api.example.com/openapi/${target}/?$top=${top}&$skip=${skip}&$filter=${filter} |
target |
APIキーとして設定(接続先テーブル名を動的に切り替え) |
${target} などはRESTメッセージのURLパラメータとして定義し、スクリプトから setStringParameterNoEscape() で値を注入する。
2. スクリプトインクルード(サーバーサイド)
AbstractAjaxProcessor を継承したAjaxクラスとして実装。
共通実装パターン
var r = new sn_ws.RESTMessageV2('接続設定名', 'エンドポイント名');
r.setStringParameterNoEscape('target', targetTable);
r.setStringParameterNoEscape('filter', filterString);
r.setHttpTimeout(150000); // タイムアウトは状況に応じて調整(目安:2分半)
var response = r.execute();
if (response.getStatusCode() == 200) {
obj["status"] = "Success";
obj["variables"] = JSON.parse(response.getBody()).value;
} else {
obj["status"] = "Error";
}
return JSON.stringify(obj);
504エラーが頻発する場合は
setHttpTimeout()の値をサーバー負荷に配慮しながら調整する
3. クライアントスクリプト(フロントエンド)
onChange トリガーで検索ボタン押下を検知し、GlideAjaxでサーバー関数を呼び出す。
処理フロー
入力値チェック
→ フォーム初期化(選択肢・値クリア)
→ ローディングメッセージ表示
→ GlideAjaxでサーバー関数呼び出し
→ 結果をSelectBoxのOptionに追加
→ 件数メッセージ表示
まとめ
| レイヤー | 使用機能 | 役割 |
|---|---|---|
| 設定 | RESTメッセージ | 接続先・エンドポイント管理 |
| サーバー | Script Include(Ajax) | API呼び出し・データ整形 |
| クライアント | Client Script(GlideAjax) | UI操作・ユーザーフィードバック |