##はじめに
UiPathは既存アクティビティでも多くの事ができますが、既存アクティビティで出来ない操作をしたい場合、あるモノを読むことで実現できたりします。UiPathをもっと有効活用したいのであればこれを読むことでより深いことができます。この記事は既存のアクティビティで出来ない事をするために僕が行っている事を具体例で説明しています。説明に不明点があれば是非コメントいただければと思います。
##UiPathのアクティビティで出来ない事、メールの添付ファイル名の取得
僕の知る限り、UiPathにはメールに添付されているファイルをダウンロードすることはできても、直接その名前を取得するアクティビティはありません。もしかしたらあるかもしれませんがないという体で話を進めさせていただきます。
そのような通常はできないことも、「マイクロソフトの.NETの仕様書を読むこと」で実現できます。
##マイクロソフトの.NETの仕様書とは?
https://docs.microsoft.com/ja-jp/dotnet/api/?view=netframework-4.8
このページの事です。
UiPathで使われる型は基本的には全て.NETの型になります。
なので.NETの仕様書を読むことでほしいデータを欲しい形に加工する方法を学んだり、
メール型から好きな情報を取り出す方法を学ぶ事ができます。
仕様書は基本的には今関心がある型の詳しい情報を調べるために読みます。
##仕様書を読み、既存アクティビティで出来ない事をする
今回やることはメールの添付ファイル名の取得ですが、そのためにまずはGet Mail Activityで取得されるデータの型を確認します。
下記の画像の通り、取得される型はMail Message型のListです。
Listというのは基本的には配列と同じものです。配列の定義は下記をよければ参考にしてください。
https://wa3.i-3-i.info/word11924.html
ちなみにList, Array、Collectionと呼ばれるものは全てFor Eachアクティビティで一つずつ取り出す事ができます。For Eachアクティビティを使用する場合格納されているデータの型をちゃんと確認し、For Eachアクティビティで定義する必要があります。
先ほどGet Mailアクティビティで取得される型はMailMessage型であることが分かったのでその仕様を調べます。
先ほど紹介したページからも、もちろん探せますが
Googleで「.net クラス名」で検索しても出てきます。
今回は「.net mailmessage」で調べました。
下記ページが見つかりました。
https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailmessage?view=netframework-4.8
もし英語のページが表示されてしまった場合は日本語化できます。一番下までスクロールし English(United States)をクリックします。その後、日本語を選択してください。ページが日本になりましたね。
このページをctrl+fでページ内検索をし、「添付ファイル」で検索すると添付ファイルを扱うプロパティ、Attachmentsがあることがわかります。
AttachmentsをクリックするとAttachmentsの正体はAttachmentCollectionクラスであることがわかります。
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail.attachmentcollection?view=netframework-4.8
Collectionなのはわかりますが、なんのCollectionなのか確認する必要があります。
名前から推測する限りはAttachmentのCollectionですが、断言できないので、サンプルコードを確認するとAttachmentをこの型に格納しているので、Collectionの一つ一つがAttachmentであるとわかります。
Attachmentの定義は下記になります。左側のスクロールバーですぐ近くにありました。
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail.attachment?view=netframework-4.8
このドキュメントを読むと、AttachmentのNameプロパティにファイル名が入っていることがわかります。これで必要な情報が揃いました。
##各メールの添付ファイルのファイル名を取得するUiPathワークフロー
各メールの添付ファイル名を取得するには
まずMailMessage型のリストからMailMessage型を一つずつ取り出し、
MailMessage.Attachmentsを使いAttachment型を一つずつ取り出し、
そのAttachment.Nameプロパティ(String型)からファイル名を取得する必要があります。
一つずつ取り出すのはFor Eachアクティビティで取り出せます。
これを実際に実装したUiPathプロジェクトをGitHubにアップロードしたので、よければ参照してください。
https://github.com/YoshiAkiyama/AttachmentFileNameGetter
ちなみに「MailMessage」型は複数あります。正解がどれか確認するには
##最後に
マイクロソフトの公式ドキュメントを読むという発想がなかった人、
また、発想はあったけれども、やり方を知らなかった人にとってこの記事が助けになれば幸いです。