RPA体験談【目次(主にUiPathについて書いています)】

日記も大分たまってきましたので、目次を作りました。

 

 

 

 

 

 

 

01 RPA体験談【導入編:RPAとは】

RPAの特徴について
1.「人間がやる手順にならって処理してくれる事務ロボット程度」
2.Webサイトと親和性が高い。
3.AIと違って判断はしてくれない。
例えば、「待て」の指示が必要

02 RPA体験談【導入編:Uipathについて】

エンジニア作成型・ユーザ作成型
ユーザ作成型(ノンコーディング)のWinActorとUiPathの違い
Robotの目について(UI要素と画像認識)

 

03 RPA体験談【導入編:Uipathのselectorについて】

Uipathのselectorの概念について
目の役割
selectorの理解がUiPath攻略の第1歩

 

04 RPA体験談【導入編:Uipathアカデミーでの自宅学習について】

UiPathアカデミーは結構大変
自宅でインストールできるので、自学自習できる。
Mainの真下には、FlowChartについてを置くこと。
真下にsequence(シーケンス)を置くのはオススメできない。

 

05 RPA体験談【導入編:Uipathのファイル構成について】

UiPathのファイル構成
フォルダ名=プロジェクト名
xamlファイルとjsonファイル
.screenshotsフォルダ

 

06 RPA体験談【導入編:UiPathの自動記録について】

「自動記録」がやっぱり便利。
慣れてきても「Ui要素」をキャッチ出来ないときにも使う。
自動記録の機能はしっかり覚えて臨むと良い。

 

07 RPA体験談【導入編:UiPathのAnnotation(注釈)】

右クリックしてAnnotation/AddAnnotation(日本語版だと、注釈/注釈の追加)は超便利
ツール全体の簡単な仕様とか
Invoke(他のxamlシナリオの引用)の時の引数とか
今後のエラー回避についての作成予定の手順とか 色々使える

08 RPA体験談【導入編:UiPathとOfficeソフトの組み合わせ】

MicrosoftのOfficeの相性は、必ずしも良くない。
Excelファイルを開いてデータベースを読み込む・書き込む・特定のセルに書き込むといった動作は簡単だが、それ以外は「Ui要素」を捉えられない事が多い。例えばExcelマクロを割り当てたボタンや、Accessのフォーム上のボタンなども。
その場合は、ショートカット「Send Hot Key」を駆使する。マクロ(VBA)で出来ることは、UiPathよりVBAの方が可用性が高い。

09 RPA体験談【導入編:UI ExplorerでUi要素を確実に掴む】

Ui要素「Selector」をつかむ最終兵器は「UI Explorer」。
Selectorを、上手くキャッチできないときは、これを立ち上げて、
選択・調整・検証してSelectorに貼り付ければ良い。

 

10 RPA体験談【導入編:UiPathの変数】

変数の型についての説明。String・Boolean・DataTable・GenericValue型等。
Debugで確かめる時などは、WriteLineやMessgeBoxなどを使うが、String型しか表示できないので、.ToStringで変換する。

 

11 RPA体験談【事例編:UiPathのデータスクレイピング】

[事例編]
600名の状況確認のニーズが発生。いままでなら、全員に確認か、システム開発だったがRPA登場。
30分で開発終了。RPAの実力を実感。
最終的には3000名分に範囲を広げてチェックし、廻りもRPAの威力を実感。

12 RPA体験談【導入編:UiPathのNullの扱い】

Nullの対応
Ifを使って、String.IsNullOrEmpty(変数) or String.IsNullOrWhiteSpace(変数)で対応。
それ以外では、読み込み前のExcel側で文字列に予め変換しておいてしまうなども便利。

 

13 RPA体験談【実践編:Input dialog(入力ダイアログ)の選択肢にExcelの一覧を使う】

操作者とのインターフェイスは「Input dialogアクティビティ」。入力項目(ユーザIDやパスワード)にも使うが、配列のString型の変数設定で、メニュー選択フォームのように使うこともできる。
選択肢が流動的(都度変わる)な場合は、変数をDataRow型に読み込んで処理できる。例えばExcel上に1行でデータを作って読み込むなど。

14 RPA体験談【実践編:Invokeを使って他のプロジェクト(フォルダ)のxamlのアクティビティを利用する 】

開発をしている最中に他のプロジェクト(フォルダ)のxamlの一部を利用したいときは、裏技的に「InvokeWorkFlow(ワークフローファイルを呼び出し)」を使う。
OpenWorkFlow(ワークフローを開く)で、他のxamlファイルを呼びだせば良い。

 

15 RPA体験談【実践編:DataTableから必要分を抽出する 該当が無い時Nullのエラー回避】

.Selectと.copytodatatableでFilterのようにファイルを抽出できる。
ただし、データが存在しないとエラーになるので、
.Countで0のときの処理を書き込んでおく必要がある。

 

16 RPA体験談【実践編:Invoke Workflow File(ワークフローファイル呼び出し)の引数の使い方 】

Invoke Workflow Fileの引数(Argument)の使い方について
Invokeされる(呼び出される)側のxamlファイルのArgumentの設定方法と、
Invoke Workflow Fileアクティビティ上のInとOutの設定方法。

 

17 RPA体験談【実践編:UiPathのDataScraping データスクレイピング 上手く出来ないとき 】

0.一番簡単なスクレイピング
表全体からのデータ抽出では上手くいかないケースの見本と解決方法
1.ヘッダー行がセル結合しているとき
2.表以外に取り込みたいデータがあるとき
3.一つの表に見えて左右に2分割されているとき

18 RPA体験談【実践編:UiPathのデータテーブルの出力 WriteCSVと WriteRange】

データの出力に主に使うWrite Range(範囲に書き込む)とWrite CSV(CSV に書き込む)
WriteRangeは2通りあり、少し違う。私は「ただの」(と名付けた方の)WriteRangeを現在愛用中。
出力ファイルには、RPA_TEST20190715_0632.xlsx の様に、ファイル名の頭に「RPA」をつけ、最後に日付と時刻をつけるとわかりやすく、重複が無い。

 

19 RPA体験談【実践編:UiPathのGet Attribute(属性を取得)行番号や名前を取得する】

aanameで対象のelement要素を探し、行番号をGet取得する。
Clickアクティビティで、Getした行番号をクリックする。
“aaname”=elementの名前
“tableRow”=行番号

 

20 RPA体験談【事例編:作ってきたRPAともう一つの効果】

どんなRPAを作ってきたか?
Web絡みがほとんど。ExcelやAccesstとの連携はショートカット(SendHotKey)で対応
RPAの効果は時間短縮だけじゃない
脳にムダな汗をかかせない。RPAの効果として時間の節約以外に結構これが大きい。

 

21 RPA体験談【実践編:UiPathのFind Children(子要素を探す)を使って範囲内の全てを処理する】

Find Children(子要素を探す)で範囲を指定して、For Eachで範囲内の処理をする。
(処理:GetAttribute(表示名や行番号・列番号を取得)や クリックなど)
SelectorでURLも含めた範囲全体を指定して、Filterで項目を絞り込む
ScopeでFIND_CHILDREN(子供) もしくは FIND_DESCENDANTS(子孫)を指定する。
For Eachで TypeArgumentを UiPath.Core.UiElementにして、1個ずつ処理していく。


22 RPA体験談【実践編:UiPathのUiExplorerでUi要素の詳細を調べる】

Ui Explorerの活用方法
HighLightを使い、左のツリー構造をクリックしてターゲットのSelectorを見つける。
FIND_CHILDREN(子供) もしくは FIND_DESCENDANTS(子孫)の見分け方など。

 

23 RPA体験談【事例編:RPA(UiPath)で大幅な効率化を実現】

効率化という観点では、自部署だけでは無く、社内全体の業務を対象にできると、パフォーマンスは最大化できる。
事例紹介
効果:社員全体の効率化を実現(15,000時間/年の削減)
時間短縮として、アクティビティの待ち時間の数値を減らす、別の方法を考える、ロボットの複製を作るなどで対応。

 

簡単な、レコーディングの手順
上手くClickできないときは SimulateClick(クリックをシュミレート)に「v」をつける

 

久しぶりに見てみると、随分受講しやすくなっていました。
■良くなった点:学びたいところから学べる。サンプルダウンロードも自由。
■とはいえ、改めて見てみると感じる点:レッスンの途中で急に難しくなるので、無理して全部理解しようと思わない。
■Selectorセレクターの回はかっちり理解する
■はじめは受けなくても良い(と思われる)レッスン
■知っておいた方が良いこと(フリー版では、日本語で注釈をいれようとするとフリーズする。/・「戻る」が出来ないので、「コピー/貼り付け/切り取り」にする。)

 

■変数の心構え(初心者向け)(少し乱暴な…)
配列型は慣れてから/Scope(変数の範囲)は、とりあえず「全体」に/変数名のルールはちゃんと作っておく。
■試しに作るなら、電卓やらメモ帳をサンプルで使う教材が多いが、「やりたいこと」をやってみる方が良い
■作成手順:1.クリックと入力/2.Excelからのデータ読み込み/3.ForEachRowで読み込んだデータを1行ずつ処理する

27 RPA体験談【事例編:研修会でのQ&A】

先日のRPA事例発表での質問と回答
Qどんな業務がRPAに向いていますか?
Q修正のコストを考え、RPAを導入しないという選択肢については?
Qシステム更改に耐えるRPAを作るために考えていることは?
Qリスクについてはどう考えますか
Q野良RPAについては?

28 RPA体験談【導入編:UiPathの名前つけ】

1.プロジェクト名(xamlが入っているフォルダ名)
PublishしてUiRobotで使うときには以下の制限があるので注意が必要
(1)表示する文字数に制限がある/(2)記号は不可
2.変数名
(1)変数名は String型等がわかるようにした方が良い。
(2)変数ウィンドウの一覧がアルファベット順になるため、Sequence毎にわかるようにしておいた方がいい
3.Excelファイル名(入力/出力)
頭にRPAをつけると良い。スクレイピングデータでは年月日時間を出力名にすると良い。

29 RPA体験談【実践編(初級):Clickできない/まず触ってみよう[その3]】Find Element(要素を探す)を使う

上手くClickできない、上手く文字が入力できない…というときの原因として、
「画面遷移のタイミングより前にClickしてしまう」というのがある。
Click等のアクティビティで待ち時間の調整することで(Timeoutの時間を延ばすとか)解消できないときは、
Find Element(要素を探す)で要素を見つけてからClickすれば良い。

 

30 RPA体験談【実践編:UiPathのAccessとの連携】

Accessとの連携は主にショートカットを使って対応する。
1.Accessの起動
2.フォームを操作する
3.テキストボックスに文字を入れる
4.ボタンをクリックする
5.タブで進むためには、フォーム上の「タブオーダー」の整備が必要

31 RPA体験談【実践編(初級):デバッグ(エラー対応)】
1.エラーになる箇所をつきとめる(Message BoxやLog Messageを使う)
2.動かないアクティビティだけをSequenceから取り出して、スタートにつなげる
3.あれこれ試行錯誤する。
①空振りしている場合は、Find Elementアクティビティを追加する。
②Selectorを修正する/③SimulateClickに「v」をつける などなど

 

32 RPA体験談【実践編:関数やら式やらの雑記帳】

改行/日付処理/ParseとConvertの違い
ファイルやフォルダ関連
Substring と Instr/配列での切り分け
Replace と Contain
時間設定(単位)


33 RPA体験談【事例編:手作業をそのままRPA化しない】

手作業をRPAに移行する際は、「発想の転換」が必要。
人間は「まとめて処理」した方が効率的だが、
ロボットは「1件ずつ処理」した方が効率的なケースも多い。
【参考ワークフロー】
Excelファイルから、IDと行番号を読み込み
→1件ずつID入力→登録→Excelファイルに登録状況を書き込む

34 RPA体験談【実践編:Citrixモード(仮想環境における画像認識処理)】

Citrix(仮想化)モードについて
Selectorが使えない環境での開発
①クリックするのはImage(画像)
②Find Imageや Image Existsを使う
③Anchor(アンカー=錨)の活用
④クリックが難しいときはショートカットを使う

 

35 RPA体験談【実践編:Ifを使った条件分岐が複雑になるとき_Invoke Workflow Fileで別のxamlに飛ばす/Dictionary変数を使う】

Ifを使った条件分岐が深くなりすぎたときの対応

ForEachRowの中でInvoke Workflow Fileで別のxamlに飛ばすときのサンプル
(DataRowを受け渡す)
Dictionary変数は活用すると便利