#概要
ServiceNowテーブルAPIを利用すると簡単にテーブルのデータを取得したり更新することが可能。しかし、次のような制限があります:
- 参照フィールドの場合はsys_idを指定する必要がある
- 1回の呼び出しでテーブル1つからデータしか取得できない
- API毎にセキュリティ(ACL)を設定できない
例えばテーブルAPIでは指定したインシデント番号のチケットに添付したファイルをダウンロードするには数回の呼び出しが必要になります。一回の呼び出しでファイルをダウンロードすり場合はScripted REST APIを作成します。
今回はよりScripted REST APIの基本を学ぶために指定したメールアドレスのユーザ情報を返すスクリプトを作成します。
##Scripted REST API
アプリケーションナビゲータから「Scripted REST API」を開き、次のように設定します。
「Resources」タブの「New」ボタンを押下して実行するスクリプトを記述します。今回はURIのメールアドレスを指定するようにします。
URLのパラメータとして指定できるようにする場合は前頁の「Query Parameters」をパラメータを作成します。
###Scripted REST APIリソーススクリプト
リソースのスクリプトにすべてのコードを記述することもできますが、保守性を考えてテーブル検索スクリプトをスクリプトインクルードに記述して、Scripted REST APIリソースではそのスクリプトを呼び出すようにします。
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
return new getUserDetails().getdetails(request.pathParams.userid);
})(request, response);
###スクリプトインクルード
多くの場合はクライアントから呼び出されますが、今回はサーバ側での呼び出しになるので「Client callable」のチェックは外します。
var getUserDetails = Class.create();
getUserDetails.prototype = {
initialize: function() {},
getdetails: function(email) {
var userInfo = [];
try {
var grUser = new GlideRecord('sys_user');
if (grUser.get('email', email)) {
userInfo.push({
'name': grUser.name,
'email': grUser.email,
'company': grUser.company.name
});
}
return userInfo;
} catch (e) {
gs.error("ERROR=", e);
}
},
type: 'getUserDetails'
};
##実行
REST API Explorerから実行すると次のようにJSONメッセージが戻ります。
{
"result": [
{
"name": "Lucius Bagnoli",
"email": "lucius.bagnoli@example.com",
"company": "ACME Japan"
}
]
}