Alert受信時のエラー処理について
Alert受信時のジョブフロー内でエラーするとジョブフローが止まってしまいます。
例えば、
</system/channels/Alert> -> # データの受信待機
[message = $RESULT] -> # データを受信したら内容は$RESULTに格納される。
print('${message}を受信しました') ->
...->
...->
...->
...->
self() # 再度、受信待機に戻る
のようなジョブフローがあったとして、
...
の所で止まるとselfまで戻ってこずにデータのハンドリングが止まってしまいます。
...
の所で異常が発生してもselfまで戻して、次のデータのハンドリングは可能にすることは出来るでしょうか?
...
の所で止まるとselfまで戻ってこずにデータのハンドリングが止まってしまいます。
...
の所で異常が発生してもselfまで戻して、次のデータのハンドリングは可能にすることは出来るでしょうか?
-
正式なコメント
フィックスポイントの髙橋です。
あるジョブで失敗、例えば実行ジョブで実行したコマンドがエラーになった場合($STATUS が 1 になった場合)、そのジョブに続く結合子として -> を利用しているとその時点でこのジョブフローとしては強制終了になってしまいます。失敗しても処理を継続したい場合、たとえば => 結合子を使うことで、エラー判定するなどの処理を継続することができます。
[失敗するかもしれないコマンド] =>
{ if $STATUS == 0 |
then:
# 成功した場合の処理
print("成功しました")
else
# 失敗した場合の処理
print("失敗しました")
}このようにジョブ単位でエラー判定することもできますが、一連のジョブフローでエラーが発生した場合に一括してエラー処理させたい場合もあります。そうしたときは以下のように try ブロックを利用することで、ブロック内の一連のジョブフローにおいて失敗が発生したときに、try ブロックの失敗として扱うことができます。try ブロックとしては失敗になるため、結合子として => でジョブを続けていることに注意してください。
{ try | [./処理A] -> [./処理B] -> [./処理C] } => { if $STATUS == 0 | then: print("すべての処理に成功しました") else: print("いずれかの処理に失敗しました") # # 失敗時の処理があればここに記述する # }
上にご提示いただいたジョブフローですと、簡単には以下のように書くと止まることはなくなるのではないかと思います。
</system/channels/Alert> -> # データの受信待機
[message = $RESULT] -> # データを受信したら内容は$RESULTに格納される。
print('${message}を受信しました') ->
{ try |
... ->
... ->
...
} =>
self()また、似たようなご質問として以下のようなものもございました。
参考になさってみてください。
コメントアクション
サインインしてコメントを残してください。
コメント
1件のコメント