UiRPA(アソシエイト資格試験)の模擬試験の答えと解説　No.39~No.47

前回の記事の続きになります。
前回までの記事をまだご覧になられていない方は

https://qiita.com/y-matsunaga/items/946d6ee5f1bc91a2d2b3

https://qiita.com/y-matsunaga/items/f5321a510ef024adeb87

https://qiita.com/y-matsunaga/items/2f387f8567852506c47d

https://qiita.com/y-matsunaga/items/69937a7d9d14965eeccd

をご覧になってから読んでいただければと思います。
いよいよ最後の記事です。

それでは早速始めていきます。



### No.39 電子メールアドレスを格納する変数を作成する必要があります。値の指定が必須でない変数プロパティまたはフィールドはどれですか。（※変数と引数、メールの自動化）

1. [規定値 (Default)]
2. [名前 (Name)]
3. [変数型 (Variable type)]
4. [スコープ (Scope)]

<details><summary>答えを見る</summary>

**1.[規定値 (Default)]**

変数を設定する際の設定項目についてです。
名前、変数の型、スコープは必須項目ですが、規定値は空欄でも問題ありません。

公式ドキュメント：[変数パネル](https://docs.uipath.com/studio/lang-ja/docs/the-variables-panel)

</details>

### No.40 UI Explorer 特有の機能は何ですか。(※セレクター)

1. セレクターを修正できる。
2. セレクターの設定にワイルドカードを使用できる。
3. UI 要素の完全な階層ツリー構造を表示できる。
4. セレクターを指定できる。

<details><summary>答えを見る</summary>

**3.UI 要素の完全な階層ツリー構造を表示できる。**

セレクターの設定は、セレクターエディターやUI Explorer で行うことができます。
UI Explorer は、UI要素の完全な階層ツリー構造を表示することができ、より詳細な設定をすることが可能です。

公式ドキュメント：[セレクターについて](https://docs.uipath.com/studio/lang-ja/docs/about-selectors)
公式ドキュメント：[UI Explorer](https://docs.uipath.com/studio/lang-ja/docs/uipath-explorer)

</details>

### No.41 ベストプラクティスに則れば、プロセスの信頼性を確保するため、編集するべきセレクターはどれですか。（※セレクター）
1.![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/0df5db49-400b-9d14-a076-7c2d0f61e778.png)
2.![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/f971432c-c168-e22f-d264-e7f9e286aca5.png)
3.![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/082ca49d-8f0d-8590-3889-4b8c4c7789bd.png)
4.![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/9ec46cab-4bc8-aece-3e58-79f53821a35d.png)

<details><summary>答えを見る</summary>

4.![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/9ec46cab-4bc8-aece-3e58-79f53821a35d.png)
汎用的なセレクターとして取得したい場合は、不安定な要素をワイルドカードに置き換える方法があります。ただ、idxはインデックス番号のため、後から要素を追加されたり削除されたりすると、変わる可能性が高くなります。そのため、構築する時点からチェックを外しておいたほうが良いとされています。

</details>

### No.42 あるフィルター条件にもとづいてフォームからその条件に一致する UI要素を抽出したいと思います。どのアクティビティを使用しますか。(※UiPath の自動化概念とあらゆるテクニック)

1. [要素を探す (Find Element)]
2. [クリッピング領域を設定 (Set Clipping Region)]
3. [子要素を探す (Find Children)]
4. [マウストリガー (Mouse Trigger)]

<details><summary>答えを見る</summary>

**3.[子要素を探す (Find Children)]**

それぞれの選択肢を見ていきましょう。

**1.[要素を探す (Find Element)]**
指定した UI 要素が画面に表示される (フォアグラウンドに表示される) のを待って、UiElement 変数として返しますので誤りです。
公式ドキュメント：[要素を探す (Find Element)](https://docs.uipath.com/activities/lang-ja/docs/wait-ui-element-appear)

**2.[クリッピング領域を設定 (Set Clipping Region)]**
UI 要素のクリッピングリージョンを設定しますので誤りです。
公式ドキュメント：[クリッピング領域を設定 (Set Clipping Region)](https://docs.uipath.com/activities/lang-ja/docs/set-clipping-region)

**3.[子要素を探す (Find Children)]**
指定した範囲とフィルター条件に従って、子の UI 要素のコレクションを取得しますので正解です。
公式ドキュメント：[子要素を探す (Find Children)](https://docs.uipath.com/activities/lang-ja/docs/find-children)

**4.[マウストリガー (Mouse Trigger)]**
指定したマウスとキーの組み合わせのシステムワイドのイベントを監視します。[トリガー スコープ] アクティビティ内でのみ使用可能ですので誤りです。
公式ドキュメント：[マウス トリガー (Mouse Trigger)](https://docs.uipath.com/activities/lang-ja/docs/mouse-trigger-v-2)

</details>

### No.43 Main.xaml から ProcessInvoices.xaml ワークフローを呼び出すため、[ワークフローファイルを呼び出し (Invoke Workflow File)] を配置しました。Main.xaml から invoices_DT という名前のデータテーブル (DataTable) を ProcessInvoices.xaml に渡す必要があります。どのアクションを実行すべきですか。（※変数と引数）

1. ProcessInvoices.xaml で 「out」方向の引数を宣言する。
2. Main.xaml で「out」方向の引数を宣言する。
3. Main.xaml で「in」方向の引数を宣言する。
4. ProcessInvoices.xaml で「in」方向の引数を宣言する。

<details><summary>答えを見る</summary>

**4.ProcessInvoices.xaml で「in」方向の引数を宣言する。**

引数の使い方下の図で確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/5e2ca1d8-64de-fe67-0e10-eeb022b6f8e9.png)
**ポイントは、”引数は呼び出されるワークフローに設定する”ということです。**

それぞれの選択肢を見ていきましょう。

**1.ProcessInvoices.xaml で 「out」方向の引数を宣言する。**
ProcessInvoices.xaml は受け取る側ですので、「out」方向ではなく、「in」方向の引数を設定する必要がありますので誤りです。

**2.Main.xaml で「out」方向の引数を宣言する。**
Main.xaml は呼び出される側のワークフローではなく、呼び出す側のワークフローです。引数の設定は行いませんので誤りです。

**3.Main.xaml で「in」方向の引数を宣言する。**
2と同様の理由です誤りです。

**4.ProcessInvoices.xaml で「in」方向の引数を宣言する。**
引数は呼び出されるワークフローに設定し、また、受け取る側です。「in」方向の引数を宣言することになりますので正しいです。

</details>

### No.44 PDFファイル形式の請求書を複数処理し、それらの合計金額を算出するプロジェクトを作成します。請求書の書式はすべて同じであると仮定し、ベストプラクティスに則った処理はどれですか。（※PDFの自動化）

1. ホットキーを使用して合計金額をクリップボードにコピーする。
2. [OCR] アクテビティを使用してすべての請求書からの合計金額を算出する。
3. すべての請求書に対して有効なセレクターを確保する。
4. [アンカーベース (Anchor Base)] アクティビティ内で [画像を探す (Find Image)] と [テキストを取得 (Get Text)] アクティビティを使用する。

<details><summary>答えを見る</summary>

**3.すべての請求書に対して有効なセレクターを確保する。**

「請求書の書式はすべて同じ」というのがポイントです。

それぞれの選択肢を見ていきましょう。

**1.ホットキーを使用して合計金額をクリップボードにコピーする。**
Ctrl+Cを送信してコピーしていこうということでしょうか。。。
そもそも特定までに至っていないので誤りです。

**2.[OCR] アクテビティを使用してすべての請求書からの合計金額を算出する。**
OCRはそこまで正確ではありませんので、なるべく使用しない方がよいでしょう。最終手段みたいな感じで検討しましょう。そのため誤りです。

**3.すべての請求書に対して有効なセレクターを確保する**
**請求書の書式はすべて同じ**であることから、どの請求書も必ず同じ位置に合計金額が記載されているはずです。そういう書類を読み取る場合には、タイトル等の要素を削って、全ての請求書に対して有効なセレクターを設定するのが、最も確実なワークフローになるでしょう。そのため正しいです。

**4.[アンカーベース (Anchor Base)] アクティビティ内で [画像を探す (Find Image)] と [テキストを取得 (Get Text)] アクティビティを使用する。**
こちらの方法でも実現可能だとは思いますが、[画像を探す] アクテビティを使用するには、それぞれの請求書の、画像の表示倍率を揃えたりする必要がありますので、エラーが発生する余地が大きいと言えます。ベストプラクティスとは言えないので誤りです。

</details>

### No.45 DataTable (データテーブル) 変数に格納され、「Price」の値が「1000」を超えるすべての行を抽出する必要があります。どのアクティビティを使用しますか。(※セレクター)

1. [データテーブルを出力 (Output Data Table)]
2. [データテーブルを並べ替え (Sort Data Table]
3. [データテーブルをフィルター (Filter Data Table)]
4. [データテーブルを検索 (Lookup Data Table)]

<details><summary>答えを見る</summary>

**3.[データテーブルをフィルター (Filter Data Table)]**

データテーブルに関するアクティビティを確認していきましょう。

**データ テーブルを出力 (Output Data Table)**
CSV 形式を使用して DataTable を文字列に書き込みます。
公式ドキュメント：[データ テーブルを出力 (Output Data Table)](https://docs.uipath.com/activities/lang-ja/docs/output-data-table)

**データ テーブルを並べ替え (Sort Data Table)**
指定した列の値に基づいて DataTable 全体を昇順または降順に並べ替えます。
公式ドキュメント：[データ テーブルを並べ替え (Sort Data Table)](https://docs.uipath.com/activities/lang-ja/docs/sort-data-table)

**データテーブルをフィルター (Filter Data Table)**
Filter Wizard ウィンドウで条件を指定して DataTable 変数のフィルター処理を実行できるようにします。このアクティビティでは、ウィザードで指定する論理条件に従って行または列を維持または削除できます。いつでもウィザードにアクセスし、設定をカスタマイズできるよう、アクティビティ本体には Filter Wizard ボタンが含まれています。
公式ドキュメント：[データ テーブルをフィルター (Filter Data Table)](https://docs.uipath.com/activities/lang-ja/docs/filter-data-table)
**難しい言い方をされていますが、要はExcelで言うところのオートフィルター機能と同じようなものです。**

**データテーブルを検索 (Lookup Data Table)**
このアクティビティにより、指定された DataTable で提供された値を検索でき、その値が見つかった RowIndex が返されます。指定された値が見つからなかった場合、返される RowIndex は-1 です。また、このアクティビティにより、RowIndex プロパティで指定された Row 座標と Target Column プロパティ カテゴリで指定された Column 座標を持つセルで見つかった値が返されます。
公式ドキュメント：[データ テーブルを検索 (Lookup Data Table)](https://docs.uipath.com/activities/lang-ja/docs/lookup-data-table)

</details>

### No.46 UiPath Studio プロジェクトのファイルをレビューしています。UiPath 依存関係が指定されているのはどこですか。（その他）

1. .settings
2. .screenshots
3. project.json
4. .entities

<details><summary>答えを見る</summary>

**3.project.json**

**プロジェクトについて**
Studio におけるプロジェクトの依存関係とは、既定またはカスタムのアクティビティを含む特定のプロジェクトにリンクされているパッケージを指します。
依存関係は、コンテキストに基づき、各プロジェクトの定義 (使用するアクティビティ、変数、入力/出力引数など) を考慮に入れます。
このため、プロジェクトの定義に 1 つ以上の参照が存在する場合にのみ、依存関係が設定されます。
オートメーション プロジェクトにインストールされているアクティビティ パッケージのバージョンとランタイム ルールの詳細は project.json ファイルに記述されています。バージョンとランタイム ルールは、[パッケージを管理] ウィンドウで更新できます (詳細については、「依存関係の管理」ページをご覧ください。
公式ドキュメント：[依存関係について](https://docs.uipath.com/studio/lang-ja/v2019/docs/about-dependencies)
>**補足**
>JSONとは「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のことです。
JavaScriptでオブジェクトを作成する際は {} や [] などの括弧を使って記述しますが、JSONはその記法を元にしています。元々はJavaScriptで使われる想定で作成されたデータ構造なので、JavaScriptと非常に相性が良いです。現在はJavaScript以外にもPythonやJava、PHPなどの幅広い言語で使われていて、JavaScriptなどのクライアント言語とPythonなどのサーバサイド言語間のデータのやり取りで使われることが多いです。

</details>

### No.47 UiPath バージョンコントロール機能の説明として正しいのはどれですか。(バージョン管理)

1. デベロッパーが同時にGIT、TFS、SVNと能率よく接続できるようにする。
2. 複数ユーザーのコラボレーションを要する大規模なプロジェクトを開発するために有効な方法を提供する。
3. 複数バージョンのファイルを比較することを禁止する。
4. バージョンコントロールシステムにプロジェクトの単一バージョンのみを格納できるようにする。

<details><summary>答えを見る</summary>

**2.複数ユーザーのコラボレーションを要する大規模なプロジェクトを開発するために有効な方法を提供する。**

UiPath は、GitHub 等のバージョン管理システムと連携して、開発したワークフローやコードの変更を管理することができます。

バージョン管理システムを活用するメリット
**旧バージョンの復元**
古いバージョンのファイルを復元できます。
**異なるバージョンと比較**
新しいバージョンは、変更箇所に関する情報を含めて保存され、同じファイルの異なるバージョンと内容を比較できます。
**バージョン管理と差分の保存**
現在のバージョンはローカルに保存され、他のバージョンはすべてバージョン管理システム内で管理・保存されます。
**共同開発者間の連携**
共同開発者は、自由にファイルを操作し、必要なタイミングで共通バージョンに変更点をマージできます。

:::note warn
なお、バージョン管理システムは世の中にいくつかありますが、ひとつとしか連携できません。
Git、TFS、SVN に同時接続することはできません。
:::
公式ドキュメント：[バージョン管理について](https://docs.uipath.com/studio/lang-ja/v2019/docs/about-version-control)

</details>

### まとめ

今回の9問は下記の試験範囲+αでした。
推奨コースに含まれている内容なのでしっかりと理解しておきたいです。

RPA の基礎
UiPath Studio の概要
変数と引数
セレクター
制御フロー
データ操作
UiPath の自動化概念とあらゆるテクニック
UiPath Orchestrator の概要
　　　＋
メールの自動化
PDFの自動化
バージョン管理

:::note warn
ここまで読んでくださった方はお分かりかと思いますが、この模擬試験は答えられて終わるのではなく、しっかりと説明できるようになることが重要です。
公式ドキュメントにしっかり目を通し、理解度を深めて試験に臨みましょう。
:::

最後にこの記事作成に参考にさせていただいたサイトを共有します。
大変参考になりました。ありがとうございました。

https://streamlineoperations.hatenablog.com/