0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[ServiceNow] [基礎] 外部Web ServiceをREST Messageで利用する

Last updated at Posted at 2023-08-02

はじめに

ServiceNowは外部のWeb Serviceと連携することができます。
今回は、フリーのWeb Serviceと連携して、Locationの緯度・経度を取得する方法を取り上げます。

外部Web Serviceの紹介

東京大学空間情報科学研究センターは、「シンプル ジオコーディング 実験」として、住所をURLの引数に取って、その緯度・経度情報をXMLでResponseするサービスを公開しています。

上記のWeb Serviceの利用にあたっては、参加規約に従ってください。

REST Messageの設定

All > System Web Servies > REST Messageから、次のように新規Rest Messageを作成します。

関連リストHTTP Methodsから、次のように新規HTTP Methodをを作成します。

テストのために関連リストから、新規Variable Substitutionを作成します。

  • Name: address
  • Value: %E6%9F%8F%E5%B8%82%E6%9F%8F%E3%81%AE%E8%91%89%EF%BC%95%EF%BC%8D%EF%BC%91%EF%BC%8D%EF%BC%95

GetLatiAndLongiMethod.png

ここで、一回Testします。関連リンクからTestをクリックします。無事、結果がXMLで返ってきたことが確認できます。

GetLatiAndLongiMethodTest.png

LocationテーブルのBusiness Ruleの設定

作成したRest MessageをLocationテーブルのBusiness Ruleから呼び出し、Locationレコードに緯度・経度をセットします。
cmn_location.listでList Viewを開き、3本線アイコンからConfigure > Business Ruleを開き、次のように新規ビジネスルールを作成します。Locationテーブルには、テストのために、事前にu_lati_longi_xmlフィールドを追加して、REST Messageか返す生XMLを確認するフィールドを作成しておきます。

LocationBRWhenToRun.png
LocationBRScript.png

Script
(function executeRule(current, previous /*null when async*/) {

	// Add your code here
	// Set varialbles of the addredd of the location
	var locAddr = current.state +current.city + current.street;
	var encLocAddr = encodeURI(locAddr);
	
	gs.info('BR [Get Lati and Longi]:' + locAddr + ':' + encLocAddr);
	
	try { 
		//Execute the predefined REST.
		var r = new sn_ws.RESTMessageV2('Get Lati and Longi', 'Default GET');
		r.setStringParameterNoEscape('address', encLocAddr);

		var response = r.execute();
		var responseBody = response.getBody();
		var httpStatus = response.getStatusCode();
		
		// Set the result of the response for testing.
		current.u_lati_longi_xml = responseBody;
		
		// Parse XML and Set the latitude and the longitude to the fields.
		var xmlDoc = new XMLDocument2;
		xmlDoc.parseXML(responseBody);
		var lati = xmlDoc.getFirstNode('/results/candidate/latitude');
		var longi = xmlDoc.getFirstNode('/results/candidate/longitude');
		current.latitude = lati.getTextContent();
		current.longitude = longi.getTextContent();
		
}
catch(ex) {
	var message = ex.message;
	gs.error('BR [Get Lati and Longi]:' + message);
	//If an error occured, set the latitude and longitude of Tokyo Chuo-ku Nihonbashi 1-1-1
	current.latitude = '35.683861';
	current.longitude = '139.773697';
}

})(current, previous);

Locationレコードの作成とテスト

Locationレコードを作成して、Rest MassageとBusiness Ruleをテストします。
適当なNameを付けて、実在する住所をState / Province、City、Streetに入力してからSavaします。
すると、次の例のように、Latitude(緯度)とLongtitude(経度)が正常に自動セットされました。

LocationNihonbashi.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?