【初心者向け】UiPathによるRPA実装27 条件分岐による、申請書ファイルが存在しない際の対応方法

前回、複数の申請書Excelファイルを扱えるよう、プログラムの機能拡張を行いました。

今回は逆に、申請書ファイルが1つも存在しない場合にプログラムが正しく処理を行えるよう、「条件分岐」という概念を用いて機能拡張を行っていきたいと思います。

<スポンサーリンク>

事象の確認と対応方針の検討

事象の確認

まずは、申請書フォルダ内にファイルが1つもない場合に現行のプログラムではどのような挙動を示すのか、プログラムを実際に走らせて確認してみましょう。

確かにエラーが発生しますね。エラーはRead text fileのところで発生しているようです。つまり、Read text fileでプロジェクトフォルダ内に生成されるはずの”expense.txt”を読みに行ったところ、元となる申請書が1つもないために”expense.txt”も生成されず、結果としてRead text fileが失敗する、というのがエラーの詳細のようです。

対応方針の検討

ではこの結果を踏まえてどのような対応を行っていくか、方針を検討しましょう。

まず考えられるのは、以前紹介したTry Catch Activityを使って、直接的に発生したExceptionに対する対応を行う方法ですね。

なお、Try Catch Activityについて忘れてしまった方は、以下の記事をご参照下さい。

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

また別の方法として、前回紹介した申請書ファイル名の取得のところでファイルの有無をチェックし、無い場合はそのままプログラムを終了するようにする、という対応方法も考えられます。

このように、ある条件に該当するかどうか(この場合は、申請書ファイルが存在するかどうか)により、その後の処理を変えることを「条件分岐」と言います

今回はせっかくですので、新しい概念である「条件分岐」を使って対応を実装しましょう。

対応の実装

使用する条件分岐の選定

さて、UiPathでは条件分岐を実装するためのActivityが大きく分けて2つあります。その2つとは、「Flow Decision」Activityと「If」Activityです。以下にそれぞれの概要をまとめていますが、基本的にMainワークフローの流れに大きな影響を及ぼす条件分岐はFlow Decisionを使い、細かい条件分岐はIfを用いるのが良いでしょう

Flow DecisionとIfの概要
Flow Decision 条件を判断する処理を1つのボックスで表現し、条件に応じた処理を別のボックスとして実装する方式。処理フローの概要がワークフロー上一目で把握できるというメリットがある。ただし、多すぎると逆に処理フローが複雑化して流れが見えにくくなる。
If 条件を判断する処理と、条件に応じた処理を1つのボックスで実装する方式。処理フローの概要を把握するには不向きであるが、Flow Decisionによるフロー複雑化を避けるために、細かい条件分岐はIfで実装するのが良い。

今回は、Flow Decisionを用いて実装を行っていきたいと思います。

条件分岐の実装

まず、ActivitiesペインからFlow Decisionを検索し、Mainワークフローの任意の場所にドラッグ&ドロップします。

続いて、条件判断の内容をPropertiesペインで設定します。

今回は、「申請書ファイル名取得」ボックスでファイル一覧を取得して配列に入れた際、ファイルが存在しないために配列の内容が空(配列の要素数がゼロ)かどうかで判断するのが良いでしょう。

配列の要素数は、「配列名.Length」という式で取得することができます。これを使うと、「配列の要素数がゼロではない(=申請書がある)」は、「fileList.Length <> 0」という形で表現できます。「<>」は≠を意味しています。

この式をFlow DecisionのMisc-Condition Propertyに入力すると、条件の設定は完了です。

ワークフローの整理

では、Flow Decisionボックスをワークフローに組み込み、処理を完成させましょう。

現在のフローでは、経費申請アプリを立ち上げ、ログインした後にファイル一覧を取得していますが、ファイルが存在しない場合はアプリ立ち上げを行うのも無駄です。そのため、流れとしては、「ファイル一覧取得」→「ファイル有無チェック(Flow Decision)」→「有る場合は「経費App起動」以降の処理を実施、無い場合は何もしない」とします

ワークフローへの組み込みは、これらのボックスを線でつなぐだけですが、Flow Decisionは設定した条件を満たす場合とそうでない場合の2本の線を出すことができます。

試しにFlow Decisionボックスにマウスカーソルを当ててみて下さい。ボックスの両サイドにTrueとFalseの2つの小ボックスが表示されます。もしも条件を満たす場合には、Trueから矢印を引き、逆に満たさない場合はFalseで後続の処理に矢印を引く、というのが、Flow Decisionのワークフローへの組み込み方です。

今回はTrueの場合のみアプリ起動につなぎます。そして、Falseの場合は何も処理を行わないため、矢印を引かないことにします。前述の流れも意識しながら、それぞれのボックスを線でつなぎましょう。

ここでもうひと手間かけてみましょう。

先ほど、Flow Decisionは処理フローを一目で把握することができると書きました。しかしながら、現在Flow Decisionからの矢印には「True」というラベルがついているだけで、どのような場合にTrueとなり後続の処理を行うのかが把握できません

これを改善するためにはFlow DecisionのTrueLabel Propertyにより、ラベルの名称を変更します。今回は「申請書が存在する」というラベルにします。

すると、Flow Decisionのラベルが、指定した表現に変更されます。表現が長い場合は文字が切れてしまいますが、マウスカーソルをラベルに当てると、全文を表示することができます。

テスト実行

それでは、修正したプログラムが正しく動くか、プログラムを実行して確認してみましょう。

まずは申請書フォルダにファイルがない状態で実行してみます。実行後、何も起こらずUiPathウインドウに戻ったら、処理は正しく動いています。

続いて、申請書フォルダにファイルがある場合も前回から引き続き正しく動作するか、確認しておきましょう。アプリフォルダの”expense.txt”にフォルダ内の申請書内容が追記されればプログラム修正は完了です。

終わりに

今回は条件分岐の1つであるFlow Decisionを用いて、申請書ファイルの有無に応じて処理を変える方法を紹介しました。ただ、折角ですので、Ifの使い方も紹介したいところです。

ということで、次回はIfを用いて簡単な機能追加を行いたいと思います。