UiPathメモ

UiPathについて備忘録をつらつらと。。。
痛い目に会うたところとか気になったところ挙げていきます

## メールフォルダーのチェックとフィルター
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/06ba44f4-a155-1607-323a-ec3020bc48f6.png)
対象フォルダの書き方は上の通り。
StudioXの[ForEachEmailX]アクティビティは、[UseOutlook365]内にセット。
UiPath:[ForEachEmailXのweb取説](https://docs.uipath.com/activities/lang-ja/docs/for-each-email-x)
UiPath:[Forumの記事](https://forum.uipath.com/t/foreachemailx/302622)

## rowの型
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/12791704-27f3-40d9-f473-08988b4a115c.png)
繰り返し（各行）で使うrowの型です。
`DataRow型`です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/0e964d28-b7f6-f535-6dc4-77eaf832760e.png)


## 数字チェックの方法
IsNumeric関数を使います。
しかし、コツがいります。
名前空間なしではエラーが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/f5c1cb25-2c7d-40b3-0e97-a7fa73393d51.png)
`IsNumeric(件数境界値前半)`

以下のように名前空間ありでOK
`Microsoft.VisualBasic.Information.IsNumeric(件数境界値前半)`



## データテーブルから特定の列を抽出
stringのリストに抽出する場合は以下。。。
listString = dt.AsEnumerable.Select(function(r) r("columnnName").toString()).ToList()

ただし、これを記述すると以下のようなエラーが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/79ef906e-423b-a5ec-bcf6-14de3cfa45ad.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/73c652ee-0077-ba25-224f-c0f332b8b421.png)
このエラーが出た時は、以下を見て解決してください。
UiPath:[Forumの記事。エラー発生時の解決方法](https://forum.uipath.com/t/compile-error-asenumerable-is-not-a-member-of-system-data-datatable/205241)
Main.xamlをメモ帳で開いて、黄色のハイライトを追加する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/0ad0bdc5-acc4-294c-5e32-ddc6aba51273.png)




## ２次元配列
簡単そうだけど初期化で悩んだ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/f62cc43f-b9ba-ac06-cd68-6eecfc2aa641.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/a088e623-1bb1-e65c-2207-83ad7bf1d7d5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/f038eb68-49ac-be61-12f3-9c6916d4e3d4.png)



## 数字検査
IsNumericを名前空間付きで記述してみる。
Microsoft.VisualBasic.Information.IsNumeric(〇〇〇)だといけた
IsNumeric(〇〇〇)だとダメやった



## データテーブルのピンポイントアクセス
言語によって違いがあって忘れるのでUiPath(vb.net)用にメモっときます
2行目の1列目（0スタートなので列番号は0）をとるときは
row(0) = row(“col1”) = row.item(0) = row.item(“col1”)
 = dtA.rows(1)(0) = dtA.rows(1)(“col1”) = dtA.rows(1).item(0) = dtA.rows(1).item(“col1”)


## FTP用のactivityのインストール注意点
FTP用のライブラリーがUiPathさんから用意されています。
UiPath.FTP.Activitiesです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/8292bd22-b0d3-ec3a-4b9e-c99d3fd8d541.png)
こいつを[パッケージを管理]画面でインストールするには事前に以下のチェックボックスにチェックを入れてから
インストールしてください。
![こつ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/b0c8b6a7-0320-81fd-847c-1255b89f3a09.jpeg)
チェックボックスにチェックを入れずにインストールすると、エラーが出まくって動きませんでした。
うまくインストールできないみたいです。


## ファイル分析が出来ないときの確認
Studioでファイル分析をして以下の**エラー**が出て、実行できない場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/bee92289-d8aa-02a6-0819-76fe487d7066.png)
こんなときは、実行フォルダーパスを確認してください。（プロジェクトのあるフォルダーパスね。）
UiPath指定のフォルダーは以下です。(ドキュメントの下のUiPathが推奨のフォルダーらしい。)
以下でない場合は、以下に持ってきてファイル分析しなおしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/63e92889-5ab4-804d-bd65-fbe828076a85.png)
ひょっとしたら、うまくいくかも。。。（わたしはうまくいきました。）


## htmlのセレクターデモ
https://www.casleyconsulting.co.jp/blog/engineer/4007/
## nu関連
NuGet・・・ヌゲット
https://www.atmarkit.co.jp/fdotnet/chushin/nuget_02/nuget_02_02.html
## プロダクトライフサイクル
https://www.uipath.com/ja/legal/trust-and-security/legal-support/product-lifecycle#content-7
## Automation hub 
https://www.youtube.com/watch?v=vc6awGCe0Mg
## parallelアクティビティの記事
https://qiita.com/cheez_RPA/items/fc8f322482b0d17f318a
## ブラウザの機能
https://www.html5rocks.com/ja/tutorials/internals/howbrowserswork/

## studioで使えるstudio-xのアクティビティ
・繰り返し各メール・・・フィルター機能が便利。取ってくるメールのフィルターみたい。
・フォルダ内の各ファイル
　ファイルパスを全部取ってきて、処理するみたい。今までは`vb.netのコマンド`や`かんたんベーシックアクティビティ`を
　使う必要がある。
・excelファイルをPDFとして保存
・excelシート系の操作・・・シートを操作、シートを削除、シートを挿入、シート名を変更
## 気になるアクティビティ
・JSを挿入
・バックグラウンドプロセス
　https://docs.uipath.com/lang-ja/robot/docs/background-process-automation
・UiPath Form アクティビティ
・ピボットを更新　アクティビティ
・ダウンロードを待つ　アクティビティ

　
## エラーハンドリング記事
https://epic-life.me/archives/768

## Terminate WorkflowアクティビティとThrowの違い
UiPath:[Forumの記事](https://forum.uipath.com/t/topic/61476/3)
UiPath:[Forumの記事2](https://forum.uipath.com/t/topic/227630)

## バージョン管理について
メジャーバージョンとか、マイナーバージョンとかそのたぐい。
詳細はここ
https://docs.uipath.com/studio/lang-ja/v2020.10/docs/about-automation-projects
https://qiita.com/Matsuo_yoshi/items/b62b98ae2adfa8a18b28
## ロボットのパブリッシュ
作ったロボット（プロセス）は、バージョンを付けて`パブリッシュ`します。
パブリッシュすると開発環境(UiPath Studio)の外(UiPath Assistant)でロボットを動かせます。
**運用時**は`パブリッシュしたプロセスを実行`するわけです。
で。。。
UiPath Studioのデザイン画面に下のボタンが出てきます。
![パブリッシュ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/36ea330c-2fd0-4d3d-9ee7-965671ce1345.png)
パブリッシュ押下で以下
![プロセスをパブリッシュ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/e4022bb3-f6de-06ce-c484-bd25093e2bf1.png)
`新しいバージョン`のところは、自由に書き換えられます。
`新しいバージョン`は、上の**「バージョン管理について」を参考にしてください**。
`リリースノート`のところは、詳しく書いた方が後から助かると思います。

パブリッシュしたら下のUiPath Assistantに自動で出てきます。
運用時はこれを使います。
ちなみにこのUiPath Assistantは、v2020.4.3です。バージョン違ったら見た目変わるかも。。。
![アシスタント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/4b5b63eb-4849-37d0-2be2-9cf5fafc1470.png)
ボカシのところはプロセス名です。
ここに`マウスオン`したらプロセスの`バージョンがポップアップ`されるので確認できます。

## GenericValue型の使いどころ
UiPathに独特の型`GenericValue`があります。
GenericValue型は何でもありの型なので、**積極的に使うのは避けたほうがいい**です。
僕も特定の型を明示的に宣言しているので、`GenericValue`は気持ち悪くて一部を除いて、**まったく使ってません**。
そしたら、**いつ使うねん。。。なんでこんな型あんねん。。。**っていう話です。

ここから事例です
以下のようにexcelファイルの「セルを読み込み」します。
読み込んだセルはA1です。
![型のテスト１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/a012c586-af0c-d803-a000-01e6528c115f.png)
excelファイルの中身はこんな感じ。。。
![型のテスト２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/701525f6-01a1-bc35-14ee-0cc30f248277.png)
この例ではA1は１です。つまり型は`int`です。
でも、読み込むデータの型を`string`と期待して実装すると。。。
![型のテスト３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/3c93042e-872c-5d31-6b67-b9c6d8636fef.png)
以下のようなエラーが出ちゃいます！！
![型のテスト4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/05524772-af2d-d19f-795f-82af05e7eeb4.png)
でも、以下のように`GenericValue`でいったん受け取っときゃあ、**エラーは回避できる！！**
![型のテスト5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/c3f70a7d-a91a-daef-0531-f879026f5fd0.png)
`GenericValue`を使うと以下のように「1」が読み込めました。
![型のテスト6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/13e321f4-2681-bca6-b83b-2c9a19be8e4b.png)
何が言いたいかというと。。。
excelで読み込むデータは、`string`で入ってくる時もありゃあ、`int`で入ってくる時もあって、**型が一定している保証はない！！**ってことです。
で、そういうデータは社内の基幹システムやその他もろもろのシステムから出力されることがたまにあって、私しゃ結構痛い目にあってます。
（上のexcelファイルを見てください。B列は`１行目と８行目はstring`ですが、`２行目～７行目はint`で混在）
![型のテスト7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/a805188f-6ebf-722e-ed2c-81525c574c71.png)
**型が一定している保証がない**ところは`GenericValue型`の変数で受けて、
上のように`strセルを読込 = セルを読込.Tostring()`で**文字列**にして、そこから数値変換なんなりにして正しい型属性の変数にすると幸せになれるかも。。。


GenericValueの詳細は、`[UiPathコーディング規約Ver1.1.0]P14 5.2.変数の型について`を見ちゃってください。
[UiPathコーディング規約]の最新版はここ:[UiPathコーディング規約とワークフロー品質評価キット](https://www.uipath.com/ja/solutions/whitepapers/coding-standards)

## UI上の入力方法
この表をしょっちゅう見たくなるんで貼り付け
![入力1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/0eda777a-430d-300b-4426-8daa09b19983.png)
この説明では、まったく理解できた感がないなぁ。。。
![入力2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/28964d2c-ec48-aa51-b899-7e08290523eb.png)
こんなんもあった。
![入力3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/cc33ae1c-b332-54b5-c4dd-aa473f188391.png)
こんなんもあった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/dec18ba8-33cb-4953-e8bd-bdfa327eb91a.png)
こんなんも。。。
![入力4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/26a77382-2ec4-9da7-3f45-0cb05aff94ad.png)
こんなんも。。。
![入力5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/57127c97-2ec4-da93-9210-c693ed97c4d0.png)

オンライン取説:[UI要素について](https://docs.uipath.com/studio/lang-ja/docs/about-ui-elements)
オンライン取説:[入力メソッド](https://docs.uipath.com/studio/lang-ja/docs/input-methods)
オンライン取説:[入力メソッドの使用例](https://docs.uipath.com/studio/lang-ja/docs/example-of-using-input-methods)
UiPath:[プロセス爆速化のためのTIPS](https://www.uipath.com/ja/blog/developer/accelerate-processing)
UiPath:[UI操作自動化](https://qiita.com/vicugna-pacos/items/8e2a3d7281e6efa06a23)
UiPath:[クリックアクティビティ徹底解説](https://www.uipath.com/ja/blog/developer/click-activity)・・・**これおもろかった!**

これあんまり関係ないかも。。。
UiPath:[シングルクリックとダブルクリック](https://www.uipath.com/ja/resources/knowledge-base/decision-flow-single-double-click)

##「準備完了まで待機」プロパティについて

ここ見て
UiPath:[クリックアクティビティ徹底解説](https://www.uipath.com/ja/blog/developer/click-activity)・・・**中ほどにあります**

## 「リトライスコープの注意点」

UiPath取説:[リトライスコープ](https://docs.uipath.com/activities/lang-ja/docs/retry-scope)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/de260b8b-4039-cc19-38a5-ea1b6e7e3fc2.png)

上の絵から分かる通り、Retry Scopeが**リトライを実行する条件は2つ**です。

- Action（処理）をすべて実行したあとに、Condition（条件）に指定したアクティビティが False を返すか、または失敗する（例外を発生させる）とき
- Action（処理）を実行しているときに、キャッチされていない例外が発生したとき・・・条件セクションは無理に入れなくてもリトライ可。

RetryScopeの条件セクションに使えるのは現時点で下記7つかと。。。

- 要素の有無を検出
- 画像の有無を検出
- テキストの有無を確認
- OCRでテキストの有無を確認
- コレクション内での有無
- Is true（WorkFlow Manager Activitiesパッケージで追加）
- Is false（WorkFlow Manager Activitiesパッケージで追加）

RetryScopeのアクションセクション内で例外スローする方法は以下のアクティビティが有効です。

UiPath:[Check True](https://docs.uipath.com/activities/lang-ja/docs/check-true)
UiPath:[Check False](https://docs.uipath.com/activities/lang-ja/docs/check-false)
web:[参考](https://koawaka.com/rpa-school/uipath-error-exception/)

## Outlook365のセッティング：UiPathでOutlook365を使ってメール送信する方法
まず下のようにStudioXのアクティビティを見えるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/9c33f782-295d-95e6-296e-fe8bf0922788.png)
使うアクティビティは以下の２つです。
まずは[Use Outlook 365]アクティビティから設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/c85e6599-f341-54a9-248f-190a5b795b70.png)
[Use Outlook 365]アクティビティをドラッグ＆ドロップ。
このアクティビティでOutlook365にサインイン出来るようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/94a94360-9d42-1218-fbad-ef4547d632eb.png)
下の画面が出てくるので、[アプリケーションID]に次の文字列`f2f43f65-16a6-4319-91b6-d2a342a88744`　を入力し、[OK] をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/d0f914d6-b6fc-db97-1655-b72c2e37cb7d.png)
[アプリケーションIDの詳細はこちら](https://www.weblio.jp/content/Application+ID)
下の画面が出てくるので、会社のメルアドを入力して、[次へ]をクリックする。
![test1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/541e46bf-771d-8791-5303-e6c6087c65c0.png)
下の画面が出てくるので、パスワードを入力して[サインイン]する。（メールサーバへのパスワードです。自分のPCにログインするときのパスワードと違うかも。。。）
![test2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/38ccfab9-e9f8-c0c1-9a3a-ab98775dc8a7.png)
下の画面が出てくるので、[承諾]する。これで[Use Outlook 365]アクティビティへの設定終わりです。
![test3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/901786fd-93c1-af72-422d-6da8af3201e6.png)
設定後に[Use Outlook 365]アクティビティをstudioからドラッグ＆ドロップすると、[メルアド]・[パスワード]・[Exchange]が登録済みなので
これまでの設定は１回だけみたい。。。studioに登録されるみたいです。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/74b9119b-231b-7aba-c2b7-6f4ce8768602.png)
![test4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/c164bd14-0d1a-837a-ee2b-ad32a5b9f291.png)
赤丸の部分が登録済みで、変更も出来ないところを見るとやはりstudioに登録されたみたい。。。
![test5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691463/7397cfdb-6cfb-7167-2735-e32c8f06ecc2.png)








UiPath web取説:[Outlook365を使用](https://docs.uipath.com/activities/lang-ja/docs/exchange-application-card)
UiPath web取説:[Outlook メールを送信](ttps://docs.uipath.com/activities/lang-ja/docs/configuring-the-azure-ad-for-outlook-365-automation)
UiPath web取説:[チュートリアル: CSV から Excel へのコピーと、ファイルのメール送信](https://docs.uipath.com/studiox/lang-ja/docs/tutorial-copying-from-csv-to-excel-and-emailing-the-file)