メニュー

logo

カチシステムはお客様に寄り添った
システム開発と支援サービスを提供し
「やさしい最先端」を創造します。

【第86回】ロータス博士のWinActor塾~イベント監視Ⅲ 解答編

2022.10.05

さあ今日はお待ちかねの解答編じゃ。

難易度は低めじゃったから、もう皆完成していると思う。

待ちくたびれて同じシナリオを10個も作っちゃいましたよ。

それ意味あるのか・・・。

ま、今回もささっと終わらせてしまおう。

実は前回のシナリオにノードを4つ追加すればできてしまうからのう。

(えっ!僕4つじゃ済まなかったけど間違ってる?)

まだ問題にチャレンジしていない方は前回の記事を見て挑戦してみよう。

それでは解答編スタートじゃ。

前回の記事はこちら

解答 複数イベント監視のタイミング制御

シナリオ概要

前回のお題はこちら。

この条件を満たすように、前回のシナリオを改変していきましょう。

 「処理前」と「処理中」の2つのフォルダがある。

これをイベント監視で監視し、更新が行われたことを検知して処理を実行(サブルーチンに移動)したい。

ただし、次のような条件で監視を行うこと。

 

・処理前フォルダが更新され、処理をしたあとに、処理中フォルダの監視を行う。

・処理前フォルダの更新を検知する前に処理中フォルダが更新された場合は何もしない。

 

シナリオ全体図

シナリオフローの全体図は次のようになっています。

クリックで拡大表示されます。

  • フロー全体図

 

 

イベント一覧

イベント一覧は前回のままで、処理前フォルダと処理中フォルダの更新をチェックする2つのみです。

どちらも「監視対象とするかの初期値」のチェックボックスは外しておきましょう。

 

 

「処理前フォルダ更新」イベントの設定内容

 

「処理中フォルダ更新」の設定内容

 

追加ノードのプロパティ

ノードの追加箇所は次のようになります。

 

「イベント監視登録」(図の水色枠)x2

「イベント監視解除」(図の赤枠)x2

 

 

それぞれプロパティはこのように設定してください。

処理前と処理中を間違わないように注意しましょう。

 

 

 

 

 

ノードの追加位置について

ノードを追加する位置について、少し補足をしよう。

実際にシナリオを実行すればすぐわかると思うが

注意が必要なのは「イベント監視解除」じゃ。

まさかこんな風に作った人はいないと思うが、次の悪い例を見て欲しい。

僕、最初こんな感じで置いて失敗しました。

なんとなく気持ちはわかる。

登録から始まって解除で終わる、みたいな感覚のせいじゃろう。

実際は「イベント監視」でフローは止まり、監視状態に入る。

これはサブルーチンから戻ってきてからも同じなのじゃ。

イベント監視で検知してサブルーチンに飛んでも

サブルーチンから戻るまでに監視解除してないから、

戻ってきたときにまた監視状態で止まっちゃうんですよね。

うむ。監視を解除するタイミングは「イベント監視」からフローが遷移してから

次の「イベント監視」に到達するまでの間ということになる。

下図の緑のエリアじゃ。

そういえば、前に覚えた「イベント監視終了」は使えないんですか?

確かにあれを使えばイベント監視から抜けることはできる。じゃが、抜けるだけじゃ。

監視対象としては残り続けるので、次の処理中フォルダ更新の監視に入ったときに

処理前フォルダも同時に監視されることになってしまう。

じゃから、しっかりと「イベント監視解除」で処理前フォルダの更新の監視を切る必要があるのじゃ。

なるほど・・・イベント単位で制御するなら

登録と解除を使ったほうが良いと。

そういうことじゃ。

では実行結果を見て今日はおしまいにしよう。

 

 

実行結果

シナリオを実行すると、イベント監視ノードに到達したところで

イベント監視状態となりフローの動きは止まります。

 

 

イベント一覧タブ画面で、監視状態を確認してみましょう。

処理前フォルダ更新だけにチェックが入り、監視対象となっていることがわかります。

 

 

ここで、処理前フォルダに適当なファイルを入れたり、既存のファイルを編集して上書き保存をすると

フォルダ内が更新されたことを検知してサブルーチンが実行されます。

サブルーチン内には待機ボックスでメッセージを表示するように設定しているので次のポップアップが出ます。

 

 

ポップアップが出ているタイミングでもイベント監視状態を確認してみます。

 

 

サブルーチンの頭で処理前フォルダを監視対象外とする「イベント監視解除」が実行されているため

処理前フォルダ更新のイベントのチェックが消えて監視対象外となりました。

この時点で、すべてのイベント監視のチェックがオフ、つまり監視対象がひとつもないという状態になったので

次に「イベント監視」ノードに到達しても監視状態となって止まることがなくなります。

 

ポップアップに応答して閉じると、サブルーチンから抜け、メインフローが進みます。

 

 

 

「イベント監視登録」ノードによって処理中フォルダ更新の監視が有効になるため

最後の「イベント監視」ではフローが停止し監視状態となります。

念のために監視状態も確認しておきましょう。

 

 

 

あとは同じ流れで、処理中フォルダに対して更新を行うとポップアップが出て終了となります。

 

 

 

ここまで同じ流れでシナリオが進めば、今回の問題はクリアです!

簡単だと思って適当に作ってたら

思ったよりも変な動きしちゃって疲れましたよもう。

ふぉっふぉ。

失敗は成功の母!良い経験になったじゃろう。

ちなみに10個作ったといったが、結果はどうだったのじゃ?

10個中10個!失敗しました!

よし!後でワシと整備工場へ行こう!

ということで塾はここで終わりじゃ!また次回!

ちょっと博士!何する気ですか!

うわあ助けて!

関連記事こちらの記事も合わせてどうぞ。

最近の記事

カテゴリ

PAGETOP