【UiPath Apps】新しいWebアプリプロジェクトでワークフローとアプリを簡単連携！

UiPath Appsが今回のアップデートからStudio Webの画面からも作成できるようになりました！Web アプリ プロジェクトという名前での登場です。この機能を利用することでアプリとワークフローの連携が非常に簡単にできるようになりました。

今回はこのWebアプリプロジェクトで、DataServiceではなくExcelをデータテーブルにしたアプリを作ってみようと思います。

https://docs.uipath.com/ja/studio-web/automation-cloud/latest/user-guide/apps-in-studio-web


<H2>今回作成するもの</H2>
アプリ上で郵便番号を入力すると住所を返すシンプルなアプリを作成します。

<H2>事前準備</H2>

1. 郵便局のサイトから郵便番号と住所がマッピングされたCSVデータをダウンロード
2. CSVファイルをAutomation Cloudのストレージバケット上にアップロード
:::note warn
ダウンロードしてきたCSVが文字化けする場合にはCSV UTF-8 (コンマ区切り)(*.csv)で保存すると解決する場合があります
:::

形式をそろえたファイルは以下に格納しているので、検証用でお使いください。
https://drive.google.com/drive/folders/1mufFmUpBOqT5YKr6Pt4zcveL9NP4SgGL?usp=sharing


<H2>表示画面の編集</H2>

<H4>1. Studio Webの画面からWebアプリプロジェクトを作成</H4>
Stuio Webを開き、[新しいプロジェクト] から[新しいWebアプリプロジェクト] を選択します。AppsではなくStudio Webの画面からプロジェクトを作成することに注意です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/796751ec-365b-849e-12e3-ef328b887ee3.png)

<H4>2. テンプレート画面を選択、編集</H4>
今回は画面はテンプレートの[フォームD]を利用します。アプリの表示名を変更してZipの項目と画面下部にあるSubmitボタン以外は削除します。下のスクショではそれぞれのフィールドの項目を日本語に変更したあとのものです。
不要の項目の削除は左の画面から対象の項目を選択したうえで右クリックすると削除のボタンが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/56cb3805-3ca4-32fb-dd70-23fde54c122c.png)

<H4>3. 検索結果の表示フィールドの配置</H4>
検索した値を表示するために画面左部の[ツールボックス]から[ラベル]を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/922a0f2e-ac80-1bd4-c56a-acc6758668f0.png)

これで画面の準備はできました。

<H2>オートメーションの構築</H2>

<H4>1. ボタンに対するオートメーションを作成</H4>
今回は検索ボタンを押したときに入力された郵便番号をキーとしてデータテーブルを検索し、住所を返すオートメーションを作成します。まずはじめに画面下部の<b>検索ボタンを選択した状態で、右側の[イベント]に移動</b>します。[イベント]には[オートメーションを定義]というボタンがあるのでクリックします。

:::note info
Webアプリプロジェクトではオートメーションを各ボタンのイベントごとに作成することができます。例えば編集グリッドだと行の選択時、行の追加時、行の変更時、行の削除時の4つのイベントがあり、それぞれにオートメーションを作成することができます。
:::

<H4>2. ダウンロードしてきたCSVを読み込む</H4>
最初にストレージバケット上にあげたファイルをダウンロードします。
プラスボタンを押すと追加するアクティビティを選択できるので[ストレージファイルをダウンロード]のアクティビティを選択し配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/9ca2dcb5-5022-04c9-e3d0-e9695b5f99fd.png)

作成したストレージバケットの情報をもとに各項目を埋めます。下の水色の四角で囲まれた[ファイル]の項目は自動で設定されるので変更の必要性はありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/3a519a69-fab5-049b-a5d6-9addba5c4923.png)

同様に[CSVを読み込みアクティビティ]を配置します。
[読み込み元リソースファイル]にはストレージバケットからダウンロードしてきた[ファイル]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/c81a570a-5754-b0d9-57e2-d5972462b806.png)

[先頭行をヘッダーとする]の項目はオフにしてデータの読み込みは完了です。読み込んだ値は[出力先]という自動で作成された変数にデータテーブル型として格納されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/b80e74d0-da39-f7a1-8480-c608067ecc41.png)

<H4>3. データテーブルを検索する郵便番号でフィルタ</H4>
[データテーブルをフィルターアクティビティ]を追加し、データテーブルには[出力先]を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/494d4ce3-0616-1483-c17d-ee80cb2255e2.png)

フィルタの条件を作るために式エディターを開きます。[出力先]の1列目に郵便番号が入っているので、フィルタ条件の左辺を<b>出力先.Columns(0)</b>とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/6c950d7b-70af-a1e8-9976-0650c27a8404.png)


:::note info
式エディターの下部にあるAutopilotの機能を利用することで、自然言語でも同様の式を生成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/9abacdea-ebaf-ba86-77e2-20a6aed76464.png)
:::

右辺は画面上で入力した値をとります。変数を使用からZipの中にあるValueを選択してください。これは画面上のどこのパーツで入力された値を取得するかを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/b5465384-62b1-5e83-ed12-d9993bce3f90.png)

最後にフィルタされたデータのみが残るように設定を変更します。デフォルトは削除する設定になっているので、[一致する要素のみを保持]に変更することを忘れないようにしてください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/d1aa0429-4789-4d14-7533-75e322fbfccb.png)


<H4>4. 出力用の変数と画面の設定</H4>
フィルタされて抽出された行から住所を取り出します。下の図のようにフィルタした結果は行で返されているので、直接、住所を取得することができません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/f1716ccc-9e89-178c-ff3a-8833e501f9b7.png)

住所を取得する前に、抽出されたデータを格納するための変数を作ります。
画面左にある[アプリの変数]のプラスボタンから[新しい変数]を作成します。変数名は自由で問題ありません。型はテキストに指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/cfa8d2ed-bb46-99ed-cc2f-d98dd818d0ba.png)


[変数の値を設定]のアクティビティを追加し、[変数]の項目には先ほど作成した変数を入れます。[変数を使用]から探す場合だとAppVariableという項目の下に出てくることに注意です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/06a59e87-0293-eb7b-0225-d78d9871e8a7.png)

[設定する値]の項目は式エディターを開いて編集します。変数を挿入から、フィルターしたデータの[最初の行]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/53d69cd3-6ee6-ca9c-1e5d-ff8d3dc0a0fb.png)

今回は3列目の値が欲しいので、<b>最初の行(2).ToString</b>としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/39859259-da0f-c32b-94d4-280025d8d9d6.png)


これでオートメーション側の設定は完了です。最後にページの編集に戻り、ラベルの値として先ほど作った変数を追加したら完成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/5b6492f6-2650-bdb5-b11c-4683c2b35fbb.png)


<H2>実行確認</H2>
郵便番号をいれて検索すると2，3秒して出力されました！
今回はボタンを押すたびにExcelを参照しているので時間はかかりますがページを読み込んだ時にだけ参照するように作りを変更すればもっと早くなりそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575031/03d020aa-f41e-2e1d-e5ab-544f515dd9f4.png)

※もとのCSVのままだと区までしかでないので、CSVを加工するとより詳細な情報が出せるようになります。

<H2>使ってみた感想</H2>

使ってみた率直な感想としては、オートメーションとの連携が1つの画面から設定できるので、複雑な処理を手軽に構築できるようになったなという感想です。

既存のイベントルールとの比較すると、イベントルールでは変数に値を設定したり、IntegrationServiceの機能を呼び出すことができましたが、デフォルトで設定されているルールの数は多くなく物足りなさを感じていました。既存Appsからでもオートメーションを呼び出すことで複雑な処理も実現できていましたが、その場合はあらかじめ別にオートメーションを作成しておく必要性があり煩わしさはありました。

処理の速度面の検討は次の記事で言及してみようと思います。

みなさんもぜひ試してみてください！