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オブジェクトは大文字と小文字を区別することに注意してください。

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

このセクションでは、MySQL Workbenchを使用して、データを保持するデータベースと テーブルを作成します。

以下のコード部分をコピーして、MySQL Workbench 内の新しいクエリに貼り付けてください。

CREATE DATABASE `using_datatables` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;CREATE TABLE using_datatables.`airbnbdata` (   `id` int NOT NULL AUTO_INCREMENT,   `datasetId` bigint DEFAULT NULL,   `placeName` varchar(255) NOT NULL,   `hostId` bigint DEFAULT NULL,   `hostName` varchar(255) DEFAULT NULL,   `neighbourhoodGroup` varchar(255) DEFAULT NULL,   `neighbourhood` varchar(255) DEFAULT NULL,   `latitude` double DEFAULT NULL,   `longitude` double DEFAULT NULL,   `room_type` varchar(255) DEFAULT NULL,   `price` bigint DEFAULT NULL,   `minimum_nights` bigint DEFAULT NULL,   `number_of_reviews` bigint DEFAULT NULL,   `last_review` varchar(255) DEFAULT NULL,   `reviews_per_month` double DEFAULT NULL,   `calculated_host_listings_count` bigint DEFAULT NULL,   `availability_365` bigint DEFAULT NULL,   PRIMARY KEY (`id`));

備考

ここで、データセット内のobject型の特徴がvarchar(255)として設定されていることがわかります。これは、OpenRPA内のSystem.Data.String型からマッピングされています。これはOpenRPAのSystem.Data.Doubleデータ型にマッピングされています

ここで、クエリパネル内の「 クエリ実行」ボタンをクリックします。

images/openrpa_workflow_examples_using_datatables_create_schema_and_table.png

すべてがうまくいくと、MySQL WorkbenchAction Outputセクションに以下のようなメッセージを表示します。

images/openrpa_workflow_examples_using_datatables_schema_and_table_created.png

これで完了です。これでユーザーは続行できるようになりました。

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

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

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

images/openrpa_workflow_examples_using_datatables_create_data_table.png

ここで、New DataTable変数プレースホルダーの中に、DataTableを保存する変数を作成します。この例では、変数名をsqldtとします。

備考

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

また、DataTable の Array of columnsプレースホルダを含むフィールドの中にヘッダを定義しなければなりません。データセットの機能はすべてDataTableオブジェクトに追加され、デフォルトのintデータ型は前のセクションで定義した 主キーとなります。これ以降、ヘッダは{"id", "name", "host_id", "host_name", "neighbourhood_group", "neighbourhood", "latitude", "longitude", "room_type”,価格” となります。 room_type", "price", "minimum_nights", "number_of_reviews", "last_review", "reviews_per_month", "calculated_host_listings_count", "availability_365"} のように設定します。

このDataTableの目的は、.csvファイルから収集したすべてのデータを保存し、後でDataViewを使ってそこから収集したデータをフィルタリングして表示することである。

images/openrpa_workflow_examples_using_datatables_create_sql_storage_data_table.png

3.A.A.6. バッチ番号の追加Column.

このセクションでは、AddDataColumnアクティビティを使用して、処理中のエントリの現在のインデックスを含むデータカラムをDataTableに追加する方法、およびMySQL Workbench を使用してテーブルを変更する方法について学習します。

まず、AddDataColumnアクティビティをメインシーケンスに ドラッグします。これは、現在処理中のエントリーのインデックスに対応するbatch_noを追加するものです。

DataTableプレースホルダーの中にsqldtを挿入します。

新しい 名のプレースホルダーの中にbatch_noを挿入します。

Browse for types… オプションを使用して、ドロップダウン内のデータ型をSystem.Data.Int64として選択します。

images/openrpa_workflow_examples_using_datatables_adddatacolumn_batchno.png

ここで、SQL テーブルを変更し、BIGINTフィーチャーであるbatch_noも含めるようにします。

MySQL Workbench内のairbnbdata SQL テーブル内をマウスの右ボタンでクリックし、Alter Table…ボタンをクリックしてください。

images/openrpa_workflow_examples_using_datatables_alter_table.png

新しいタブが開き、airbnbdata SQL Tableに関するすべての設定が含まれ、新しいカラムを追加することができるようになります。まず、SQL テーブル 内の機能の最後までスクロールダウンし、空のフィールドを2回クリックする必要があります。

images/openrpa_workflow_examples_using_datatables_alter_table_column_prompt.png

Column Nameの右下に、batch_noと入力します。次に、Datatypeの下にある空のフィールドをダブルクリックし、BIGINTと入力します。また、NNチェックボックスをクリックすると、このフィールドがNULLになることはありません。

images/openrpa_workflow_examples_using_datatables_alter_table_empty_column_prompt.png

ここで「適用」ボタンをクリックします。変更点、つまり実際に実行されたSQL クエリを確認できるページが表示されます。そして、Executeをクリックします。

images/openrpa_workflow_examples_using_datatables_adddatacolumn_batchno_apply_page.png
images/openrpa_workflow_examples_using_datatables_alter_table_filled_column_prompt.png

これで完了です。 これでユーザーは、最初にデータを保持するDataTableオブジェクトとSQL テーブルに batch_noを両方追加することに成功しました。

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

このセクションでは、前のセクションで作成されたデータベースへのMySQL接続を設定する方法を学びます。

まず、ワークフローをモジュール化するために、Sequenceアクティビティをメインシーケンスにドラッグし、その名前を「Connect to Database」に変更します。

images/openrpa_workflow_examples_using_datatables_connect_to_database.png

備考

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

次に、Database ScopeアクティビティをConnect to Databaseシーケンスにドラッグします。MySQLを使用するため、パラメータを手動で設定する必要があります。

まず,ConnectionStringを 「Server=localhost;Port=3306;Database=using_datatables;Uid=${USERNAME};Pwd='${PASSWORD}'; 」として,${USERNAME}はデータベースに設定するユーザー名(与えられたデータベースに対して書き込みができることも必要),${PASSWORD}は与えられたユーザー名のパスワードとします.

次に、DataProvider を設定します。この例では “MySql.Data.MySqlClient” です。

最後にDataSourceを設定しますが、これは「using_datatables」です。これは、スキーマとテーブルの作成で作成したデータベース または スキーマで 、MySQL内にデータを保持することになります。

これで、接続が正常に設定されました

images/openrpa_workflow_examples_using_datatables_database_scope.png

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

このセクションでは、既存のSQL テーブルを DataTableに取り込む方法を学びます。

まず、[ データベース 接続の開始]シーケンスに[クエリの実行]アクティビティをドラッグします。

編集フィールドに「select * from airbnbdata;」を挿入 実行 する クエリ です 。これは、すべてのデータを取得するために実行されるSQL クエリです。このステートメントは単純なselectで構成されていますが、このクエリは必要なだけ複雑にすることができることに注意してください。

編集フィールドにsqlrawdtを挿入する 結果の 保存 なる DataTableです これはデータが保存されるDataTableオブジェクトです。

このDataTable sqlrawdtの目的は、後でSQL Tableに修正・コミットされるデータを保持することです。OpenRPAで クエリActivityを実行すると、結果のオブジェクトはDataViewとなり、SQL Table には 全く接続されません。そこで、多くのクエリの結果を持つsqlrawdtを操作し、後の段階でDataTableからの更新Activityを使用して、全ての変更を一度にコミットすることができます。

images/openrpa_workflow_examples_using_datatables_execute_query.png

3.A.A.9. データセットをループする

この節では、収集したデータセットをループし、データを適切なデータ型にパースし、IfActivity を使ってデータセット内に含まれる異常なエントリにデフォルト値を割り当てる方法を学習します。最後に、sqldtと sqlrawdtの両方に行を追加します。このセクションの最後に、与えられたデータセットの 特徴をそのデータ 型とともに索引付けするための参照表があります。

まず、Foreach DataRowアクティビティをDatabase Scopeアクティビティ内のシーケンスにドラッグします。Enter a VB Expressionを含むフィールドの中に、amsterdamdtを挿入します。

Read ExcelWorkflowの例では、Read Excelアクティビティによって返されたDataTableからセルを読み取るのと同様に、データセットの各特徴は変数に割り当てられる必要があります。

ここでは4種類のデータが扱われています。これらはそれぞれ,SQL テーブルの bigint,double,date,varchar(255)に対応する。

Int64型の場合、ユーザーはInt64.Parseメソッドを使用してデータを解析する必要があります。

id_dataset変数の値をInt64.Parse(row.Item(0).ToString)とし、型をSystem.Data.Int64 とする例が示されています。続いて、残りの変数も設定します。これらは、“host_id“,price,minimum_nights,number_of_reviews,calculated_host_listings_countandavailability_365 です。

images/openrpa_workflow_examples_using_datatables_loop_through_dataset_assign_int64.png

この特定のInsideAirBnBデータセットでは、Double型のフィーチャーは、NULL値(つまり variable.ToString が “” を返す)か、CDbl()を使用して適切に変換できる数値のどちらかになります。

このように、NULL値と有効値を区別するために、IfActivityを使用しています。 また、row.item(xx)[...]を何度も記述しないように、一時変数<featureNameValue>をいくつか使用しています。

下図はその例で、temp 変数に latitudeValue、テーブルに挿入される実際の値をlatitudeとして設定しています。残りの変数も設定してください。これらはlongitudeと reviews_per_monthです。

images/openrpa_workflow_examples_using_datatables_loop_through_double_variables.png

DateTime型では、異常な入力に対してチェックするためにtemp 変数を 使用する必要があります。ここでは、先ほど示したIfActivityも使用していますが、唯一の違いは、デフォルト値が0ではなくNew System.DateTime(2011,10,12,0,0,0)と任意に設定されている点です。

images/openrpa_workflow_examples_using_datatables_loop_through_date_variable.png

最後の型はString です。ユーザがすべきことは、行のi番目のエントリを見つけ、データセット内の指定されたエントリとマッチさせ、.ToStringメソッドでStringにキャストすることです。OpenRPAは0からインデックスを開始することをユーザーに思い出させるのに便利です。

images/openrpa_workflow_examples_using_datatables_loop_through_string_variables.png

各指標の参照表は以下のとおりです。

id_dataset – Int64 – 0 場所名 – 文字列 – 1 host_id – Int64 – 2 host_name – 文字列 – 3 neighbourhood_group – 文字列 – 4 neighborhood – 文字列 – 5 latitude – Double – 6 longitude – Double – 7 room_type – 文字列 – 8 price – Int64 – 9 minimum_ights – Int64 – 10 number_of_views – Int64 – 11 last_views – DateTime – 12 reviews_permonth – Double – 13 calculated_reviews_permonth – String – 4.8 価格 – Int64 – 9 最小宿泊日数 – Int64 – 10 レビュー数 – Int64 – 11 last_review – DateTime – 12 reviews_per_month – Double – 13 calculated_host_listings_count – Int64 – 14 availability_365 – Int64 – 15 “$.

備考

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オブジェクトは大文字と小文字を区別することに注意してください。

3.A.A.A. IDとバッチ番号のインクリメント変数

このセクションでは、ユーザーはAssignActivityを使用して、以下のように変数idと batch_noをインクリメントします。

まず、「割り当てアクティビティ」を「データ 処理 ロジック」シーケンスの末尾にドラッグします。

idid + 1 に代入する。

別の割り当てアクティビティをデータ 処理 ロジックのシーケンスの最後にドラッグします。

batch_noを batch_no + 1に代入する。

images/openrpa_workflow_examples_using_datatables_loop_through_increment_variables.png

3.A.A.B. DataRowsの追加とSQLテーブルの更新

sqldt: 値をフィルタリングして表示するために使用 –sqlrawdt:SQL テーブルを更新し、DataTableアクティビティから更新を使用して変更をコミットするために使用します

まず、AddDataRowアクティビティをデータ 処理 ロジックのシーケンスの最後にドラッグします。

挿入 する DataTableを含むフィールドにsqldtを挿入します。

DataTable カラムの配列を含むフィールド内に{id, id_dataset, place_name, host_id, host_name, neighbourhood_group, neighbourhood, latitude, longitude, room_type, price, minimum_nights, number_of_reviews, last_review, reviews_per_month, calculated_host_listings_count, availability_365, batch_no}をインサートしてください。

もう一度、AddDataRowアクティビティをデータ 処理 ロジックのシーケンスの最後にドラッグします。

挿入 する DataTableを含むフィールドにsqlrawdtを挿入します。

DataTableの カラムの配列を含むフィールドに{id, id_dataset, place_name, host_id, host_name, neighbourhood_group, neighbourhood, latitude, longitude, room_type, price, minimum_nights, number_of_reviews, last_review, reviews_per_month, calculated_host_listings_count, availability_365, batch_no}を 挿入してください。

images/openrpa_workflow_using_datatables_update_datatables.png

DataTable ActivityからUpdateを Database Scopeのシーケンスにドラッグする。

TableName入力フィールドの中に"airbnbdata "を挿入します(つまり、 行を 挿入 するテーブルを含むフィールドです)。

SQLrawdtを DataTableの入力フィールドに挿入します – すなわち 結果を 保存 する DataTableを含むフィールドです。

images/openrpa_workflow_using_datatables_update_from_datatable.png

WriteLineをシーケンスの最後にドラッグして、""Successfully added data into MySQL DB. “を挿入します。 追加された : " + result.ToString"テキストフィールド(VB 式を含むもの)に挿入してください。