最近、UiPath を弄らされています
余り使い処を見付けられなくて、自分のメールを処理してみました
UiPath を知り合いの代理店さんが扱うとの事なので、ちょっと先回りして調べて見ろ!という指令で弄ってみました
実際、代理店さんが扱いを始めると発表しただけで、まだまだ WinActor の方がメインで、UiPath はまだまだ情報が少ないそうです
ですが、取り敢えず弄って見ろ!との事ですので弄ってます…
代理店さんでの扱いがまだですので、Community Edition を自分で拾ってきて評価中です…
Pentaho とかは、十年くらい?前(結構前で覚えていない)に弄った事があるので、似たような物か?と思ってましたけど、テストツールの方が近いかな…
結構、最初がつらいよね…
UiPath…
できるシリーズの本を買ってきて、読んでみました..
設計ツールの UiPath Studio…
GUI 化してるんだけど、ちょっと扱いにくいかなぁ…
入力補完とかしてくれるんだけど、それに慣れるまでが結構つらい..
でも、何とかなりました
最初に”変数”を作るって言う作業に慣れれば….
最近、変数宣言してから組み始めるって言う系統が多くないので、ちょっと戸惑ったけど、一応、COBOL の修行もした世代なので、あの苦労を思い出せばなんて事ないです..
UiPath … どうやって書き残せば良いのか..
IMAP メールメッセージを取得
最初に、GetIMAPMailMessage で IMAP の設定をして、メッセージを取り込みます
多分、上限数で指定しただけ、ローカルに持ってきています
それと、「開封済みにする」にチェックしなければ、未読のままです
「ホスト」は
「サーバー」にさくらインターネットのレンタルサーバー
「ポート」と「メールフォルダー」を適宜指定
「ログオン」は
「メール」にメアドと、「パスワード」を引用符で囲んで指定します
で、予め用意しておいた
Message へ、「出力」「メッセージ」で格納するような指定をします
この”変数の型”って言うのが曲者で、Google 先生に教えてもらったブログなどを一所懸命眺めて調べでください
どうやって、この変数の型を見付ければ良いのかは、コミュニティーエディションのユーザーでは敷居が高いですね..
VB ユーザーだったら解るのだろうか..
繰り返し(コレクションの各要素)
取り込んだメールデータはコレクション形式なので、繰り返し処理 (For Each)処理して行きます
「コレクション値」は、処理する Message ですね..
この「TypeArgument」は、変数 Message の型の System.Net.Mail.MaillMessage を指定するようです
で、この ForEach 処理の本体へ処理を追加していきます
コレクションの処理 本体
ForEach のシーケンスはこんな感じです
※ こう言うのを関数化出来ないんでしょうかね…
今回のコレクションの処理はこんな感じです
- メールのヘッダーから送信日時を持って来る
- メールの BODY を取り出しておく
- 送信日時を日付形式に変換する
- 格納フォルダー名を送信日時から用意する
- 添付ファイルを格納
- 本分をテキストファイルとして保存
- テキストファイルを格納フォルダーへ移動
扱うメールはすべて添付の画像ファイルが一枚あります
本分には画像に関する説明が書かれていますのであわせて保存して詳細を確認出来るようにしています
今回、処理したメールはなにもしていません
この後、もしくは、シーケンスの前後に、メールを処理する機能を用意した方が良いかもしれませんね…
代入 送信日時を処理
最初に、メール形式の日付文字列を格納する変数を Assign で、用意した String 型へ格納します
スコープはシーケンス内で大丈夫です
ここでは tempDate って言うのに格納しておきます
メールのヘッダー情報は xxxx.Headers(“XXXXXX”).ToString() で文字列として取り出せますので、変数に Assign します
ヘッダーはこんな感じで格納されていますので、 Headers() の引数で指定すれば取り込めます
※ MailMessage で、ヘッダー関連はコレクション名だけが確認できますね..
Headers=HeaderCollection(15)
{
"Return-Path",
"Received",
"X-Virus-Status",
"Date",
"Message-ID",
"From",
"User-Agent",
"X-Accept-Language",
"MIME-Version",
"To",
"Reply-To",
"Subject",
"Uid",
"Folder",
"PlainText"
},
代入 メール本文
メールの本文は Body に格納されていますので xxxx.Body.ToString で取り込んでおきます
条件分岐 日付の処理
これ、解んないので随分検索かけました..
フォーラムのこれを参照しましたが..
https://forum.uipath.com/t/st01ma0004-outlook/90266
分岐条件は、
tempDate.Contains(“JST”) で、文が JST か?で処理を分岐しています
Then (JST がある場合)
MailDate = DateTime.ParseExact(tempDate,"ddd, d MMM yyyy HH:mm:ss K (JST)",Nothing)
Else (無い場合)
MailDate = DateTime.Parse(tempDate)
です
UTC とか CST とか、で来るメールがあるんだけど….
あ、無指定のメールも来てた….
代入 フォルダー名の用意
格納するフォルダー名は 日付+時間で用意します
送信日時を DateTime 型にしましたので書式付きで文字化します
MailDate.ToString(“yyyyMMdd_hhmmss”)
20190319_112233 の様になりますね…
添付ファイルを保存
これは、メッセージにある SaveMailAttachements にプロパティーを設定すれば勝手に保存してくれます
このとき、用意してあるフォルダー名を指定すれば、ソコに添付ファイルを格納してくれます
テキストファイルを書き込む
メールの BODY をテキストファイルとして書き出します
WriteTextFile に用意した本文のテキスト形式を「入力」として指定します
エンコーディングは UTF を指定、
ファイル名は body.txt にしました
ファイルを移動
最後に、MoveFile で body.txt を添付を保存したフォルダーに移動します
MoveFile に元パスと保存先 を指定します
こんな感じで、メールを本文と添付を格納する処理を自動化できました
RPA って言うのはこう言う単純なのを文句言わずに処理するんでしょうねぇ..
あ!
UiPath 、コンソール読んだり、コマンドプロンプトの処理は苦手なようです
日本語が無ければ OCR で読めそうですが、日本語はダメでした
Linux のコマンドを処理して!みたいなのはちょっと無理みたい….
最後に
教訓
RPA で google 先生を扱うときは、キチンとお金を払わないと面倒な事に成ります
これに気付かないでガンガン検索かけていたら、ロボ扱いされました!
もちろん、ロボなので間違いないです
UiPath のページで配布している goole 先生の検索サンプルは、一日一回!見ても5ページまで!
キチンと、API 経由でデータを検索できる準備をしてから検索しましょうね!
..
あ、また、絵合わせのパズルだ!…
上手く正解できない….