【第9回】ロータス師匠のWinActorシナリオ道場~データ転記編 ExcelからWebシステムへ③~
2021.07.26
さて今回は、データ転記編~ExcelからWebシステムへ③です。いよいよこのシリーズも後半です。

なかなかのボリュームになってきましたね!

うむ。途中分からない部分があった場合は、WinActorのマニュアルや、
ブログ記事の下部にあるコメントフォームで確認してみるのじゃぞ。焦らずゆっくり行こう!
前回の内容を復習したい方は以下のリンクからご確認ください。

目次
1.シナリオ概要
「ロータス電機」は全国展開している家電量販店です。
本社勤務のロータス君の元には、毎日全国の店舗から、その日の取引内容を記録した『POS取引履歴』が送られます。
ロータス君は、日々『POS取引履歴』を社内システムに手動で入力していましたが、この度業務の自動化を図ることとなりました。
この業務の自動化にあたり、ロータス君は以下の作業の流れで実装することにしました。
①社内システムを起動
②『未処理フォルダ』内のエクセルファイル数を確認
ファイル数が1以上であれば、ファイルの数だけ後述(③~⑥)の処理を繰り返し実行
※『未処理フォルダ』には、各店舗から受け取ったエクセルファイル『POS取引履歴』が事前に格納されていることとします
③エクセルファイル名から、転記に必要な情報を抽出・転記
④エクセルファイルを開いて、転記に必要な情報を抽出・転記
⑤処理完了したエクセルファイルを『処理済みフォルダ』に移動
⑥処理失敗したエクセルファイルを『確認依頼フォルダ』に移動
⑦③~⑥の繰り返し処理が完了したら、社内システムを閉じてシナリオを停止

今回は⑤~⑥の処理を作っていくぞ!
2.シナリオ作成
転記処理・仕上げ

前回までで、エクセルファイルの情報を社内システムに転記する処理が作成終了したぞ。
しかしまだ、転記処理は完了していない。ロータス君、何が足りないか分かるかね?

そういえば、転記しただけで、送信ボタンを押していませんね。

その通り!ここは難しい内容ではないので、ささっと済ませてしまおう。
以下の流れをシナリオに組み込むぞ。
・社内システムへのデータ転記が完了したら、画面下の「送信」ボタンをクリックします。
・確認用のポップアップ画面が出ますので、OKをクリックします。
以下のライブラリを使用します。
①【ライブラリ】>23_ブラウザ関連
・クリック
②【ライブラリ】>04_自動記録アクション
・エミュレーション
ライブラリは、サブルーチングループではなくメインのシナリオの中に配置しました。
送信ボタンを押す行為は、「基本情報を転記」「POS取引履歴を転記」のどちらかに固有の作業ではないからです。
①クリック
ブラウザ名は変数『ブラウザ名』を選択します。
XPathは取得したXpath値を設定します。
②エミュレーション
名前を、値「エミュレーション」から値「Enter」に書き換えます。
ウィンドウ識別名は、社内システムの画面を選択します。
操作は、キーボード[Enter]を選択します。
※Down・Up両方を設定すること、Down・Upの順番を間違えないようにすることをご注意ください。
無事データの送信が完了すると、以下のメッセージが表示されます。
⑤処理完了したエクセルファイルを『処理済みフォルダ』に移動
データ転記が完了したエクセルファイルを、「01_処理済み」フォルダに移動させます。
以下のライブラリを使用します。
①【ライブラリ】>13_ファイル関連>02_ファイル操作
・ファイル移動
①ファイル移動
移動元は、変数『処理対象ファイルパス』を選択します。
移動先は、変数『処理済みフォルダパス』を設定します。
変数『処理済みフォルダパス』の初期値には、「01_処理済み」フォルダの絶対パスを設定してください。

移動させたいエクセルファイルと、移動させる先のフォルダを指定するだけでいいんですね。
シンプルで分かりやすいです!

あらっ

おっといけない、エクセルファイルがまだ開きっぱなしじゃったな。
手動で操作する時も同様じゃが、エクセルファイルを開いた状態で ファイルを移動したり名前を変えたり、といったことは出来ないのじゃ 。

先にエクセルファイルを閉じておく必要がある、と…。
それなら確か、ちょうどいいライブラリが!
以下のライブラリを追加します。
①【ライブラリ】>18_Excel関連>01_ファイル操作
・Excel操作(保存なしで閉じる)
①Excel操作(保存なしで閉じる)
ファイル名は、変数『処理対象ファイルパス』を選択します。
実行結果は、変数『実行結果』を設定します。
動作確認をして、エクセルファイルが処理済みフォルダへ移動されているか確認しましょう。
・実行前→実行後

よし、ちゃんと出来ていますね。

さすがロータス君、何だかんだ成長してるんじゃのう。
これなら、もう一段階レベルを上げてもよさそうじゃな。

えっ、まだ何かあるんですか?

これまでのシナリオは、全て「正常に動作した場合」を想定した動きじゃ。
何かエラーが発生したら、そのまま止まってしまう。
だが、WinActor道場の黒帯を巻きたいのであれば、「エラーが起きた時を想定した対処」も 組み込む必要があるぞ!

な、なんだってーー!
⑥処理失敗したエクセルファイルを『確認依頼フォルダ』に移動
シナリオで何かエラーが発生した時、何も対処していなければWinActorはそのまま停止した状態になります。
人が確認しに行かなければ、何日も止まったまま、なんて事態にもなりかねません。
エラーを全てカバーすることは難しいですが、想定できるエラーは対処を考えておきましょう。
ここでは、「データ転記に失敗した」というエラーが発生した時の対処を組み込んでいきます。
対処方法としては、データ転記が出来なかったエクセルファイルを、「確認依頼フォルダ」に振り分けます。
エラー専用のフォルダに振り分けておけば、後から人が対応する時にも分かりやすいですよね。
あえてエラーを発生させるために、エラー発生用のエクセルファイルを用意しています。
こちらを未処理フォルダに格納してください。
・未処理フォルダにエラー発生用ファイルを格納
この状態でシナリオを実行すると、サブルーチングループ「基本情報を転記」において、下記のエラーが発生します。
ファイル名からデータを抽出する時に、ファイル名をアンダーバーで区切る処理を入れているからです。
「エラー時の動作確認用ファイル.xlsx」にはアンダーバーが無いので、区切るものがなくエラーになってしまうのです。
では一度シナリオを停止させて、このようなエラーにも対処できるよう処理を追加しましょう。
以下のノードを使用します。
①【ノード】>フロー
・例外処理
シナリオの中にあるライブラリ「先頭ファイルの取得」の下に、例外処理グループを配置してください。
シナリオの中にある、「基本情報を転記」~「ファイル移動」までのライブラリを、
例外処理グループの正常系の中にドラッグアンドドロップで移動します。
「例外処理」は、正常系の中で何かエラーが発生すると、正常系の処理を中断して、異常系の処理を行います。

詳しくは第10回WinActor塾を確認じゃ!

この状態でもう一度シナリオを実行してみてください。
今度はエラー発生のポップアップが表示されずに、 シナリオが終了するはずです。

それではここに、エラー発生時のエクセルファイルを「確認依頼」フォルダへ移動させる処理を追加するぞ。
使用するライブラリは、「処理済み」フォルダへ移動させる時に使った『ファイル移動』じゃ。
ロータス君、『ファイル移動』はどこに配置したらよいかね?

エラーが発生すると、例外処理の異常系へ遷移するんですよね。
では、異常系の中に配置でしょうか?

正解じゃ!
動作確認をしてみましょう。
以下のように、「未処理」フォルダから「確認依頼」フォルダへ移動しましたか?
・実行前→実行後

ふう、これで一段落じゃな。

あれ?博士、ちょっと待ってください。

何か分からないことでもあったかね?

今作成したエラー発生時の対処って、"基本情報を転記"… つまり、エクセルファイルを開く前の処理で発生するエラーに対するものですよね?

これ、"POS取引履歴を転記"の時にエラーが起きたら、エクセルファイルは開いたままなので、
「確認依頼」フォルダへ移動時にまたエラーになってしまうのでは?

言われてみれば、そうじゃな!
そこに気づくとは流石じゃロータス君!
ロータス君の一大発見により、もう少しシナリオを修正する必要がありそうです。
対処としては、例外処理グループの中に、更に例外処理グループを入れましょう。
例外処理は入れ子構造にすることも可能なのです。
・先ほどの例外処理グループ(例外①)の異常系に、もう一つ例外処理グループ(例外②)を配置します。
・例外①の異常系に置いていた「ファイル移動」を、例外②の正常系、異常系両方に配置します。
・例外①の正常系に置いていた「Excel操作(保存なしで閉じる)」を例外②の異常系にコピーして配置します。
これにより、エクセルファイルの状態による例外処理時のエラーも回避できるようになりました。

ううん、こういったことを考えると、他にもまた何らかの原因で
例外処理の異常系でエラーが起きてしまうんじゃと心配になります。

そうじゃのう、力業じゃが、さらにもう一つ例外処理を加える手もあるぞ。
これはシナリオ全体を含める例外処理じゃ。

この作りだと、シナリオの中のどこでエラーが起きたとしても、一番外側の例外処理で拾うことができる。
ここの異常系に配置しているライブラリ「メール送信」でエラーが起きない限りは、
とりあえず何かしらのエラーは検知できるぞ!

最後の砦ですね!

業務で本格的に運用するなら、これぐらいがっしりとエラー回避策を固めてもよいかもしれないの。
ただ、今回の道場では、この後の説明が分かりづらくなってしまうので
この最後の砦は一旦考えないで大丈夫じゃ。

この後の説明…
博士、今日はデータ転記も送信まで済ませましたし、 フォルダ移動もできましたよね。
これで完成ではないのですか?

前にも似たようなやり取りをしたことがあるような。
最初、未処理フォルダにはファイルが何個あった?

Oh…エクセルファイルも複数ありましたね。これ、エクセルファイル1件ごとにシナリオを実行するのはどうでしょう?

エクセルファイルが少なければそれもよいかもしれんが、ロータス電機は大企業じゃからな。
この未処理フォルダに100件以上ファイルが存在する可能性もあるぞ。

うっ… では次回は、複数ファイルの連続転記といったところですかね。

分かっておるではないか。 だが、次回でこのシリーズは最終回の予定じゃ!
ラスト1回、頑張るぞ!

押忍!
3.本日のシナリオまとめ
博士、ロータス君、お疲れ様です。
シナリオを実行して、社内システムへのデータ転記、及びエクセルファイルの正しいフォルダへの移動が できていれば本日の道場は完璧です!
関連記事こちらの記事も合わせてどうぞ。
2021.07.02