UiPath個人的メモ

<h2>ファイル・フォルダーの種類</h2>
Main.xamlファイル・・自動化処理の流れを定義したワークフロー ファイル
project.jsonファイル・・プロジェクト固有の情報が定義されているファイル
.screenshotsフォルダ・・ワークフローを UiPath Studio で開いた際に表示される、参考スクリーンショットの画像ファイルが格納されるフォルダ

<h2>アクティビティ</h2>
アクティビティ・・処理を自動化する最小の部品

<h2>フローチャートとシーケンス</h2>
フローチャート・・条件分岐、前の処理に戻るなどより複雑な処理を行うワークフロー
シーケンス・・一直線に処理を行うワークフロー

<h2>変数</h2>
・[変数 (Variables)] パネルから変数名を変更した場合、ワークフロー上で使用されている同じ名前の変数は一括で変更される
・変数の予測変換は、「Ctrl + スペース」

<h2>データ型</h2>
<h3>Array型</h3>
　中の要素：編集可能
　構成する要素の数：編集不可
<h3>List型</h3>
　中の要素：編集可能
　構成する要素の数：編集可能


<h2>制御フロー（制御構造）</h2>
<h3>順次構造</h3>
上から下へ処理が順次実行される構造
<h3>分岐構造</h3>
判断条件を元に処理を分岐させて実行させる構造

<h4>フロー条件分岐(Flow Decision)</h4>
フローチャート上で使用。
分岐条件を設定し、条件を満たす時は [True] の先の処理を実行し、
条件を満たさない時は [False] の先の処理を実行。
条件により、全く異なる処理を 2 種類作成する際など、大きな違いがある場合は、フローで分岐させる。


<h4>条件分岐（If)</h4>
シーケンス上で使用。
[条件分岐 (If)] はシーケンスの中で使用します
分岐条件を指定し、条件を満たしたときは、[Then] の中の処理を実行し、条件を満たさないときは、[Else] の中の処理を実行。

※[条件分岐 (If)] の中に、[条件分岐 (If)] を設置すると、ワークフローの可読性が低くなるから避けよう。

<h3>反復構造（ループ）</h3>
繰り返し作業の自動化に頻繁に使用される制御構造

<h4>[フローチャート (Flowchart)] を使用する方法</h4>

<h4>[繰り返し(前判定) (While)] </h4>
条件を満たしている場合に Body 内に格納されているアクティビティが繰り返し実行される

<h4>[繰り返し(後判定) (Do While)] </h4>
条件に関わらず Body 内に格納されているアクティビティが一度実行されます
その後、条件を満たしている場合、Body 内のアクティビティが繰り返し実行される

<h4>[繰り返し (コレクションの各要素) (For Each)]</h4>
リストや配列などコレクションで指定したデータの型の各要素に対して、1つずつ [本体 (Body)] 内に格納されている処理を、繰り返し行うことができる

<h4>[繰り返し (各行) (For Each Row)]</h4>
Data Table 型データの各行に対して、Body内に格納されている処理を、繰り返し行うことができる

<h2>GenericValue 型</h2>
テキスト (String) / 数値 (Int32) / 日付 (Date) / 配列 (Array) / 真偽 (Boolean) など、あらゆる種類のデータを格納できる変数の 1 つで、UiPath Studio 独自の変数の型

<h3>連結</h3>
2 つの GenericValue 型変数を連結しようとした場合、式の最初の変数が文字列として定義されている場合には、結果は 2つ文字列の連結になるが、整数として定義されている場合の結果は、それらの数値合計になる

<h2>Excel</h2>
<h3>Excel を操作する 2 種類のアクティビティ</h3>
<h4>[アプリの連携 (App Integration)] ＞[Excel] カテゴリに属するアクティビティの利用</h4>
多数の行と列にまたがるExcelデータを取り扱う場合や、様々なExcel操作を安定的に自動化する場合に使う。
[Excelアプリケーションスコープ(Excel Application Scope)] 内に配置。

※Excelアプリケーションスコープ・・指定したMicrosoft Excelワークブックを開き、内部に配置したアクティビティを [実行] して処理が完了すると、ワークブックとExcel を終了

<h4>[システム ]＞[ファイル] ＞[ワークブック] カテゴリに属するアクティビティの利用</h4>
Microsoft Excel がインストールされていない環境でも使用できるが、アクティビティ毎に対象のExcelファイルを指定する必要がある。

<h2>メソッド</h2>
文字列型
toString
contains

dataRow[]、dataTable型などの値の取り出し方
ex）
要素名("カラム名")
コレクションの変数名.Rows(Rowのindex)("カラム名")

メソッド
コレクションの変数名.Select("カラム名 = 値 and カラム名 = 値")

<h2>レコーディング</h2>
<h3>自動レコーディングできるもの</h3>
文字入力
左クリック
チェックボックス
ドロップダウン
など
<h3>手動レコーディングするもの</h3>
ショートカットキー
修飾キー（Ctrl + C, Ctrl + A）など
右クリック
マウスオーバー
など

<h3>ショートカット</h3>
esc・・レコーディングを止める、再度押すと保存＆終了する
F2・・レコーディングを一定時間停止

<h2>ユーザーインターフェイスとセレクター</h2>
<h3>ユーザーインターフェイス</h3>
ウェブページをはじめとしたアプリケーションのユーザーインターフェイスは、入れ子状のコンテナーに格納された要素で構成されている
<h3>セレクター</h3>
ユーザーインターフェイス内の特定のアクションを自動化するために、これらのコンテナーや要素の属性を使用し、指定した要素までの住所のようなものを自動生成したもの。アクティビティ（ex.クリック、文字を入力）が生成する。
※アクティビティの [プロパティ (Properties)] パネル > [入力 (Input)] > [ターゲット (Target)] > [セレクター (Selector)] > … をクリック→[セレクターエディター (Selector Editor)] が開き確認できる
OR
ワークフロー内に配置されているアクティビティのオプションボタンをクリック→[セレクターを編集 (Edit Selector)] をクリック→[セレクターエディター (Selector Editor)] が開き確認できる

<h2>UI Explorerとセレクターエディター (Selector Editor）</h2>
<h3>UI Explorer</h3>
特定のUI要素の構造を確認したり、独自のセレクターを作成できるツール
<h3>セレクトエディタ</h3>
UI Explorerの簡易バージョンであり、設定されているセレクターの内容確認と部分的な編集することができる

<h2>完全セレクターと部分セレクター</h2>
<h3>完全セレクター</h3>
最上位ウィンドウ (アプリケーション) の要素を含み、UI 要素の特定に必要な全ての要素を含むセレクター
ベーシックレコーディングで生成。
<h3>部分セレクター</h3>
最上位ウィンドウ (アプリケーション) の要素を含まず、[ウィンドウにアタッチ (Attach Window)]・[アプリケーションを開く (Open Application)] などのコンテナーのセレクターと合わせて機能するセレクター
デスクトップやwebレコーディングなどで生成。
<h2>安定的なセレクターの作成方法</h2>
<h3>要素が変更する可能性がある場合に使用する、ワイルドカード</h3>
操作対象ファイルを例とした場合、ファイル名が変更される、ファイル名がシステムにより自動的に生成される、またはファイルの正確な名前が分からない等、要素が変更する可能性がある場合は、セレクターの調整が必要
*・・文字数に制限なく置き換える
?・・1文字のみ置き換える
※この場合、セレクターエディターの [修復 (Repair)] 機能も活用できる
<h3>idx を使用するセレクターの場合は、他の属性を追加する</h3>
インデックス (idx) 属性とはUI要素を 1番目の要素、2番目などの要素を、番号で指定する属性であり、選択した要素に固有の情報がない場合、セレクター上に自動的に生成される。
将来的にUI要素の順番が変動する可能性があるため、できるだけ使用は避け、他の属性を追加しよう。
<h3>属性値、またはセレクター全体を変数に置き換える</h3>
例えば、ユーザーが入力した任意の数字に対応し電卓をハイライトさせる場合、入力される数字によりセレクターが異なる場合、セレクターの調整が必要

ex）※変数Numberは入力ダイアログで入力した値
`< uia automationid='num0Button' > `
→`< uia automationid='num" + Number + "Button' > `
OR
`セレクタ全体`→`変数NumberSelector`
`セレクター欄をNumberSelector.Replace("0", Number.toString)に変更`

<h2>複雑なアプリケーション上のセレクター調整</h2>
ページを更新するごとに要素の位置やセレクターの値が変化する場合、、
<h3>アンカーベース (Anchor Base)</h3>
近くにある固定的な要素（ラベルやアイコンなど）を目印にすることで、変更される可能性のある要素を指定できるアクティビティであり、アンカー（要素を探す、画像を探す）とアクティビティをセットで格納できるコンテナー
<h3>相対セレクター</h3>
アンカーベースは常にアンカーの画面上の位置を使用するため、バックグランドでは要素を指定できない可能性がある。
そこで、UI Explorerの[アンカーを選択]を使用し、アンカーに設定したUI要素と目的とするUI要素の相対的な位置をnavタグで指定することで、安定的なセレクターを作成する
<h3> 子要素を探す(Find Children)アクティビティ</h3>
指定した範囲とフィルター条件に従って、子や孫のUI要素のコレクションを取得する

ex）［子要素を探す］で入力フィールドを含む親要素を指定し、その子要素のコレクションを取得する

繰り返し（コレクションの各要素）内↓
・
・
条件分岐
要素名.GetFriendlyName.Contains("input")
Thenなら・・
Elseなら・・

<h2>例外</h2>
<h3>アプリケーション例外とビジネス例外</h3>
<h4>アプリケーション例外（アプリケーションエラー）</h4>
システム障害など技術的な問題で発生するエラー
ex）対象アプリケーションがフリーズ、インターネットに接続しない
<h4>ビジネス例外（業務エラー）</h4>
自動化処理処理で使用するデータが不完全、欠損など業務上の不備で発生するエラー
ex）入力ミスやファイルが添付されていない、10万円以上は上長承認が必要といった業務上のルールに沿わないデータを含むなど
<h3>例外をスロー</h3>
<h4>アクティビティが自動でスローする場合</h4>
[Try] 内に [スロー (Throw)] の配置は不要
<h4>例外を定義してスローする場合</h4>
[Try] 内に [スロー (Throw)] を配置

※[スロー (Throw)] で例外を作成する場合
new <スローしたい例外の型名>(“エラーメッセージ”)と[例外]プロパティに記載することで、例外を定義し、独自のエラーメッセージを表示させることができます