[ServiceNow]MID Server経由でREST APIを実行してみた


概要

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.insert();

最後に

この方法でREST実行することが出来たがあっているかは不安です。
もっと良い方法がありましたら共有いただけますと幸いです。