3.A.8.4. OpenRPAでワークフローを呼び出す

さて、いよいよOpenRPAでワークフローを起動し、処理ロジックを工夫していきます。

フローはすでにデプロイされているので、ユーザーはワークフローをOpenFlowリポジトリと同期させる必要があります。

前述の作業を行うには、OpenRPAのリボン内にある「Reload」ボタンをクリックします。OpenFlowリポジトリ内にある全てのワークフローがOpenRPAにリフレッシュされます。

images/openrpa_workflow_example_rest_invoke_openflow_click_reload_button.png

OpenRPAのデザイナーで、Invoke OpenFlowアクティビティをメインシーケンスにドラッグします。

呼び出したいRPAワークフローを選択します。ここでは、ChuckAPIを選択します。

images/openrpa_workflow_example_rest_invoke_openflow_drag_activity.png
images/openrpa_workflow_example_rest_invoke_openflow_chuck_api_selected.png

備考

注意:Node-REDがフローの実行を終了すると、msg.payloadに設定されたものがロボットに戻ってきます。NodeREDにmsg.payload.personが存在すれば、そこに戻ってきたものは自動的にOpenRPAのpersonという変数に格納されます。

3.A.8.5. 冗談の失敗を作成するワークフロー

ChuckAPIのプロセスが設定されたので、ユーザーは通常のプロセス実行時に何らかの障害が発生した場合に実行されるワークフローの設定に進むことができます。

新しいワークフローを作成します。この例では、REST Workflow Example - Joke Failedという名前で、ワークフローを指定します。

images/openrpa_workflow_example_rest_create_joke_failed_empty_workflow.png

WriteLineアクティビティをメインシーケンスにドラッグします。

images/openrpa_workflow_example_rest_create_joke_failed_drag_write_line.png

ここで、Chuck Norris API のジョークの内容を含むエントリを返すデフォルトの変数を作成する必要があります (「変数、引数、およびインポート」ボックス内)。この変数のエイリアスは、Chuck Norris API Random Joke(https://api.chucknorris.io/jokes/random)に示すように、valueです。

テキスト入力フィールドまたはプロパティボックスで、出力値をエイリアス値の新しい変数に設定します。

images/openrpa_workflow_example_rest_create_joke_failed_set_text_value.png

備考

Ctrl+Kを押すと、入力フィールドに入力する際に自動的に変数が作成されますが、画面下部の変数ボックスをクリックして手動で作成することもできます。右側には、変数に代入する値を入力します。

このワークフローは、OpenRPAの無限の可能性を示す一例として使用されているに過ぎない。ChuckAPIのジョークを.csvや .xslxファイルに読み込んで、そのデータを扱うワークフローを起動したり、MongoDB Entityに渡したり、前述したように自動化には限界がないのです。

3.A.8.6. チャック・ノリス・ジョークを評価する

ここでは、Chuck Norris APIから取得したジョークがジョークであるかどうかを確認するための評価処理を設定します。

ここで使われている検証基準は、返されたJSON 辞書の 値の項目の内容が、”Chuck Norris “という文字列を含んでいるかどうかというものである。

まず、Chuck Norris API のジョークの内容を含むエントリを返すデフォルト変数を、「変数、引数、およびインポート」ボックス内に作成する必要があります。この変数のエイリアスは、Chuck Norris API Random Joke(https://api.chucknorris.io/jokes/random) で見ることができるように、valueです。

REST ワークフロー 例のワークフローで、Ifアクティビティをデザイナへドラッグします。

images/openrpa_workflow_example_rest_evaluate_chuck_norris_joke_drag_if.png

アクティビティ本体またはプロパティボックスの条件」入力フィールドにvalue.Contains("Chuck Norris")を入力します。

images/openrpa_workflow_example_rest_evaluate_chuck_norris_joke_set_evaluation_condition.png

3.A.8.7. Node-REDでの評価失敗プロセスの設定

ChuckAPIプロセスの評価に失敗した場合に、さらに実行される適切なフローをユーザーが設定する必要があります。

ワークフローロジック

Workflow Inノードをワークスペースにドラッグします。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_in_drag.png

Workflow In のプロパティで、OpenFlow ワークフローが割り当てられるキューを定義するQueue nameを設定します。

キュー名は完全に任意であり、ユーザは好きな名前を選ぶことができる。この例では、jokefailed と設定されています。

備考

Node-RED ワークスペース内のノードのプロパティにアクセスするには、指定されたノードをダブルクリックします。ノードのプロパティボックスが表示され、それ自体に必要な各入力フィールドが表示されます。

RPAチェックボックスをオンにすると、このフローのワークフローがOpenRPAエージェントから呼び出されるようになります。

Name」入力フィールドにワークフローの名称を設定します。ここでも、名前は任意に設定します。この例では、「Joke Failed」と設定されています。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_in_double_click.png
images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_in_set_properties.png

RPA WorkflowまたはRobotノードをワークスペースにドラッグします。このノードにより、評価失敗時にREST Workflow - Joke Failedワークフローを呼び出すことができます。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_robot_drag.png

ワークフローを呼び出すロボットと呼び出されるワークフローをロボットノードのプロパティに設定します。また、ノードのLocal queue nameと Nameを設定します。

ローカル キュー 名は任意で、ロボットインスタンスのキューイングに使用されるキューを設定するために使用されます。

Nameパラメータは、Node-RED内部での表示のみに使用されます。

この例では、Local queue nameを jokefailedNameを Invoke Joke Failed Workflowに設定しています。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_robot_set_properties.png

Workflow InノードとRobotノードを接続します。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_robot_connect_node.png
images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_robot_connected_node.png

備考

ノードの接続は、Ctrlキーを押しながら、各ノードの外側にあるポートという灰色の長方形をクリックするだけで簡単にできます。クリックしたままでも接続できますが、筆者はCtrlキーを使う方が使いやすいと感じています。

Email Outノード(アクティビティの右端にある文字アイコンのノード)をワークスペースにドラッグします。このノードは、評価時にエラーが発生した場合、選択したメールにmsg.payloadオブジェクトの JSON 文字列を送信する役割を担います。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_email_drag.png

Invoke Joke Failed Workflowノードの一番上のポートを、emailノードの外側のポートに接続します。

備考

ノードの接続は、Ctrlキーを押しながら、各ノードの外側にあるポートという灰色の長方形をクリックするだけで簡単にできます。クリックしたままでも接続できますが、筆者はCtrlキーを使う方が使いやすいと思います。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_email_connect_node.png
images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_email_connected_node.png

Eメールノードのプロパティを設定します。

Toは、受信者からの電子メールアドレスを指します。

Useridは、メールを送信するアカウントのUserIdです。(例: ドメインなしの電子メール – 電子メールがadmin@openiap.io の場合、UserId はadmin になります)

パスワード– 送信者からのメールアカウントのパスワード。

この例では、ダミーの電子メール(admin@gmail.com)を設定し、メッセージの送受信に使用する。ここで注意すべきは、ユーザーがEメールを変更しなければ、ワークフローは明らかに機能しないということです。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_email_set_properties.png

備考

ユーザーが Gmail の SMTP サーバを使用している場合、Less secure アプリのアクセスを許可する設定が正しいことが必要です。さもなければ、ワークフローの実行時にエラーメッセージが表示されます。そのためには、Less secure app access(https://myaccount.google.com/lesssecureapps) を参照し、Allow less secure appssettings がON になっていることを確認します。

Workflow Outノードをワークスペースにドラッグします。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_out_drag.png

Workflow Out」ノードを「Eメール」(現在は「admin@gmail.com」)ノードに接続します。

備考

ノードの接続は、Ctrlキーを押しながら、各ノードの外側にあるポートという灰色の長方形をクリックするだけで簡単にできます。クリックしたままでも接続できますが、筆者はCtrlキーを使う方が使いやすいと感じています。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_out_connect.png
images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_workflow_out_connected.png

画面左上の赤い「Deploy」ボタンをクリックして、フローをデプロイします。

images/openrpa_workflow_example_rest_evaluate_setting_evaluation_failed_deploy.png

備考

Node-REDのフローに変更があった場合、ユーザーはそのフローをデプロイする必要があり、その変更は現在そのフローを使用しているロボット全体に伝搬されます。

3.A.8.8. ジョーク失敗のワークフローを呼び出す

あとは、ChuckAPIプロセスが正しく評価されない場合に備えて、REST Workflow Example - Joke Failedをワークフローが呼び出すようにする必要があります。

そのためには、Invoke OpenFlowアクティビティをElseシーケンスにドラッグして、Ifアクティビティの中に入れます。

images/openrpa_workflow_example_rest_evaluate_invoke_joke_failed_drag.png

ここで、起動するワークフローとして「冗談の 失敗」を選択します。

images/openrpa_workflow_example_rest_evaluate_invoke_joke_failed_select.png

このように、REST Workflow Example - Joke Failedアクティビティは、評価プロセスで失敗した場合に自動的に起動されます。

3.A.8.9. 出力ロジック

バルーンチップの表示」アクティビティを、「If」アクティビティの内側の「Then」シーケンスにドラッグします。

images/openrpa_workflow_example_rest_output_logic_show_balloon_tip_drag.png

表示されるバルーンヒントの タイトルを挿入します。

ユーザーに表示されるメッセージを挿入します。この例では、変数のです。

備考

Ctrl+Kを押すと、入力フィールドに入力する際に自動的に変数が作成されますが、画面下部の変数ボックスをクリックして手動で作成することもできます。右側には、変数に代入する値を入力します。

images/openrpa_workflow_example_rest_output_logic_show_balloon_tip_set.png

3.A.8.A. ワークフローの完成

以下に、ワークフローの出力と終了を含むスニペットを示します。また、それ以降のワークフロー全体も同様です。

images/openrpa_workflow_example_rest_output.png
images/openrpa_workflow_example_rest_1st_workflow_finished_1.png
images/openrpa_workflow_example_rest_1st_workflow_finished_2.png
images/openrpa_workflow_example_rest_2nd_workflow_finished_1.png
images/openrpa_workflow_example_rest_node-red_flow.png

3.A.9. PDFファイルの読み込みと解析

この例では、PDF ファイルからデータを抽出し、収集したデータを正規表現(https://ryanstutorials.net/regular-expressions-tutorial/)で処理し、CSV ファイルに保存するワークフローを作成します。

まず、データの抽出に使用するインボイスファイルをダウンロードする必要があります。このリンク(https://github.com/open-rpa/examples-files/raw/master/bpa-doc/parse_pdf/Horkheimer%20Technologies%20LLC.pdf)で入手可能です。

その手順は以下の通りです。

  1. PDFからテキストデータを抽出します。

  2. Match Regular Expression グループ。

  3. 結果を格納するDataTableを作成します。

  4. DataTableに行を追加する。

  5. DataTableをCSVに保存します。

3.A.9.1. PDFからデータを抽出する

このセクションでは、PDFからテキストデータを抽出し、変数に保存する方法を学習します。

まず最初に、ユーザーはReadPDFアクティビティをメインシーケンスにドラッグする必要があります。

images/openrpa_workflow_example_read_and_parsing_pdf_drag_readpdf.png

次に、...ボタンをクリックして、データを読み込むファイルを選択します。これが先ほどダウンロードしたインボイスファイルです。

ユーザーは、ReadPDFアクティビティによる抽出で生成されたテキストを保持するために使用される変数も作成する必要があります。この場合、変数はresultです。これは、プロパティボックスで利用可能なAllTextパラメータ内に設定する必要があります。

images/openrpa_workflow_example_read_and_parsing_pdf_configure_readpdf.png

備考

OpenRPAは、アクティビティ/プロパティに必要な正しい型を持つ新しい変数を自動的に作成することができます。プロパティボックスで新しい変数を作成する場合、変数名を入力した後、入力フィールド内にキャレットを置いたまま、Ctrl+Kを押します。

3.A.9.2. 正規表現群に一致する

さて、ユーザーはMatchesアクティビティを使用して、ReadPDFが返す文字列からデータのグループを抽出します。

まず、MatchesActivityをメインシーケンスにドラッグします。

images/openrpa_workflow_example_read_and_parsing_pdf_drag_matches.png

最初の入力ボックスには、プレースホルダー「The input string to match against」が入っており、ユーザーは変数の内容、つまり前のセクションで取り込んだテキストを挿入することになります。

2つ目の入力ボックスには、データをグループに分けるために使用するRegExパターンを挿入します。ここで使われているのは、( \b[a-zA-Z0-9$.\-() ]*)です。正規表現についての詳しい説明は、RyansTutorials Regular Expressions(https://ryanstutorials.net/regular-expressions-tutorial/)を参照してください。RegExパターンは文字列としてキャプチャされるので、引用符で囲む必要があることをユーザーに思い出させるのは興味深いことです。また,必要に応じて,グループのマッチングやパターンのテストにRegex101(https://regex101.com/) を使うことが推奨される.

また、Properties Boxの Resultsパラメータで、マッチングを保存する変数(この例ではinvoiceResults)を設定する必要があります。これは、Match listまたは単にMatch[]というタイプで構成されます。下の画像にあるように

images/openrpa_workflow_example_read_and_parsing_pdf_configure_matches.png

3.A.9.3. 結果を格納するDataTableの作成

このセクションでは、結果を格納するためのDataTableを作成し、そのヘッダーを設定します。

まず、Matchesアクティビティの中にあるCreateDataTableアクティビティをシーケンスにドラッグします。

images/openrpa_workflow_example_read_and_parsing_pdf_drag_createdatatable.png

ここで、ユーザーはNew DataTable変数プレースホルダーの中にDataTableが保存される変数を作成する必要があります。この例では、変数名をinvoiceDataTableとします。

備考

Ctrl+Kを押すと、入力フィールドに変数を入力する際に自動的に作成されます。そうでない場合は、画面下部の変数ボックスをクリックして、手動で作成することができます。右側には、変数に代入する値を入力します。

また、Array of DataTable columnsplaceholderの中にヘッダを定義する必要があります。この例では、請求書から会社 請求書 番号合計 残高 3つのフィールドのみを取得するため、ヘッダーは{"会社 名", "請求書 番号 ", "合計 残高"}と定義されます。

images/openrpa_workflow_example_read_and_parsing_pdf_config_createdatatable.png

備考

DataTable オブジェクトは、同じ名前のクラスからDataSet オブジェクト 含まれるインメモリデータの1つのテーブルに対応します。Excel ファイルを読み込むと、それは自動的にDataSetクラスに割り当てられ、すべてのシートは DataTableクラスに保存されます-Excel ファイル内のシートの数だけ。ここで、DataTableオブジェクトは大文字と小文字を区別することに注意しましょう。

3.A.9.4. DataTableに行を追加する

ここでユーザーは、PDF ファイルから収集したデータを、前のセクションで定義したDataTableに追加することになります。

まず、AddDataRowアクティビティをMatchesアクティビティ内に挿入されたシーケンスにドラッグします。

images/openrpa_workflow_example_read_and_parsing_pdf_drag_adddatarow.png

ここで、ユーザはプレースホルダに挿入するDataTableの中に、データを挿入するDataTableを挿入する必要があります。

また、挿入するデータもユーザーが定義する必要があります。

会社 名は invoiceResultsリスト内のNo.1のMatch オブジェクトです。invoiceResults(0).ToStringとして代入されます。

invoiceNumberは invoiceResultsリスト内のNo.2のMatch オブジェクトです。invoiceResults(2).ToStringとして代入されます。

invoiceTotalBalanceは、No.3のMatch オブジェクトである。3のMatchオブジェクトをinvoiceResultsリスト内に生成します。invoiceResults(44).ToStringとして代入されます。

したがって、Array of DataTable columnsのプレースホルダの中に追加される行は、{invoiceResults(0).ToString, invoiceResults(2).ToString, invoiceResults(44).ToString} になります。以下のようになります。

images/openrpa_workflow_example_read_and_parsing_pdf_configure_adddatarow.png

3.A.9.5. データテーブルをCSVに保存する

これで、ユーザーは作成したDataTableをCSVファイルで保存することになる。

まず、WriteCSVファイルをメインシーケンスにドラッグします。

images/openrpa_workflow_example_read_and_parsing_pdf_drag_writecsv.png

ここで、...ボタンをクリックして、データを保存するCSVファイルのファイルパス(この例ではinvoice1.csv)を挿入します。

次に、そのプロパティ・ボックス内のDataTableに取り込んだ、DataTableを挿入します。この例では、この変数は前のセクションで定義されたDataTable、すなわちinvoiceDataTableです。

最後に、Delimiterパラメータを", "に変更します。

3.A.A. OpenRPA.Databaseアクティビティ、DataTable、DataView

この例では、AirBnB のデータから.csvデータセットを読み込み、MySQLデータベースにデータを挿入するワークフローを作成します。また、Inside AirBnB(http://insideairbnb.com/get-the-data.html)で公開されているlistings.csv Amsterdamのデータセットファイルの短縮版を使用することにします。私たちのバージョンは、169のエントリのみを含み、ここ(https://github.com/open-rpa/examples-files/raw/master/bpa-doc/parse_pdf/invoice1.csv )で利用可能であり、このワークフローの例で使用されるものである。

MySQL がインストールされた認証方法も暗号化されてはいけません。つまり、データベースへの接続にDataProvider MySql.Data.MySqlClientが使用されるので、 レガシーモードに設定する必要があります。

注意: これは非常に複雑な例なので、ユーザーはデータベーススキーマについて知っていて、適切なMySQL サーバーが動作していることが期待されます。しかし、怖がらないでください!たとえすべてのステップを自分で再現しようとしなくても、この例を見るだけで多くのことを学ぶことができます。

  1. CSVファイルダウンロード

  2. Pandasを使ったデータセットからのレビュー型

  3. CSVからDataTableにデータセットを読み込む

  4. MySQL内部でデータを保持するスキーマと テーブルを作成します。

  5. 結果を格納するDataTableを作成する

  6. バッチ番号欄の追加

  7. データベースへの接続

  8. SQLテーブルをDataTableにフェッチする

  9. データセットのループ

  10. IdとBatch No.の変数をインクリメントする。

  11. データローの追加とSQLテーブルの更新

  12. データへのクエリの実行 挿入されたデータの可視化

  13. DataViewを使ってデータをフィルタリングする

3.A.A.1. CSVファイルをダウンロードする

ここでは、インターネットからファイルをダウンロードし、特定のファイル パスを使用してフォルダーに保存する方法について説明します。

まず、DownloadFileアクティビティをドラッグして、...ボタンをクリックして、データセットを含むファイル パス(ここでは"C: \BPAWorkflow ExamplesUsing DataTables")を入力し、Saveボタンをクリックします。また、アクティビティにDownload Datasetという名前を付けます。今回の場合、このファイル パスは 「C:㊧Workflow ExamplesUsing DataTables㊧airbnb_review_listings.csv 」になります。

また、データセットのダウンロード元URLを プロパティボックスhttps://github.com/open-rpa/examples-files/raw/master/bpa-doc/parse_pdf/invoice1.csv)内に挿入します。

すでに指定したファイル パスに ファイルをダウンロードしている場合に備えて、OverwriteパラメータもTrueに設定してください。

images/openrpa_workflow_examples_using_datatables_drag_download_file.png
images/openrpa_workflow_examples_using_datatables_download_file_select_filepath_click_save.png
images/openrpa_workflow_examples_using_datatables_download_file_insert_url.png

ここでOpenRPAのリボン内にある再生ボタンをクリックすると、ファイルがダウンロードされます。また、指定したフォルダにファイルが存在するかどうかを確認することをお勧めします。

備考

アクティビティのパラメータで設定した名前(DisplayName)を変更するには、アクティビティの名前を2回クリックし、希望の名前を入力してリターンキーを押すか、プロパティボックスでパラメータDisplayNameを設定する方法があります。

3.A.A.12. 挿入したデータにクエリを実行し、データを可視化する

このセクションでは、SQL Tableに挿入されたデータを操作するためのクエリ・アクティビティの使用方法を学びます。

まず、[Execute Non Query]アクティビティを[Database Scope]シーケンスにドラッグします。このアクティビティは、単にSQL クエリを実行し、影響を受ける行の数をInt32変数に保存します。

ここでは、任意の項目、つまり217の行を削除し、その結果の値をreturn217変数に保存することにしています。

クエリフィールド 実行 するクエリを含むフィールド)の中に「DELETE from using_datatables.airbnbdata WHERE id = 217;」を挿入してください。これにより、id番号217を含むエントリーが削除されます。ActivityのProperty Boxの Resultプロパティにその名前を入力し、Ctrl+Kを押して return217という変数にその結果を保存します。行が正しく削除されると、値1を含むInt32変数が返されるはずです。

ここで、[クエリ実行]アクティビティを[データベース スコープ]シーケンスにドラッグします。

SELECT * FROM using_datatables.airbnbdata;” をQueryフィールド( 実行 するQuery を含む)に挿入し、resultsDTDataTableフィールド( 結果を 保存 する DataTable 含む)に挿入してCtrl+Kキーを押して作成します。これにより、airbnbdata SQL テーブルからすべてのエントリーが選択され、resultsDT DataTableに保存されます。

images/openrpa_workflow_using_datatables_execute_non_query_and_execute_query.png

ここでは、任意の項目(たとえば213)の場所名を取得し、それを変数place_name_value に保存します。

ここで、Execute Scalar<>アクティビティをDatabase Scopeシーケンスにドラッグします。ウィンドウが開き、ユーザーはクエリによって返されるタイプ(この例ではString)を選択することができます。また、「SELECT place_name FROM using_datables.airbnbdata WHERE id = 213;」をクエリーフィールド 実行 するクエリー)に挿入し、「place_name_value」を結果フィールド( クエリーの 結果)に入力してください。このクエリは、ID番号213を含むエントリから場所名の値を選択し、place_name_value変数に保存します。

images/openrpa_workflow_using_datatables_execute_scalar_string.png
images/openrpa_workflow_using_datatables_execute_scalar_string_activity.png

これでユーザーは挿入されたデータを視覚化することができます。

最初の値 –return217– は影響を受ける行数を含む数値で、実行されるクエリは1行に影響すると予想されるので、ユーザーはIfActivity を使用してその値が1に等しいかどうかをチェックし、目標が達成されたかどうかに応じて出力にデータを書き込むことができます。

IfアクティビティをDatabase Scopeシーケンスにドラッグします。条件入力フィールド(VB 式を 含むフィールド)の中に、return217 = 1を挿入します。

WriteLineアクティビティをIfアクティビティの中のThenシーケンスにドラッグし、Textフィールド、つまりEnter a VB Expressionを含むフィールドに「Successfully deleted row no. 217」と挿入します。

次に、WriteLineアクティビティをIfアクティビティ内のElseシーケンスにドラッグし、Textフィールド(Enter a VB Expressionプレースホルダーを含むフィールド)に「Unable to delete row no. 217」と挿入します。これは、アクティビティが217に等しいidを含む行を削除できなかった場合にのみ発生します。

WriteLineアクティビティをDatabase Scopeシーケンスの末尾にドラッグします。Enter a VB Expressionプレースホルダーを含むTextフィールドに、「place_name of row no. 178: " + resultsDT.Rows(178).Item(2).ToString」を挿入します。これにより、Execute Queryアクティビティで収集したテーブルの178番目の行のplace_nameの値が表示されます。

最後に、WriteLineアクティビティをもう1つ、Database Scopeシーケンスの最後にドラッグします。 番号 213の場所名 " + 場所名_値“を挿入してください。これで、Execute Scalar<>アクティビティで実行されたクエリから収集された値が表示されます。

images/openrpa_workflow_using_datatables_visualize_data.png

3.A.A.13. DataViewを使用してデータをフィルタリングする

ここで、ユーザーはDataViewタイプを使ってデータをフィルタリングすることになります。

まず、AssignActivityを一番外側のシーケンスにドラッグして、sqldtviewを sqldt.DefaultViewに代入します。また、その型をSystem.Data.DataViewに設定し、OpenRPAがフィルタリングできるようにします。

images/openrpa_workflow_using_datatables_assign_dataview.png

次に、もう一つのAssignActivityを一番外側のシーケンスにドラッグして、sqldtview.RowFilterに 「id > 162」を代入します。 これにより sqldt DataTableの idが162より大きい値のみを取得するように フィルタリングされます。

images/openrpa_workflow_using_datatables_assign_rowfilter.png

ここで、Foreach DataRowActivityをドラッグして、データをフィルタリングできるようにします。プロパティボックスに DataViewとして sqldtviewを挿入します。

images/openrpa_workflow_using_datatables_for_each_datarow_filter.png

最後に、WriteLineアクティビティをThenシーケンスに追加し、"Place name of row " + row.Item(0).ToString + " is: " + row.Item(2).ToStringを挿入して、指定した行のplace_name値を表示させます。

images/openrpa_workflow_using_datatables_for_each_datarow_filter_drag_writeline.png

3.A.A.2. Pandasを使ってデータセットから型を確認する

まず、pandasライブラリ(Python Data Analysis Library)を使って、データセットに含まれる型を調べてみましょう。

Pythonシェルを初期化する – ここでは、すでにPythonと pandasライブラリがインストールされていると仮定しています。もしインストールされていない場合は、Googleが作成したColab Platform(https://colab.research.google.com/)を使用することができます。ただし、ファイルをFilesサイドバーにアップロードし、前のセクションで設定したファイル パス(この例では"C:\BPAWorkflow ExamplesUsing DataTables.csv" )の代わりに相対 パス、つまり./airbnb_review_listings.csvを使用する必要があります。

シェルを使っているので、エスケープ文字(˶‾᷄ ‾᷅˵)を入れてください。これで、ファイルパスが "C:㊧Workflow Examples㊧Using DataTables㊧airbnb_review_listings.csv" になりました。

以下のコードを実行します。

>>> import pandas as pd>>> df = pd.read_csv("C:\\BPA\Workflow Examples\\Using DataTables\\airbnb_review_listings.csv")>>> len(df.dtypes)>>> df.dtypes

これで、データセットに含まれるすべての型が表示されます。以下のコードに見られるように。

>>> len(df.dtypes)16>>> df.dtypesid                                  int64name                               objecthost_id                             int64host_name                          objectneighbourhood_group               float64neighbourhood                      objectlatitude                          float64longitude                         float64room_type                          objectprice                               int64minimum_nights                      int64number_of_reviews                   int64last_review                        objectreviews_per_month                 float64calculated_host_listings_count      int64availability_365                    int64dtype: object

つまり、このデータセットには16個の特徴量、つまりさまざまな型を持つ変数が含まれていることになる。int64型、float64型、object型など、後者はStringオブジェクトと同じように扱われます。また、異なるデータ型でデータベースを作成し、OpenRPAの内部で正しい型を持つ変数を設定しなければならないことも意味しています。

型がわからない場合は、「型とは何か」をご覧ください。

3.A.A.3. CSVからDataTableにデータセットを読み込む

このセクションでは、.csvファイルをDataTableに読み込む方法を学びます。

ここでユーザーは、ReadExcelアクティビティをデザイナーにドラッグし、.csvファイルのファイル パスを 「...」ボタンで選択するか、プロパティボックス内の「Filename」パラメータに直接貼り付けて選択する必要があります。

先に設定したパラメータに加えて、ユーザーは.csvファイルを読み込むDataTableを設定する必要があります(この例ではamsterdamdtです)。また、.csvファイルの区切り文字を定義するDelimiter(ここでは","文字) も設定します。

備考

Ctrl+Kを押すと、入力フィールドに変数を入力する際に自動的に作成されます。そうでない場合は、画面下部の変数ボックスをクリックして、手動で作成することができます。右側には、変数に代入する値を入力します。

images/openrpa_workflow_examples_using_datatables_read_csv.png
images/openrpa_workflow_examples_using_datatables_read_csv_select_file.png

備考

OpenRPAでは、DataTableは値を保持するために使われる2次元の非シリアライズ可能なオブジェクトに相当します。これはij列の行列と考えることができます。i行は.Rows(n)属性でアクセスできます。ここでnはアクセスしたい行の番号です(0から始まります)。j個の列には、.Item(n)属性を使ってアクセスします。nは、アクセスしたい列の番号-0から始まる-です。ここで、ユーザがRows属性にアクセスしなければならないことを思い出してください。したがって、ユーザがデータ テーブルの 3 行目の 2 列目にアクセスしたい場合は、.Rows(2).Item(1)属性を使用することになります。

備考

.NET APIでは、DataTable オブジェクトは、同じ名前のクラスからDataSet オブジェクトに含まれるインメモリデータの1つのテーブルに対応します。Excel ファイルを読み込むと、それは自動的にDataSetクラスに割り当てられ、すべてのシートは DataTableクラスに保存されます – 0からExcel ファイル内のシートの量に番号が付けられています。ここで、DataTableオブジェクトは大文字と小文字を区別することに注意してください。