UiPathアカデミー解説

UiPathアカデミーLV3課題 年次レポートの生成 解説とお手本

UiPathアカデミーのLV3 Advancedクラスは、REFrameworkを用いた自動化ワークフローの理解を促すコースです。

アカデミーのコースにある解説が一部分かりにくいため、解説していきます。

UiPathアカデミー Level3 Advanced 上級トレーニングコースはこちら

 

今回は課題②の「年次レポートの生成」を解説します。

そもそも、REFramework(Robotic Enterprise Framework)が分からないという方は、こちらの記事をご覧ください。

UiPathで良いとされるワークフロー ReFrameworkを解説UiPathのReFrameworkが分からない。 そんな方のために、RPAコンサルタントとして多くのお客様に導入経験のあるプロコ...

 

リソース

アカデミーから参照できるドキュメントを参考にしてください。

・業務プロセス設計所

・自動化の手引き(作成のヒント)

 

自動化に使用するサイトです。

ACME社ウェブアプリケーション(https://acme-test.uipath.com/)

 

自動化する業務

業務プロセス設計書を見ても、実際に何をやるのかイメージが付かない。

そんな人のために、まずは自動化する業務について解説します。

やりたいことは月次レポートをまとめて年次レポートの作成する業務です。

作成には、ACME社のウェブサイトを使用します。

 

まず、ACME社ウェブアプリケーションにログインします。

ACME社のウェブアプリのIDとパスワードはアカデミーと同様のものを使用します。

 

ログイン後は、以下のようなダッシュボードが表示されます。

この中の「Work Items」を使用します。

 

WorkItemsの中には実行可能なタスクが入っています。

この中でTypeがWI4の「Generate Yearly Report for Vendor」が自動化すべき業務です。

虫眼鏡アイコンから詳細を開くと顧客情報が表示されます。

ここからTaxIDを取得します。

次にHomeに戻って、Reportsボタンをホバーすると現れる「Download Monthly Report」をクリックして、月次レポートのダウンロードページに移動します。

ここでは、取得したVendor TaxIDと月、年を入力して「Download Report」ボタンをクリックすることでレポートが取得できます。

 

1月から12月までのレポートをダウンロードしてきて、それを結合して1つのファイルにします。

作成したファイルは、Upload Yearly Reportからアップロードするという流れです。

見習いタロー
見習いタロー
これは自動化すべき面倒な作業ですね
プロコアラ
プロコアラ
実際に自動化するのは結構大変だけど、このまま手動でやっていくっことを考えると、やはり自動化したほうがいいよね

 

ワークフロー作成のポイント

ガイドで分かりにくい箇所を中心に解説しています。

ガイドで簡単にわかる箇所は説明を割愛しているため、ガイドの補足資料としてご覧いただければ幸いです。

 

前回のセキュアハッシュの算出では、キューを用いない方法で処理を作成しました。

今回は、Orchestratorのキューを使用します。

よって、プロセスを2つ準備します。

キューを格納するディスパッチャープロセス

キューを処理するパフォーマープロセス

リンクは、Githubリポジトリに飛びます。実際のワークフローを確認したい方はローカルにダウンロードしてみてください。

ライバル島袋
ライバル島袋
へへへ、これで課題はクリアだぜ!
プロコアラ
プロコアラ
コピー、ダメ。絶対!

 

注意:下記リポジトリを参考にしており、ガイドとは作り方が異なる箇所があります。

https://github.com/miyaichi/GenerateYearlyReportForVendor-Dispatcher

https://github.com/miyaichi/GenerateYearlyReportForVendor

 

Orchestrator

課題ではOrchestratorのキューを使用します。

Orchestrator上から、InHouse_Process4キューを追加します。

 

 

ディスパッチャー

ディスパッチャープロセスのワークフローについて解説します。

 

Configファイル

自動化の手引きの通りです。Settingsシートに下の3つを追加しています。

System1_URL https://acme-test.uipath.com
System1_Credential System1_Credential
QueueName InHouse_Process4
DownloadReports Data\Temp

 

ConstantsシートのMaxRetryNumberを2に変えます。システム例外が発生した際に再試行する回数です。

 

System1共通処理

System1は、課題①のセキュアハッシュのプロジェクトから持ってきます。

エクスプローラーからコピーするのが速いと思います。プロジェクトパネルのリフレッシュボタンを押すと表示が反映されます。

 

KillAllProcess

KillAllProcesses.xamlに追加するKill Process アクティビティでは、プロセス名に「”iexplorer”」を指定します。

 

InitAllApplication

InitAllApplication.xamlから呼び出すログイン処理の引数は以下のように設定します。

InitAllSettings.xaml実行後のため、in_ConfigにConfig.xlsxの設定が入っています。

 

GetTransactionData

ここは少しわかりにくいです。

TransactionItemを今回はString型として定義してページ毎にTransactionとして扱います。

GetTransactionDataにはTransactionNumberが渡されるため、これをページ番号として扱うこともできるのですが、TransactionItemはGetTransactionDataステートから次のステートに移動する条件として使われるため使用します。

要素を検出(Element exists)アクティビティを使用して、ページが存在すればページ番号を格納して、無ければ”Nothing”を格納します。

ページ番号アイコンのセレクターを指定するのですが、ページ番号を変数に置き換えます

ガイドではタグがliになっていたのですが、実際に取得できたセレクタはAとなります。

タグAのままだとうまくいきません。カレントのページは、Aではなくtagがspanとなります。よって、ガイドの通りにカレント、非カレントで共通で使用できるtagのliを使用しましょう。

変数に修正するときは、式エディタを修正しましょう。

使わないのですが、out_TransactionIDにもページ番号を入れてます。

 

Xamlファイルの呼び出し時にエラーが発生した場合の対処方法

Process.xamlなど、Mainプロセスから他のxamlファイル呼び出しでエラーが発生した場合は引数の右辺値をいったん””を指定するなどしてOKを選択。再度元の値に戻してみてください。

TransactionItemをQueueItem型からStringに変更した際に、右辺値はQueueItem型から切り替わっていないためエラーとなる場合があります。

 

Process

要素の出現を待つアクティビティを使用しているが、このアクティビティを使用しないと画面切り替え前にデータを取得しようとするため。

これは、様々な場面で使用できる小技です。

 

データテーブルを抽出する際は、データテーブルをFor eachでDataRow型の変数として1つずつ取り出します。

プログラミング知識のない人にはわかりにくいと思いますが、抽出には以下のようにStringのEqualsを使用して抽出します。

rowにカーソルを当てると分かりますが、ItemはStringとして定義されているため、StringクラスのEqualsが使用できるというわけです。

Queueは以下のようにして指定します。

in_Config(“OrchestratorQueueName”).ToString

 

ガイドのようにコレクション情報の追加からWIIDを設定します。

ここでコレクションとして定義しておくことでWIID以外の情報も追加できます。例えばDate列が欲しければ、追加しておけば後で取り出せます。

 

セレクタはディスパッチャー同様、タグliを使用するようにしましょう。

「要素が出現したとき」アクティビティがデフォルトだと上手く動きませんでした。

(Studio ver. 19.10)

設定を変更しましょう。下記設定でうまく動きました。

 

これでディスパッチャープロセスの作成は完了です。

分かりにくいですが、ディスパッチャープロセスのデータの取得のメイン処理はProcessの中で行っています。

そしてその前段のGetTransactionDataステートでは、ページ番号を使用してトランザクションの数を求めています。

ライバル島袋
ライバル島袋
GetTransactionDataでデータ取得やってねーだと!
プロコアラ
プロコアラ
ややこしいね。フレームワークに入れているだけだから仕方ないけど。

 

パフォーマー

取得したキューを使用した処理を実際に行うパフォーマーについて解説します。

 

Config

ディスパッチャーとほぼ同じですが、DownloadReportsを追加しています。

後から出てきますが、レポートの保存先です。

Settingsのリトライ回数を変える必要はありません。

 

Main

クリーンアップとして、レポートを格納するフォルダを削除、再作成する処理がありますが、これは存在しないフォルダが無い場合に削除しようとするとエラーとなります。

この処理のように、エラーとなっても問題ない場合は、エラー発生時に実行を継続オプションを有効にしてエラーが発生しないようにしてください。

 

GetTransactionData

Get Transaction Itemでキューの値を変更してください。

デフォルトでは、OrchestratorQueueNameになっていますが、Configで指定しているQueueNameに変えてください。

ここはガイドに従わずに、OrchestratorQueueNameを使うような設計にしたほうがよかったですね。。。

 

System1_ExtractVendorInformation

詳細ページの文字列からTaxIDを取得します。

ここで面倒なのが、TaxIDを取得したいのですが、Vendor情報がPタグの中にまとめられていて、簡単に取得できないという点です。

 

「テキストを取得」アクティビティで取得した結果を、VendorInformation変数に格納します。以下の文字すべてが格納されます。

以下の式でTaxIDの番号だけを取得します。

VendorInformation.Split(Environment.NewLine.ToCharArray)(0).Substring(“TaxID: “.Length)

VendorInformationはString型にしているため、Split関数を使用できます。

Split関数は、引数に区切り文字を指定して、その結果を配列として返してくれます。

今回は改行を表すEnvironment.NewLine.ToCharArrayで区切ります。

そして1番目(配列は0から始めるため0を指定)を取り出します。

Substring関数はインデックスを引数に指定して、X文字列目から取り出します。

つまりは”TaxID: ”は7文字。Lengthは1から数えますが、Indexは0から数えます。

Indexに7を指定すると、左から8番目の文字から抽出します。

よって、TaxIDが取得できるわけです。

見習いタロー
見習いタロー
だめだー、難しい!もう手動でやってやるー!
マスター与田
マスター与田
あきらめたら、そこで試合終了ですよ
見習いタロー
見習いタロー
安西先生・・・!!! RPAがしたいです・・・
プロコアラ
プロコアラ
・・・・。次に進んでも、いいかな?

 

念のため、TaxIDが空の場合には例外を発生させるようにしています。

StringのIsNullorEmpty関数を使用します。文字列が空の場合はTrueを返します。

 

System1_NavigateTo_Dashboard

ACME System 1のどのページにいてもいいようにワイルドカードを使用します。

セレクタの編集で以下のように変更してください。

System1_NavigateTo_MonthlyReport

マンスリーレポートページに移動するためのプロセスを作成します。

ホバーアクティビティを使用します

マウスをボタンに載せておかないと表示されないメニューに使用します。

セレクタを画面から取得する際は、F2ボタンで停止する技を駆使して取得します。

System1_CreateYearlyReport

月次レポートのダウンロード、年次レポートの作成を行います。

out_YearlyReportPathでパスを作成する際は、フルパスを使用します。

path.Combine関数を使用します。

path.Combine(Environment.CurrentDirectory, in_ReportsDownloadPath, “YearlyReport-” + in_Year + “-” + in_TaxID +  “.xlsx”)

ガイドから一部修正している点は、ConfigファイルでReportsDownloadPathを作成すると記載がありますが、DownloadReportsと重複しているため、DownloadReportsを使用します。

 

コンボボックスの選択では、コンボボックスの中身を開いた後、表示される年のセレクターを取得します。

ここでポイントがシミュレートクリックを有効にすることです。

クリックをシミュレートにチェックしてTrueにしておきます。

シミュレートクリックは画面上に表示されていないUI要素も操作することができます。

今回のようなコンボボックスの中身や、画面外のUIを操作する場合は使用してください。

Webアプリケーションでは認識率も高く速度が速いため、使用することをお勧めします。

以下のように変数化すれば、完成です。

“<html title=’ACME System 1 – Reports – Download Monthly Report’ /><webctrl aaname='” + In_Year + “‘ parentid=’searchForm’ tag=’A’ />”

 

続いては月の選択ですが、Monthsという変数は一時的に使用するだけのため使用せず直接For Eachの中で配列を入れています。ガイドから少し変えています。

ちなみに、ForEachアクティビティのTypeArgumentはStringに変えて、文字列型の配列に変えておきましょう。

レポートで存在しない場合はウィンドウが表示されます。

これはVendorIDに適当な値、年月を設定してDownloadボタンを押すと表示できます。

出力する変数は「ReportNotFound」としています。

 

有効なデータがある場合は、WorkItemsにあるVendorIDを入れてみます。

すると、ダウンロードウィンドウが表示されますのでセレクターを取得して処理を追加していきます。

 

例外処理の実施

今回のダウンロードでは、例外の扱い方もたくさん出てきます。

おさらいしておきましょう。

 

要素が表示されるのを待つ

要素が表示されることを待つときは、タイムアウト時間に気を付けましょう。

例外が発生するときにエラーウィンドウがポップアップ表示される際にタイムアウト時間を設定しておかないと、正常時にも不要な待ち時間が発生してしまいます。

オプションのタイムアウト時間を3秒などに変更しておきましょう。

 

パラレル処理の実施

同一処理を実施しているにもかかわらず、別の表示が出るような場合はパラレル処理を入れて対応しよう。

リポジトリのSystem1_UploadYearlyReport.xamlを参考にしていただきたい。

パラレル処理では、エラーが発生しても処理を継続するオプションを有効にしておきましょう。

 

ABOUT ME
律野桜哉
本業で、外資系企業でRPAコンサルタントとして大企業向けにRPAの導入をお手伝いしています。副業でも大企業以外の方にもRPAを使っていただけるようにコアワカRPAスクールやUdemyで講師をしてUiPathの魅力を伝えています。Udemyのベストセラー講師。お得なクーポンをサイト内で配布中。
お得なUdemy割引クーポンでRPAを動画で学ぼう

RPA、UiPathについて動画形式で学べるコアワカのUdemy講座を
いつでもお得な価格で受講できるクーポンを発行しています。

研修にも使用できる書籍もこちらから購入が可能です。

動画を受講したい場合はボタンをクリックしてください。
クーポンコードが適用されたUdemyコースのリンク一覧ページに移動します。