電話による営業、セールスはお断りしております。誠に申し訳ございませんが、問い合わせフォームよりお願い致します。 お問い合わせはコチラ

DAのコマンド実行が終わるまで待機させる方法

こんにちは。
自称)BizRobo!エンジニアのもりりんです。

今回は、「DAのコマンド実行が終わるまで待機させる方法」というちょっとマニアックなテーマです。
DAの待機処理の入れ方は難しいんじゃーって、BizRobo!では永遠の課題かなと思っています。
その中でも最初は躓く、コマンドを実行した後の待機方法についてご紹介します。
データ量によって、実行時間がまちまちになるような状況で利用できる方法です。

目次

前提条件

「DA上でbatを実行し、処理が囚終了するまで待機する」こととします。
なお、batは指定されたフォルダにあるデータを処理するものであり、日次で処理するデータ量が変わるとします。

とりあえず作ってみる

コマンドを実行して、終わるであろう時間分を待機するロボットは次となります。
本サンプルではbatをWindows+Rから実行していますが、今回は説明を割愛します。

上記のようにガードチョイスで20秒待機するようにしましたが、常に20秒で終わるかもわからないため上手くいく日、いかない日があると想定できます。
また、一律に20秒待機するためそれ未満で終わる場合は余計な待ち時間が発生する点も微妙かなと思います。
この状態で正常に動作させたい場合は、待機時間を20→120等の処理にかかる最大数に変更する必要があります。

可変時間を待機できる処理に組み替える 

では、待ち時間が固定になってしまっている箇所を動的に対応できるように書き換えてみましょう。

繰り返しを自由に制御できる「Whileループ」ステップを利用します。
繰り返し条件が「true」である限り繰り返しを続ける性質を利用し、無限ループを作成します。

Whileループの中に繰り返しを制御する仕組みを追加します。
今回は、batの処理中はコマンドプロンプトが表示される仕様のため、コマンドプロンプトが表示されている間は処理が継続中と判断できます。
ガードチョイスの「アプリケーションが見つかった時」「アプリケーションが見つからなかった時」を利用し、コマンドプロンプトの表示状態で処理を分岐させます。

今回の動作仕様は次とします。

  • アプリケーションが見つかった時
    処理が継続中のため2秒間待機する(待機後、自動で次のループへ)
  • アプリケーションが見つからなかった時
    処理が終了したと判断できるため、breakステップでループを強制終了する

上記の条件に従って、Whileループを埋めると次のようになります。
なお、実行を監視する前にコマンドプロンプトが立ち上がるまでの2秒間の待機処理を追加しています。

breakステップは、こういった時ぐらいしか利用しないので触ったことがない方も多いかもしれません。
DSの「Reapt」「Next」アクションで無限ループを作成する方法と異なるためご注意ください。

DS/DAでの無限ループの作成方法を簡単に書くと次のようになります。

  • DSの無限ループ作成方法
    「Repeat 」と 「Next」アクションで、ループを作成する
    ループを終了する場合は、「Next」アクションを実行させないブランチを作成する
  • DAの無限ループ作成方法
    「Whileループ」ステップのテスト(繰り返し条件)にtrueを設定する
    ループを終了する場合は、終わりたい箇所にbreakステップを作成する

最後に

簡単にご紹介しましたが、いかがでしたか?
動的な待機処理ってどうしたらいいのか難しく考えてしまう方もいるかと思いますが、シンプルな方法で対応できました。 
実際の利用場面ではリトライ回数を考慮するように変更する必要性があるかもしれませんが、Whileループのテストを書き換えるだけで簡単に変更できます。

また、今回のようなコマンドプロンプト以外にも、Webブラウザでのボタンや項目/リストの表示待機にも活用できます。
DAでは、レコーダービューのHTMLツリーが認識されるとステップが処理されてしまう仕様上、まだ画面には表示されていないタイミングでボタンクリック等の処理を実行しすることがあります。
弊社でも表示が遅いWebサイトをロボットで操作する際に同様の現象が多発するため、無限ループを利用したチェック処理を導入しています。
もし同様のお悩みを持たれてましたら、1度試してみてください。

今回も最後までお読みいただきありがとうございました。

目次