【初心者向け】UiPathによるRPA実装25 UiPathにおける例外処理とファイルへの追記方法

前回の記事では、経費申請アプリケーションへの登録結果を正しいフォルダに生成するために、UiPathにおけるファイルの移動方法について紹介しました。

ところが、移動先に既にファイルが存在する場合には、エラーが発生してしまうという問題が見つかりました。

そこで今回の記事では、こういった例外(Exception)発生時の対応方法と、既にファイルが存在する場合、そのファイルに情報を追記する方法について紹介したいと思います。

<スポンサーリンク>

例外への対応

例外(Exception)とは

まず、Exceptionをご存知ない方のために、Exceptionとは何か説明しておきたいと思います。

プログラム実行中に、プログラムでは処理できない事象が発生することがあります。この事象のことを「Exception」と言います。

Exceptionには色々種類があり、例えば、本来数字データを入力しなければならないActivityにアルファベットを渡してしまうとArgumentExceptionというものが発生しますし、今回のようにファイルをコピーまたは移動しようとした時に、移動先にすでにファイルが存在する場合にはIOExceptionというものが発生します。

Exceptionが発生した場合、何もしなければそこでプログラムは異常終了してしまいますが、UiPathではExceptionが発生した場合に、それを踏まえて正しい処理を指定するためのActivityが存在します。それが、「Try Catch」Activityです。

Try CatchによるException対応処理の追加

それではさっそく前回発生したExceptionへの対応処理を実装してみましょう。

まずはActivitiesペインよりTry Catch Activityを検索し、Mainワークフロー上の適当な位置にドラッグ&ドロップしておきます。

次に、追加されたTry Catchボックスをダブルクリックし、中身を確認してみましょう。

Try Catch Activityは大きく分けて3つのブロックから構成されています。

まず、Tryブロックには、通常の処理として実行したいActivityを入れます。今回はファイルを移動するMove file Activityが該当します。そして、このブロックでExceptionが発生した場合、次のCatchesブロックに制御が移ります。

続くCatchesブロックでは、TryブロックでExceptionが発生した時に実行したい処理を入れます。このブロックには対応したいExceptionの種類を指定するのですが、これにより、Exceptionの種類毎に異なる処理を入れることができます。

そして、最後のFinallyブロックには、Exceptionが発生した場合でもしなかった場合でも実行したい、共通的な処理を入れます。Exceptionが発生する場合、このブロックの処理はCatchesブロックの処理実施後に実行されます。

説明が長くなりましたが、このTry Catchブロックの中身を埋めてみましょう。

まずはMainワークフローに戻り、Move file Activityを切り取ります。切り取りは、このActivityを選択した状態で「Ctrlキー + x」を押すのが簡単です。そして、Try CatchボックスのTryブロックにコピーしたActivityを貼り付けて下さい。これについても、Tryブロックを選択した上で、「Ctrlキー + v」により簡単に貼り付けることができます。

続いて、Catchesブロックの設定に移ります。

まずは「Add new catch」と書かれているところをクリックして下さい。すると、対応したいExceptionを指定するためのプルダウンが表示されます。今回発生を想定しているのはIOExceptionですので、プルダウンから「System.IO.IOExeption」選択します。

なおプルダウンには「System.Exception」というものがありますが、これは「全ての種類のException」という意味です。Tryブロックで複数種類のExceptionが発生し得る場合で、どのExceptionに対しても対応処理が同じ場合にはこれを選択するのが良いでしょう。

さて、ここでプルダウン以外の任意の場所をクリックすると、指定したException発生時の処理を入れる領域が表示されます。この部分の対応については後ほど説明します。

最後のFinallyブロックですが、今回共通的な処理は特に想定していませんので、ブランクのままにしておきます。

既存ファイルへの追記処理

それでは、Catchesブロックの中を埋めて、Exceptionへの対応処理を完成させましょう。

今回、Exception発生時、つまり、経費申請アプリケーションへの入力結果である”expense.txt”が既に移動先フォルダに存在する場合、やりたいことは「既存ファイルに新しくアプリケーションに登録された内容を追記する」ということです。

これを具体的な手順に落とし込むと以下のようになります。

①新しく生成された”expense.txt”ファイルの内容を読み込んで、Variableに保存する。

②移動先のフォルダにある既存の”expense.txt”に、Variableの内容を追記する。

③①で生成された”expense.txt”を削除する。

順に処理を追加していきましょう。

①テキストファイルの読み込み

新しく生成された”expense.txt”ファイルの内容を読み込むには、「Read text file」Activityを使います。このActivityの使い方の詳細については以下の記事でも触れていますので、必要に応じてご参照下さい。

これまで「google検索結果を取得して、その結果を上司に報告する」というテーマのもと、自動化処理の方法を説明してきました。前々回までの記事...

さて、今回はまず、ActivitiesペインからRead text file ActivityをCatchesブロック内にドラッグ&ドロップします。

続いてこのActivityの設定に移ります。

まずはボックス内に読み込むテキストファイルを指定します。ここでは、ファイルがプロジェクトフォルダ内に生成されていることから、単に”expense.txt”とだけ指定します。

続いて、読み取ったファイル内容を保存するVariableを作成します。PropertiesペインのOutput-Contents欄を選択し、「Ctrlキー + k」の後に続けてVariable名を指定しましょう。ここでは、textContentsという名称にします。なお、読み込むファイルの内容はShift-JISでエンコーディングされていますので、File-Encoding欄には”Shift-JIS”と入力しておきます。

ちなみに、エンコーディングについても以下の記事で簡単に説明していますので、必要に応じてご参照下さい。

これまで「google検索結果を取得して、その結果を上司に報告する」というテーマのもと、自動化処理の方法を説明してきました。前々回までの記事...

②既存テキストファイルへの追記

続いて、既存ファイルへの追記処理を追加します。これには、「Append line」というActivityを使います。

ActivitiesペインよりこのActivityを検索し、Read text fileボックスの下にドラッグ&ドロップしましょう。

このActivityについては、3つの項目を設定する必要があります。

まずはボックス内の上の欄に、追記対象となるファイル名を入れます。このファイルはプロジェクトフォルダ外にあるため、絶対パスで記載する必要があります。

続けて、ボックス内の下の欄に追記したい内容を入れます。ここでは先ほど作成したtextContensを指定します。

さらに、書き込む文字列のエンコーディング方式がShift-JISですので、PropertiesペインのFile-Encoding欄に”Shift-JIS”と入力しましょう。

③ファイルの削除

最後に、プロジェクトフォルダ内に生成されたファイルを削除する処理を追加します。これには、「Delete」Activityを使います。

このActivityをActivitiesペインから追加したら、PropertiesペインのFile-Path欄に削除したいファイル名を記入します。ここでは、対象のファイルがプロジェクトフォルダ内にあることから、絶対パスではなく単純に”expense.txt”とファイル名のみを入力することになります。

これでCatchesブロックの設定は完了です。あとはMainワークフローに戻って、Try Catchボックスの名称を分かりやすいものに修正して、上のAppクローズボックスと矢印でつなぎましょう。名称について、ここでは「結果ファイル更新」というものにしています。

テスト実行

それではここまで組み立てた処理が意図した通りに動くか、試しに実行してみましょう。

実行する際に、プロジェクトフォルダと経費申請アプリフォルダに”expense.txt”が残っている方は、削除した上で実行して下さい

この状態で実行すると、Exceptionは発生しないはずで、期待される動作は「経費申請アプリフォルダに”expense.txt”というファイルが生成され、中にはExcel申請書の内容が記載されている」というものですね。

正しく実行されましたでしょうか。

さて、この状態でもう一度処理を実行しましょう。

現在申請書フォルダには、登録済みの申請書がまだ残っています。それも踏まえると今回期待される動作は、Exceptionが発生し、その結果「経費申請アプリフォルダ内の既存の”expense.txt”ファイルに、同じ申請書の内容が追記される」ですね。

きちんとExceptionの対応が行われ、正しく動作しましたでしょうか。一応、Delete Activityが機能しているか、プロジェクトフォルダ内を見て、”expense.txt”が存在しないことも確認しておいて下さい。

終わりに

今回は、Exception発生時の対応方法と、テキストファイルへの追記方法について説明しました。

次回は、自動化プログラムの機能を拡張してみましょう。具体的には、複数の申請ファイルがある場合に、それらをまとめて経費申請アプリケーションに登録するという機能を追加したいと思います。