RPA x AI-OCR x BIを連携したレポート業務の効率化②

え？まだExcelで作成したレポートを定期的にメールで連絡しているんですか？？
ということで、引き続きレポート業務の効率化の作成を行っていきます。
今回は、UiPathのメイン処理を作っていきます

前回はこちらをご覧ください

https://qiita.com/ManabuTech/items/352f1a93d74374228425


## デモ動画

実際に作成したデモはこちらをご覧ください。

<iframe width="1280" height="720" src="https://www.youtube.com/embed/Zm3b6sIz4UM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

https://youtu.be/Zm3b6sIz4UM

※実際に運用していないため、作成したワークフローにはバグや検討漏れ等がある可能性があります。


## 作成するもの

全体像がこちらです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/317d052b-52f4-9210-8480-bef272a5092e.png)

今回、こちらを作成していきます
- PCを持っていない人は紙でアンケートを行うが、AI-OCRで集計を行い、Action Center機能を用いて目視で最終確認を行う。

前々回：理想形を考える方法はこちらをご覧ください

https://qiita.com/ManabuTech/items/ac7a341b44b79b48cce3

前回：PCを持っている人にMicrosoft Formでアンケートを行い、アンケート結果はBIツールのレポートで皆が参照できるようにする処理はこちらをご覧ください

https://qiita.com/ManabuTech/items/352f1a93d74374228425

作成したコードはこちらに格納しています

https://github.com/manabutech-kyushu/uipath-aiocr-bi-demo


作成は次のステップです。

- STEP1. ファイル監視 バックグラウンドプロセスを作る
- STEP2. AI-OCRデータ取得プロセスを作る
- STEP3. Orchestratorの設定


## STEP1. ファイル監視 バックグラウンドプロセスを作る

### 生成されたファイルをロボットを動かさずに監視する

ハンドスキャナで読み取った紙は特定のフォルダに保存されるようにあらかじめ設定しています。
Unattended Robotで定期的にスケジュール実行する場合、１分置きに実行などしておくとスキャンしたものをすぐに処理することができますが、ロボットはこの業務しかできなくなります。
実行周期を数時間にするとスキャナで読み取ったものをすぐに処理できません。
こういう場合はファイル変更トリガーをバックグラウンドプロセスで使用します。
バックグラウンドプロセスであれば、監視中も他のプロセスを実行することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/d7d58691-4e80-fb9a-4ddc-1e0d94a314d2.png)


### メインプロセスの実行方法

今回、Action Centerを使用したチェック処理を入れています。
バックグラウンドプロセスからフォアグラウンドに切り替え後にAction Centerの処理が上手く動きませんでした。
おそらく、バックグラウンドプロセスをOrchestratorから動かせないため？
このため、Orchestratorのキューを使用してAI-OCRとActionCenterを実行するメインプロセスを呼び出すようにしました。

## STEP2. AI-OCRデータ取得プロセスを作る

PersistanceアクティビティがMain.xaml上で実行しないとエラーとなるため、Invokeしないようにしています
エラーメッセージ：UiPath.Activities.Contracts.Persistence.IPersistenceBookmarks' の拡張は、このワークフローを実行するように構成する必要があります。


### デモ実行中の表示

デモ実行中に何をやっているか分かるようにPresentationRobotパッケージを導入しています。
マーケットプレイスからインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/c3b90a9f-149b-9ca4-bc59-828a85b5b33c.png)

作り方に興味がある方は、こちらを参照してください。

https://qiita.com/ManabuTech/items/3ba6d577def1a60fd1fc

### Config等の初期化

バックグラウンドプロセスと共通の設定ファイル（Excel）を呼び出して、Dictionary型の変数に格納します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/4719efbe-4c61-3811-7ab3-000ca6b12ddf.png)

### トランザクションの取得

Orchestratorのキューの設定は後から行いますが、AIOCRというキューを作成して、バックグラウンドプロセスがキューにアイテムを入れると、このプロセスが動作するようにトリガを設定します。

バックグラウンドプロセスでキューに格納された情報を取得します。
キュートリガで自動起動されるようになっているため、誤ってこのプロセスが手動実行された場合に終了するようにしています。
TransactionItem.SpecificContent("Document").ToStringで取得したファイルパスを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/a4825f74-2a99-95a6-ab63-a1a347639f84.png)

### DX Suite処理の呼び出し

PersistenceのあるMain.xamlにデシリアライズ処理があるとエラーとなるため、DX-Suite処理のみを切り出しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/6eeff7c5-784b-7c9d-ef25-a5528a49f813.png)


### DX Suite処理の作成

今回使用するAI-OCR DX SuiteのAPIを使用したワークフローがUiPath マーケットプレイスにあります。
こちらを流用します。
Sample1をほぼそのまま流用しています。

https://marketplace.uipath.com/ja/listings/ai-ocr-workflow-for-ai-inside-dx-suite


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/984efa80-a55d-a8f7-d1dd-bd8789d29d89.png)


### AI-OCRからのデータ取得

DX Suite処理を呼び出して引数としてStatusとCsvFileNameを取得します。
Statusがsuccessとなった場合のみ、データ取得と後続するAction Centerへのチェック依頼を実施するようにします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/a452e3ff-1b37-b857-da0e-77136a17ed1f.png)


### Action Centerへのチェック依頼

AI-OCRは認識率が100%とはならないため、Action Centerを使用して事前チェックする工程を自動化処理の中に組み込みます。
チェック中はロボットがライセンスを使用しないため、他の処理を実行することも可能です。

フォームタスクを作成、タスクを割り当て、フォームタスク完了まで待機というステップを踏みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/14d6a444-131e-1a94-452c-b804664d1008.png)


### 再開後の処理

再開後にチェック済みデータをMicrosoft Formsと同じ形式に整形します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/fa7c0ef1-316f-7658-2147-ea192a171134.png)


### トランザクションのステータス設定

トライキャッチを使用して、Tryの最後で、トランザクションのステータスを設定アクティビティでステータスをSuccessfulとして、正常に終了させます。
トライキャッチのCatches部にエラーが発生した場合を考慮して、トランザクションのステータスを設定アクティビティを配置します。
ステータスはFailedにします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/c898f9af-6fe3-4ea9-1311-c42b694b0704.png)


### Action Centerの処理

Action Center用に事前にパッケージをインストールします
・UiPath.Form.Activity
・UiPath.FormActivityLibrary
・UiPath.Persistence.Activity

プロジェクトの設定でこちらを有効にします
・永続性をサポート

### Action Centerのフォーム

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/19cf8c4c-6ade-d2a2-8fff-a1ee1f688b17.png)

HTML要素コンポーネント（画像表示）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/0a238eb2-4f1b-4a76-05d9-04af41bf0a9d.png)

フィールドキーとして指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/3d4c4131-0610-79eb-024a-035ab01dff45.png)

フォームとUiPath Studioの変数はコレクションで関連付けます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/9d730d5c-b9b5-ab6e-eae0-
1d48dde4b599.png)

タスク割り当てをUiPath Studioで指定することもできます
TaskUserAssignment.TaskId = TaskObj.Id
TaskUserAssignment.UserNameOrEmail = User（メールアドレスが入った変数を指定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/414efe24-b87c-40c1-76dd-81df38c78398.png)

コレクションに追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/28186c70-fa31-bee2-1331-fa1d4b33043e.png)


再開後は、Microsoft Formsの形式にしてデータを保存して同期フォルダに格納しています


## STEP3. Orchestratorの設定

## キューの追加

AIOCRという名称でキューを新規に作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/59bad575-e767-5422-da23-78b715b17a86.png)

### トリガ設定

トリガ設定では、アカウントとマシンを指定することをお忘れなく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2577004/75879fb1-bfe1-1e99-042a-45ff0b800a64.png)