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 式を含むもの)に挿入してください。

3.B.1. 活動内容

ここでは、OpenRPAでのActivityの使い方に関する質問を取り上げます。

3.B.1.1. 要素が存在することを確認する方法

まず、GetElementActivityのMinResultsパラメータを0に変更する必要があります。

次に、使用するGetElementアクティビティに応じて、ElementsまたはResultパラメータに変数を設定する必要があります。

そして、一番外側、つまりメインのシーケンスにIfアクティビティを追加する必要があります。ElementsまたはResultパラメータの変数をitemと定義した場合、item.Length = 0– またはitem.Length <> 0に対してチェックし、Elementが存在しないことをチェックする必要があります。

3.B.1.5. OpenFlow 内部でSecureString(https://docs.microsoft.com/en-us/dotnet/api/system.security.securestring?view=netcore-3.1) として格納されているパスワードを、OpenRPA 内部で利用できるように変換するにはどうすればよいですか?

GetCredentialsActivity で取得したSecureStringSystem.Net.NetworkCredential(string.Empty, securePassword).Password に代入することができます。ここで、string.Emptyは、上記の Activity 内でPasswordパラメータとしてキャプチャされた変数です。

また、Unsecure Passwordパラメータを使用して取得することもできます。しかし、これはかなり安全性の低い方法です。

3.B.2.1. Node-REDに変数や引数を返す方法

変数はワークフローのローカルスコープに収まるため、Node-REDに渡すことはできません。

一方、引数はmsgオブジェクトの一部として渡されます。したがって、例えばユーザがname という引数を定義していた場合、関数ノードを使ってmsg.payload.namemsg.nameに代入します。

REST Service (Node-REDとの統合)のセクションで、ユーザは手近な例を見つけることができます。

3.B.3. セレクタ

ここでは、OpenRPAの内部でセレクタを使用する際の質問について説明します。

4.1.1. Node-REDとは?

Node-REDは、私たちのすべてのツール(OpenRPAと OpenFlow)、そしてハードウェアデバイス、API、さらにはオンラインサービスを、新しく興味深い方法で連携させるためのプログラミングツールです。バックエンド」のプロセスフローデザイナー&インテグレーターとお考えください。Node-REDと OONスタック間の通信は、MQTTプロトコル(RabbitMQを使用)を通じて行われます。

各ノードは、一緒に配線されると意味のあるタスクを形成するステップを表します。また、入力、処理、出力という共通のパターンに従っている。Node-REDは、情報処理システムのミドルウェアのように機能することが重要です。単に入力をワークフローに接続し、ワークフローがそれを処理することを可能にします。