概要
MID Server経由でRESTを実行してみました。
色々調べてみたのですがServiceNowから便利な機能が用意されていたわけではなく、
下記の手順で実施
①MID ServerにBATCHファイルを作成
②BATCHファイル実行するQueueを登録
③BATCHファイルに記載してあるCURLコマンドを実行
詳細
①MID Serverにスクリプト(BATCHファイル)を作成
MID Serverで実行するBATCHファイルを作成します。
ServiceNowで作成後、MID Serverのagent/scriptsフォルダに作成したBATCHファイルが自動で格納されます。
1.MID Server – Script Filesを実行する。
2.NameにBATCHファイル名を入力する。
3.ScriptにCURLコマンドを入力する。
4.Submitを実行する。
②BATCHファイル実行するQueueを登録
MID ServerへBATCHファイルの実行依頼を行うQueueを作成します。
MID ServerにてQueueを検知するとBATCHファイルが実行されます。
1.ECC - Queueを実行する。
2.NEWを実行する。
3.Agent欄にMID Server名を入力する。
4.Topic欄に”Command”を入力する。
5.Name欄に実行するBATCHファイルのフルパスを入力する。
6.Queue欄にoutputを選択する。
7.State欄がreadyであることを確認する。
8.Submitを実行する。
BATCHファイルに記載してあるCURLコマンドを実行
1.QueueはMIDサーバにて処理されるとStateがreadyから変更される。
(成功の場合はprocessed、失敗の場合はerror)
2.MID ServerでBATCHファイルが実行されるとQueue欄がinput、payload欄に実行結果が設定された応答Queueが作成される。
補足
payloadの文字化け
payload欄は文字コードUTF-8となっているBATCHファイルは
そのまま実行すると文字コードがSJISになる。
そのためpayloadにメッセージを表示したい場合は
BATCHファイルの先頭にchcp 65001
と記載し文字コードをUTF-8に変更する必要があります。
BATCHファイルの定期実行
Scheduled jobsを利用し定期的にQueueにレコードを作成するようにすることで実現できます。
var queue = new GlideRecord(‘ecc_queue’); //Queueテーブル
queue.initialize(); //初期化
queue.agent = ‘mid.server.XXXXXXXX’; //MIDサーバ
queue.topic = 'Command';
queue.name = 'c:\\agent\\scripts\\import.bat'; //BATCHファイル
queue.queue = 'output';
queue.state = 'ready';
queue.payload='<parameters><parameter name="skip_sensor" value="true"/></parameters>'
queue.insert();
Queue実行時にエラーになる場合の対処
Queueのpayload項目に下記文言を追加するとエラーがスキップされる。
<parameters><parameter name="skip_sensor" value="true"/></parameters>
最後に
この方法でREST実行することが出来たがあっているかは不安です。
もっと良い方法がありましたら共有いただけますと幸いです。