見出し画像

【ServiceNow】OutboundのSOAPデモ【第2回/全2回】

◆やりたいこと

・ServiceNowから実行するOutboundのSOAPの実装をなんとなく理解したい
・フローデザイナからSOAP stepを実行したい

◆方法

・インスタンス同士でSOAP実行してみる
・アウトバウンド側からインバウンド側のインスタンスにインシデント新規起票できたらOK
・起票する際にアウトバウンド側のインシデント管理番号と簡単な説明(short description)の値をインバウンド側のインシデントに入れてみる

◆流れ

・インバウンド側の設定をする(第1回)
・アウトバウンド側の設定をする(第1回)
・手動でSOAPのテスト実行をする(第1回)
・ビジネスルールからSOAP実行をする(第2回)
・フローデザイナからの実行用にクレデンシャルを作る(第2回)
・SOAP実行するアクションを作成しテストする(第2回)
・フローデザイナからSOAP実行をする(第2回)
第1回のリンク

◆必要なもの

・URLが異なるインスタンス2つ(PDI)
→メールアドレスが2つあれば作れる

◆前提としている知識

・インポートセットと変換マップの使い方
・ビジネスルールの使い方
・フローデザイナの使い方
分からなくても手順通りにやればできると思いますが、
何をやっているか理解したい場合はDocsや無料のNowlearningをやると良いです。

【手順】ビジネスルールからSOAP実行をする

・第1回で作成したSOAP MessageのInsertを表示する(アウトバウンド側)

画像1

・エンドポイントをコピーして退避しておく(フローの時に使う)

画像21

・関連リンクのPreview Script Usageをクリックする

画像2


・表示されたスクリプトの「try { } 」の中だけをコピーする(赤枠内)

画像3

var s = new sn_ws.SOAPMessageV2('SOAP_demo', 'insert');
//override authentication profile 
//authentication type ='basic'
//r.setAuthentication(authentication type,profile name);

//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);

s.setStringParameterNoEscape('insert.u_short_description', '1st soap test');
s.setStringParameterNoEscape('insert.u_number', 'INCdemo001');
var response = s.execute();
var responseBody = response.getBody(); 
var status = response.getStatusCode();

・ビジネスルールを新規作成する

画像4

・赤枠内を入力する

画像5

・Advancedタブをクリックして、Scriptを下記の通りに入力してSave
※デフォルトのScriptを削除して丸々コピペでOK

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

var s = new sn_ws.SOAPMessageV2('SOAP_demo', 'insert');

//override authentication profile 
//authentication type ='basic'
//r.setAuthentication(authentication type,profile name);

//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);

s.setStringParameterNoEscape('insert.u_number', current.number);
s.setStringParameterNoEscape('insert.u_short_description', current.short_description);
var response = s.execute();
var responseBody = response.getBody(); 
var status = response.getStatusCode();
gs.addInfoMessage('Record Insert');

})(current, previous);

画像6

・テスト用にインスタンスレコードを作成する(アウトバウンド側)

画像7

・メッセージが出たらさっき作成したビジネスルールが完了しました。

画像8

・インバウンド側のインスタンスのインシデントに期待通りのレコードが起票されたことを確認

画像9

・検証後、ビジネスルールが不要な場合は非アクティブ化しておく。

画像10

「ビジネスルールからSOAP実行をする」はこれで完了です。

【手順】フローデザイナからの実行用にクレデンシャルを作る

・アウトバウンド側で、まずエイリアスを作成。

画像11

・赤枠内のように入力し、Save。

画像12

・下部に関連リスト「Credentials」が表示されるので、新規作成。

画像13

・「Basic Auth Credentials」をクリック

画像14

・Nameに任意の名称を入力。
・User nameとPasswordは「インバウンド側のログイン情報」を入力

画像15

「フローデザイナからの実行用にクレデンシャルを作る」はこれで完了です。

【手順】SOAP実行するアクションを作成しテストする

・フローデザイナを開く

画像16

・アクションを新規作成

画像17

画像18

・+ボタンをクリックしてstepを表示
・SOAPを選択

画像19

・inputsをクリック
・Create inputをクリック
・ラベルに「incident」と入力
・タイプに「reference.incident」と入力

画像20

・SOAP stepをクリック
・Operationまで赤枠内のように入力

画像25

※EndpointにはSOAP MessageのInsertのFunctionでコピーしておいた値を張り付ける↓

画像22

・スクロールして、「SOAP Envelope」に下記Scriptを入力​

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://www.service-now.com/u_demo_soap">
  <soapenv:Header/>
  <soapenv:Body>
     <u:insert>
        <!--Optional:-->
        <u_number></u_number>

        <!--Optional:-->
        <u_short_description></u_short_description>
        
     </u:insert>
  </soapenv:Body>
</soapenv:Envelope>

※Script貼り付け後、緑のデータピルを図のようにドラッグアンドドロップする

画像25

画像23

・Outputsをクリック
・Create outputをクリック
・LabelとNameを図のように入力し、Exit Edit Modeをクリック
ラベルは「Error code, Error message, Response body, Response headers,Status code」の5個で、Nameにもコピペする。

画像26

・作成したOutputにデータパネルのOutputから同じ名称のデータをドラッグアンドドロップする

画像27

・全部入れた状態になったら右上のSaveをクリック

画像28

・アクションの作成が完了したのでテストの準備をする
・テスト用のインシデントレコードを作成(アウトバウンド側)

画像29

・アクションに戻り、Testボタンをクリック

画像30

・作成したレコードを選択し、Run Test

画像31

・赤枠内のリンクからテスト結果を確認

画像32

・HTTPコードが200ならOK

画像33

・インバウンド側のインシデントに期待通りのレコードが作成されていることを確認

画像34

・テストが問題なければアクションに戻り「Publish」をクリック

画像35

「SOAP実行するアクションを作成しテストする」はこれで完了です。

【手順】フローデザイナからSOAP実行をする

・フローを新規作成

画像36

画像37

・トリガーを下図のように設定

画像38

・先ほど作成したSOAPアクションを追加

画像39

・アクションのインプットの欄に、右のデータパネルのトリガー「インシデントレコード」をドラッグアンドドロップで入れる。

画像40

・図の通りになったらDoneをクリックしてSave。

画像41

・フローの作成が完了したので、テストする
・Testをクリック

画像42

・+ボタンをクリックしてテスト用のインシデントレコードを起票

画像43

・Run Test

画像44

・リンクからテスト結果を確認

画像46

・HTTPコードが200であればOK

画像45

・インバウンド側に期待通りのレコードが作成されていることを確認

画像47

・必要に応じてフローをアクティベートする

画像48

「フローデザイナからSOAP実行をする」はこれで完了です。

◆参考にしたもの

・YouTube
→英語ですが画面操作があるのでなんとなく言いたいことが分かりました。
やることの前提条件を教えてくれたりして親切でとても分かりやすかったです。

・ServiceNowのDocs
SOAP web service
Outbound SOAP web service
Create a SOAP message
Test the SOAP message
SOAP step
→実装の画面をyoutubeを見て流れを理解して、基本的な知識はDocsで確認すると理解しやすかったです。Docsは必要な情報はまとまっていますが画面イメージが古いので…。

感想

youtubeを観ながら以前にもやってみたのですが、あまり覚えていなかったので備忘を残しておくことにしました。
youtubeは実際の操作が見ることが出来て分かりやすいのですが、
知りたいことだけ見るときにちょっと不便なので…。
目次をつけてみたので見やすいと良いなと思います。
また、最初はSOAPを全く分からないところからのスタートだったので、SOAPは準備が大変そうだと思っていました。(RESTは割と気軽に試せるサイトがいくつかあったのですが…)
ServiceNow同士だとインスタンスさえあればできるので気軽にできて良かったです。