LoginSignup
3
2

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

Last updated at Posted at 2020-12-23

概要

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を実行する。
image.png

②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を実行する。

image.png

BATCHファイルに記載してあるCURLコマンドを実行

 1.QueueはMIDサーバにて処理されるとStateがreadyから変更される。
 (成功の場合はprocessed、失敗の場合はerror)
 2.MID ServerでBATCHファイルが実行されるとQueue欄がinput、payload欄に実行結果が設定された応答Queueが作成される。
image.png

補足

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実行することが出来たがあっているかは不安です。
もっと良い方法がありましたら共有いただけますと幸いです。

3
2
2

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
3
2