Uipath select文でDataRow取得!
二つのデータテーブルから顧客番号(仮)で紐づけて、値をルックアップしたいというシーンがありました。
その顧客番号は参照先のデータテーブルに複数存在しうる、そして複数存在する場合は全ての行データが必要になります。
「データテーブルを検索」では一つしか取得出来そうにないので、アクティビティを使うなら「データテーブルをフィルター」だと思いますが(私調べ)、select文に慣れておきたい私はあえてselect文を使用しました。
例
下記のようなデータで、顧客番号ごとに金額の集計をしたいようなシーンです。
参照先には同じ顧客番号が複数存在しますので、こんな時にどうやって金額を取り出すのかやってみます。
*Dt_参照元
顧客番号 | 氏名 | 住所 |
---|---|---|
1111111 | 鈴木 | 東京都 |
1111112 | 木村 | 東京都 |
1111113 | 佐藤 | 東京都 |
1111114 | 中尾 | 東京都 |
*Dt_参照先
顧客番号 | 商品名 | 金額 |
---|---|---|
1111111 | A | 1000 |
1111111 | B | 2000 |
1111112 | C | 5000 |
1111114 | A | 1000 |
select文で絞り込む
最初に顧客番号で行データを絞り込むselect文です。
変数「参照元顧客番号」に参照元の顧客番号を代入しているものとします。
右辺↓
Dt_参照先.select("[顧客番号] = '"+ 参照元顧客番号 +"'")
戻り値はDataRow型の配列になりますので、戻り値を受け取る変数「ary_DataRow」はDataRow型の配列で定義する必要があります。
金額の値を取り出す
配列に入っているDataRow型のデータから金額を取得していきます。
配列の各要素を見ていく必要があるので、「繰り返し(コレクションの各要素)」のアクティビティを使用します。
プロパティでの設定はデータ型をDataRowにしておきます。
まずは金額の値を取り出してみます。
列ヘッダーが「金額」なので、下記のようにしたらOKです。
item("金額").ToString
メッセージボックスで表示してみましょう。
実行!
しっかり表示されました。
今回はメッセージボックスで表示するまでですが、これを変数に入れて足し算の式を用意したら集計が可能です。
まとめ
●データテーブルから特定の条件に合う行を取り出す
DataTable.select("条件式")
※戻り値はDataRow型の配列
●DataRow型の配列は「繰り返し(コレクションの各要素)」処理する
●繰り返しの中で、特定の列の値を取得する
item("金額").ToString
※現在処理されている値をitemとした場合
DataRowはデータテーブル各行の繰り返しの中でしか扱ったことがなかったため、結構調べて理解したので勉強になりました。
以上です。
Discussion