UiPath_辞書型のキー値があるか探す方法とは？

## 注意
今回使用するUiPathはCommunity Edition、バージョンは2021.10版を使用しています。
もしかしたら似たような内容で誰かが投稿しているかもしれませんが、私の備忘録という意味で記録しておこうと思います。

# 辞書型って簡単に言うと何なのでしょうか？
辞書型は辞書を引く時のように、「この鍵(キー値)を探すとある値が出てくるよ」というものです。

例えば、英語の単語帳を思い出してみましょう。
英単語それぞれに主な意味が書いていますよね(ああ懐かしい)。
例えば、「Love」という単語に対し、意味に「愛」と書いていたとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/428e6727-8022-1ddd-17e3-41ea95768c53.png)
この場合、「Love」いう単語から「愛」という意味が得られるように「あるキー値がわかることで、ある値を取得できるよ」というものが辞書型と思っていただければと思います。

UiPathで設定する場合はString、intのように使用頻度が高くない(？)ので「Browse for Types...」から選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ce74d9be-51d5-9b0b-7dfe-5f468fa508b8.png)

## どんなことをするの？
今回は「名前」「都道府県」の表から変数に辞書型を設定、「名前」列に<b>ある値</b>、<b>ない値</b>が来たらどう反応するのかを見ていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/e612e25c-abfc-83fc-b98a-6db02291f9d5.png)
【変数】
datPref：Datatable型、上記表のデータテーブルを格納
dicPrefList：Dictionary型、datPrefで設定した値達にキー値とValue値を設定します。(キー値、Value値はどちらもStirng型にします)
blnKey：Boolean型、キー値の有無を確認する為の変数。


## 準備
今回は「Microsoft.Activities.Extensions」というアクティビティをインストールして使います。
このアクティビティの説明を詳細を書いているサイトが見つからなかったのですが、Extensions=拡張機能ってことですね。。
(情報があったら教えてください～)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f811b53b-0f47-e1e0-4517-d90b0337c271.png)
「Official」を選択して、検索バーに「microsoft」と入力すると早く見つかりますよ。
あとはインストールしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/2cef8d62-bf76-4024-e8dd-f03713b02ef9.png)

## やってみましょう
※赤丸はBreakpointでつけただけで、特に意味はありません(外し忘れ)。
名前と都道府県の値が入ったデータ(都道府県リストとします)をデータテーブルへ格納後、辞書型を設定してキー値の有無を判定するというものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/a7ea4e14-1c8b-626b-668a-847c7b95a5e5.png)
注目なのは赤点線で記載のアクティビティです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/545e5410-fe3d-667e-ece5-030e700b5c9d.png)

これは、先ほどインストールした「Microsoft.Activities.Extensions」にある「Key Exists In Dictionary」というアクティビティを使用します。
このアクティビティはキー値の有無を確認するためのアクティビティで、出力はBoolean型となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ec742788-f1ec-7f4c-60c4-6a031bddb18b.png)

使用時、アクティビティ使用時に以下の画面が出ますので変数で設定したキー値とValueの変数タイプ(今回はキー値、Value値ともにString)と同じに設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/9cb9f289-0f8e-e4f3-1351-ff9cbea169d8.png)


まずは「あああ」のキー値があるか確認します。
キー値に「あああ」を入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/cbae924c-c3ef-683a-0c72-0fea56766f58.png)

実行結果は...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/4e1b3efb-bf5f-dfe4-b5fe-da38e87e88be.png)
「はい、あります」というログが出ている=BooleanはTrueと判断したことになるので、キー値は<b>あった</b>ということがわかりました。
では、存在しないキー値「かかか」で設定して実行しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/092ef747-e0c5-a785-99fc-da78398cdfe8.png)

実行結果は...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/601369f5-2b9a-547f-de70-6fd675d0cc9a.png)
「いいえ、ありません」=BooleanはFalseと判断したことになるので、キー値は<b>なかった</b>ということがわかりました。
そうですね、「名前」列は「あああ」～「おおお」の5個しかないので。

## 【まとめ】これって何か役に立つの？
キー値の有無を調べるケースはそんなに多くないかもしれません。
例えばフローを大きく変えたくはないけど、古いファイルと新しいファイルを同時に運用したいときに新しい設定ファイルに新しいキー値ができたとします。
その新しく設定したキー値があるかどうかによってそれ以降は古いファイルの設定が適用、もしくは新しい設定ファイルでの適用を設定する等が考えられます。
ちなみにキー値がない場合、以下のようにエラーが出ます。！
(これはログで出力使用した場合です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/a0ce3651-a94f-5e73-a703-95e42ce20191.png)
上記を回避するためにこのアクティビティを使うのもいいかもしれませんね！
最後までご覧いただきありがとうございました！