UiPathで始めるRPA - 分岐とループ

# 分岐とループ

プログラム処理の基本である分岐とループはもちろんUiPathのロボットにおいてもサポートされています。ここでは簡単な例を使って分岐とループの作り方を見て行きましょう。

# フローチャートの分岐とループ

UiPathには複雑な処理を定義できるフローチャート（flowchart）と、比較的直線的な処理を定義するためのシーケンス（sequence）という2種類のワークフローがあります。まずフローチャートの場合から見て行きましょう。

Blankのプロジェクトを作ります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/381c4762-d193-9911-b00b-be4e6a9582d0.jpeg" width=50%>

はじめにFlowchartアクティビティを検索してドラッグアンドドロップします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/63d49230-7ef2-8d84-62ab-d3bf260911b0.png" width=50%>

ユーザーからの入力を受け付けられるInput Dialogアクティビティを検索してドラッグアンドドロップしましょう。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/9da879a1-1f42-338b-7366-7a8405158362.png" width=50%>

スタートノードからInput Dialogには矢印を引いて連結しておいてください。以後、フローチャートではアクティビティ同士がつながるように連結していってください。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/0c46b601-6b7c-1665-4038-578e458b872a.png" width=50%>

Input Dialogアクティビティの中をダブルクリックし、右のプロパティウィンドウからTitleとLabelにそれぞれ"うるう年判定"、"年: "と入力します。そう、うるう年判定するワークフローを作ります。これはUiPathのチュートリアルでも紹介されている例です。なお、文字列値を指定するときは必ずダブルクオーテーションで囲うのを忘れないようにしてください。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/530c2f0b-58ad-e884-c1d0-73e3935ee3ec.png" width=50%>

また、Input Dialogで入力した値はワークフローで定義する変数で受け取るようにします。下のVariablesタブをクリックし、yearという変数を宣言しましょう。型はInt32を指定してください。また、ScopeはFlowchartを指定してください。Input dialogにしてしまうとFlowchartからは認識されない変数になってしまいます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/d1cc81bb-a322-16f5-0cdc-b060e678301e.png" width=50%>

変数を宣言したら、再びInput Dialogアクティビティのプロパティウィンドウへ行き、Resultプロパティのエディットボックスにカーソルを合わせます。ここで「ye」と入力してみてください。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/1d88def4-29ec-515c-a76e-e86004c61942.png" width=50%>
Visual Studioのインテリセンスと同じようなウィンドウが開き、最初の候補として先ほど宣言した変数yearが表示されるので選びましょう。これで、入力された年をyearという変数で受け取れるようになりました。

ここで再びフローチャート全体の編集に戻るため、ウィンドウ上部にあるパスのFlowchartをクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/beb7b15d-06f7-ba2c-251e-35a2f122232e.png" width=50%>

次にFlow DecisionアクティビティとMessage Boxアクティビティを追加します。Flow Decisionはフローチャートにおける分岐処理のアクティビティです。Trueの足をMessage Boxに、Falseの足をInput Dialogに連結します。このような感じです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/6bef69d7-2307-5064-9643-13656bb720fa.png" width=50%>
つまり、うるう年が入力されるまで何度も入力しなければいけないフローを作ろうとしているのです。

それでは肝心な条件を設定しましょう。Flow Decisionをクリックし、conditionプロパティにyear mod 4 = 0と入力してください。これは4で割った余りが0であるかどうかという条件式です。UiPath Studioで指定する式はVB.NETの言語体系なので等号は==ではなく=で表現する点に注意してください。

TrueのときのMessage Boxを「うるう年です」と表示させるように設定したらワークフローは完成です。F5で実行してみましょう。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/b030fcba-c77e-03a0-19a6-2decb1b9fe57.png" width=50%>

<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/5dfc3a11-0a43-7419-80d5-08bdc10eef83.png" width=50%>

<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/8c44c531-e4ea-d1e6-a5c4-e73a59c24803.png" width=50%>

うまく動きましたか？

# シーケンスの分岐とループ

では次にざっとシーケンスの場合の分岐とループを見てみましょう。

もう一度Blankプロジェクトを作成し、まずInput Dialogアクティビティ、その下にIfアクティビティを追加します。IfアクティビティのThenとElseにはそれぞれ実行するアクティビティを入れられるのでMessage Boxをドラッグアンドドロップしましょう。year変数で入力を受け、IfアクティビティのConditionも先ほどと同様にyear mod 4 = 0とします。完成したシーケンスがこちらです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/b99331c5-e3f5-82e4-f4b2-bc72a287c62b.png" width=50%>

直線的な分岐処理なのでコンパクトで見やすいですね。次にループです。ここではDo Whileアクティビティという後から継続条件を判定するループを使います。まずDo Whileアクティビティを置き、中にInput Dialogを入れます。うるう年が入力されるまで何度も入力を求められるようにするので、ループを抜けたらMessage Boxで"うるう年です"と表示するようにしましょう。Conditionは先ほどとは異なりyear mod 4 <> 0と指定します。<>は不等号の意味です。つまり4で割り切れない間は継続するという条件をDo Whileアクティビティに対して指定しているのです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/184078/f38415be-c5cc-5dc8-ac96-a40aa0adefd7.png" width=50%>

以上、フローチャートとシーケンスにおける分岐とループの作り方を見て行きました。