UIPath備忘録

# UIi Path概要
マクロの記録をシーケンスとしてつなげることで、業務の自動化を行う。
記録したマクロは、コンポーネント化し、共通して使うことができる。

スクレイピングを行える。
自動化に使う処理の最小の単位としてアクティビティが用意されており、メール送信当等の組み込みアクティビティが400以上用意されている。また、オリジナルのアクティビティを作成することもできる。

アクティビティとワイヤーを繋げて、ワークフローを作成する。ワークフローが集まった実行単位を「プロセス」と呼ぶ。
プロセスの管理はオーケストレーションで一元管理でき、パッケージを作成し、実行環境に配信することができる。

# 基本操作
プロジェクトを作成
ワークフロー追加
アクティビティを選択し、シーケンスを作成する
それぞれに名前を付けることができる。

変数について
- Int32 整数
- String 文字列
- Boolean　真偽値
- GenericValue　なんでも入れれる
- Array　配列
変数のスコープはシーケンス、ワークフローのいずれかを設定することができる    。

変数に値を代入する際には、Assignアクティビティを使用する。

引数を使用する際には、引数パネルを使用する。

Importされている名前空間(モジュール??)はimportsパネルで確認することができる。

## 条件分岐について
以下2通りの作成方法がある。
- フローチャートの内部に反復構造を構築する
  ⇒複雑な処理の場合に使用
-  ワークフロー内で、VB.NETコードを使用する方法
　⇒メッセージの切り分けなど単純な分岐の場合に使用

## ループについて
条件分岐後のアクティビティから開始アクティビティに繋げることで、ループを行う。
ループを終了する条件がなければ、無限ループになる。

シーケンスでループを行う場合、
While, Do While , ForEachを使用することができる。
それぞれ、body内のアクティビティを繰り返し実行される。
## フローチャートとシーケンスの使い分け
条件分岐がなく、一連の処理はシーケンスとしてまとめたほうが可読性が上がる。
複雑な分岐が必要な場合は、フローチャートを使用することが推奨される。

処理のまとまりでシーケンスを作成し、フローチャートに乗せるのが最適。
 
 ## データ型について
 アクティビティで使用できる型はプロパティで確認することができる。
 Arrayは要素数の編集不可、Listは編集可能

 データテーブル
 - csv
 - excel
 プロパティから エンコーディング、区切り文字等を設定する。
 データテーブルの反復処理は、ForEachRowを使用する。

## レコーディング機能について
- ベーシック
 ⇒複数ウィンドウ上の単一の操作に適する。
- デスクトップアプリケーション
 ⇒同一ウィンドウ上の連続した操作に適する。
- web
クリックが行える操作のみレコーディングすることができる。ホバー、右クリック等はできない。
同じアプリケーションを開いていた場合、UiPathはアクティブなウィンドウに対して、処理を行う。

ドロップダウンなど一時的にしか表示されないUI要素に対しては、F2を押すことで、一時レコーディングをポーズすることができる。

# UIの入出力の制御
## 入力方法
default
⇒hおぼすべての操作に対応できるが、処理が遅く、青売りケーションを常時アクティブにしておk必要がある。

ウィンドウメッセージ
⇒
シミュレート
⇒バックグラウンドでも操作でき、速度も速いが、互換性が一番低い。キーボードショートカットを使用することができない。

# 画面スクレイピングについて
スクレイピングには3つの種類がある。
FullText 
⇒デフォルト。正確、高速。大体、最適。
編集可能、非表示の要素も出力される。
黒背景に白文字の画面では、抽出できない。

OCR
⇒紙諜報のスクレイピングで使用。
大きなの画像、黒背景に白文字の画面は GoogleOCR
小さめのインターフェイスはMicrosoftOCR

# データスクレイピングについて
出力対象は構造化データの情報に限られる。ex.webページ




# セレクターについて
セレクターは、UI要素を特定するための情報で、アクティビティの内部で使用されている。
他のRPAアプリケーションでは、マウスの位置をUIを特定している場合が多いが、UIPathではUIをセレクターに変換して、自動化を行う。
XML形式で作成される。
UI Explorer から要素を確認することができる。

レコーディング機能を使用すれば、自動的にUI要素をセレクターに変換して、内部で処理されるが、
レコーティングした固有の情報(ex. ファイル名)に依存してしまうので、汎用的なアクティビティを作成するためには、セレクターを修正する必要がある。

固有のセレクターを削除、編集することで、実行対象が複数になった場合、アクティブなウィンドウが選択される。

## カスタマイズ・改善方法

### 完全セレクター
UI要素の特定に必要な属性がすべて含まれている。
ベーシックレコーティングでは、完全セレクターを使用して、UI要素にアクセスしている。

### 部分セレクター
最上部のウィンドウ要素が含まれていない。
デスクトップレコーティングでは、まず、最上部のウィンドウを格納し、部分セレクターを使用して、UI要素にアクセスしている。
アプリケーションの名前等の固有情報に依存しないため、保守しやすい。


### 動的セレクタ
ワイルドカードを使用して、動的セレクタを作成することができる。
 
webのスクレイピングでは、ページタイトル等が動的に変わることが多いので、動的セレクタの使用が効果的。
セレクタエディタから、遷移前ページのセレクタと遷移後ページのセレクタの差分をワイルドカードで置き換える機能がある。

### idx(インデックス)
基本的に使用は推奨されない。
固有情報がない場合、自動で作成される。1 ~
インデックスで要素を指定してしまうと、変更に弱くなるので、基本的には他のセレクタで要素を特定するように作成するほうがいい。


### セレクタを変数指定
セレクタには、変数を埋め込むことができる。
また、セレクタ自体をStringの変数として定義し、入力値を指定することもできる。

### アンカー
要素の特定に、変更の可能性の高いセレクタを使用してしまうと、保守性が損なわれてしまう。
そのため、安定したセレクタをアンカーとし、アンカーを基準に要素を相対的に指定することが推奨される。
アンカーベース作成　⇒　アンカーポジション(デフォルトはauto)　⇒　要素の特定

### navタグ
要素を相対的に指定することができる。
アンカーベースと違い、バックグラウンドでも動作する。
UI Explorerで要素を指定　⇒安定したセレクタにアンカーを設定　⇒navタグが自動で設定される。
nav タグには、以下のプロパティが用意されている。
- up 指定数上の親要素を指定する。
- next 指定数次の要素を指定する。
- prev 指定数前の要素を指定する。


# Citrix レコーディング
リモートデスクトップ等の仮想環境の自動化を行う際に使用する。
他のレコーディングと違い、手動でロボに手順を教える必要がある。
クライアントで表示されている仮想環境のイメージをOCRで読み取り、要素にアクセスするため、
文字の大きさやスタイルによって、不正確になる可能性は低い。
ただし、画像については、エラーになる可能性がある。
マウスのオートメーションでは、OCRエラーの際にエラーが起こる可能性があるので、
キーボードアクション(ex. tab)の使用が推奨される。 

# Excelデータ
Excel Application Scopeというコンテナの中に、記述していく。
ファイルパスは変数で定義して使うこともできる。

## visiableプロパティ
オンにすると、エクセルファイルを実行して、データを取得するため、officeのアプリが必要になる。
ファイルを確認しながら開発を行えるため便利。
オフにすると、バックグラウンドでデータを取得するためアプリは必要ない。

## デバッグと例外処理
UIPathでは、ワークフローやシーケンスの名前で例外発生場所を特定するため、それぞれ認識しやすい名前を付けておくことがデバッグのコツである。

Executeタブ > startDebug でデバッグを実行する。

どのアクションが実行されているかは、黄色のハイライトで視覚的に確認することができる。
赤のハイライトは、どのUI要素に対して、アクティビティを実行しているかを確認することができる。また、変数の状態を確認することができる。


ワークフローの実行が速すぎる場合は、slow stepを使用することができる。実行中にオンオフの切り替えができる。
ブレークポイントを設定することもできる。

### 以下、デバッグで確認すべき3項目。
- アタッチされているセレクタの確認
- インプットメソッドの設定の確認
- 操作実行時に要素が表示されているかの確認

### 要素が表示されているか確認方法
ExistElementアクティビティを使用する。
指定したセレクタが表示されているか,真偽値が返ってくる。
timeを設定することができるが,ループを使って確認することが一般的。

### try catch
スローされるException Typeを確認することができる。
catchに処理がスローされると、ワークフローの処理は止まる。

ログメッセージにexception messageを追加することで、詳細なログを確認することができる。

# プロジェクト構成
プロジェクト構成では、以下の観点を考慮する必要がある。
- 信頼性
  - 内部外部を問わず、発生する恐れのあるエラーを検知し回復する
- 効率性
  - 作業効率、本番環境でスムーズに実行されること。
- 管理が容易
- 拡張性

## ベストプラクティス
全体の把握、テストが容易になるなどのメリットから、メインワークフローには、ワークフローを使用する。
分岐がなく、順次処理されるものはシーケンスを使用する。
入れ子の条件分岐がある場合は、ワークフローを使用する。
いずれにしても、処理をコンポーネント化して、再利用可能にしておくことが重要である。
コンポーネントは、メインワークフローから、呼び出すことができる。
処理ごとに適切な命名、ログの出力、例外処理を行うことが、堅牢な自動化を行うことにつながる。

ワークフローの設定を別ファイルにjson形式で保存しておく。


# UI Orchestrator について
ある端末で、ワークフローを立ち上げて、それを他の端末でデプロイ実行するための機能。

Set up ⇒publush
表示されたID をグルーピング


Orchestratorで環境を作成。
## プロセスで管理する。
Orchestratorでプロセスを管理実行する際の手順
* Orchestratorにロボットを登録する
* UiPath Studio からプロジェクトを公開
* 使用するプロセスのための環境を構築
* プロセスを作成
* プロセスを実行

## version管理
ui studio から再publishすることで、orchestrator上でversion管理することができる。
orchestrator上では、古いversionの設定になっているので、再設定を行う必要がある。
現在、使用されていないパッケージは削除することができる。

## jobのスケジュール化
スケジュールタブから、jobの実行スケジュールを管理することができる。
プロセスの起動タイミング、毎時、毎週、日次などを設定することができる。

JOBSタグから、JOBが手動実行されたのか、スケジュール実行されたのかを確認することができる。

プロセスがすでに実行されている状態で、ジョブを実行した場合、キューにジョブが入れられて、pending状態になる。


#＃ Asset機能
変数をグローバルとして管理することができる。
定数等の不変な変数であれば、設定することがある。