Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

イベントを順番に一定間隔を空けて実行させる方法・仕組み

th7
Tera Expert

ある特定のイベントがほぼ同時に呼び出されることがあるが、同時に実行されると問題がある為、

実行が重ならないよう、一定間隔を空けて実行させるようなServiceNowの仕組みはありますか?

仕組みが標準でなければ、いい方法・アイデアを教えてください。

5件の返信5

Hitoshi Ozawa
Giga Sage
Giga Sage

th7
Tera Expert

返信ありがとうございました。

t_sadahisa
Giga Guru

ScheduleJobと同じE-learningで扱われていますが、EventとScript Actionを利用されるのはいかがでしょうか。

https://docs.servicenow.com/bundle/sandiego-platform-administration/page/administer/platform-events/reference/r_ScriptActions.html

Eventには時刻を設定することができます。
なので、あるスクリプトが動いた際に、同時に処理をしてはいけないScriptが処理中の場合に、1分延期すると言ったことが可能になります。
※依存関係のあるスクリプトの実行状態管理が必要です。

優先すべき処理をScheduledJobで定義しておき、そのJobが動いていないときに動かしたいScriptをScript Actionで定義するというのも可能かなと思います。

 

ご質問に答えられていますでしょうか。何かお力に慣れれば幸いです。

th7
Tera Expert

レスありがとうございます。

・実現したいことは、例えば、Eventがほぼ同時に3個発生する場合、そのEventのScript Actionが約10秒ごとに順番に1つずつ実行されることです。(1個目のEventのScript Actionが実行開始、約10秒後に2個目のEventのScript Actionが実行開始、その約10秒後にEventのScript Actionが実行開始 というようなイメージです)

 

・Learningの下記記事で、Custom Queues を使って1つずつ順番に実行されるようにしました。

https://developer.servicenow.com/dev.do#!/learn/learning-plans/sandiego/servicenow_application_developer/app_store_learnv2_automatingapps_sandiego_using_custom_queues_advanced_topic

また、Schedule Item の Trigger typeに 「Interval」または「Repeat」を指定、時間に10秒を指定、そうすることによって、Schedule Item自体は一定間隔の10秒を空けて起動できるようにはできましたが、Schedule Itemと関連づけたEventのScript Actionについては、1つのScript Actionが実行完了すれば、すぐさま次のScript Actionの実行に移ってしまうため、10秒間に複数のScript Actionが実行されてしまいます。

 

・ひとまずは、一定時間間隔を取る方法として、EventのScript Action に gs.sleep(10000) を指定し、実行開始時刻を一定時間間隔を取れるようにしました。

・Schedule Itemの1回の起動につき、未実行のScript Actionが多数あっても、1つだけScript Actionできるようにしたいです。