【UiPath】2つのDataTableを比較し新規・更新・削除データを抽出する

やりたいこと

UiPathで、2つのデータテーブルを比較して、新規に追加されたレコード、更新されたレコード、削除されたレコードを抽出します。

DataTable1
DataTable2

例えばDataTable1を基準に、DataTable2と比較して、差分を抽出します。
<新規>
A-001-009:すいか:2000
A-001-010:メロン:1200
A-001-011:いちご:680
A-001-012:パパイヤ:250
A-001-013:ライチ:380

<更新>
A-001-002:みかん:★480
A-001-005:★ゴールデンキウイフルーツ:150
※ なんか違和感あるなと思ったらゴールデンキウイじゃなくてゴールドキウイだな…。

<削除>
A-001-003:バナナ:238
A-001-001:りんご:158
A-001-006:ぶどう:450

インターフェイス(引数)

物理名 I/O 説明
prmDtOriginal DataTable in 比較の基準リスト
prmDtThisTime DataTable in 基準リストと比較するリスト
prmKeyIndex Int32 in データをマッチングするためのユニークキーの位置
prmUpdateMark String in 更新個所につける印(不要であれば””)
prmDtInsert DataTable out 新規追加されたレコード
prmDtUpdate DataTable out 更新されたレコード
prmDtDelete DataTable out 削除されたレコード

変数

物理名 スコープ 説明
columnIndex Int32
rowIndex Int32

処理の流れ

【UiPath】2つのDataTableを比較し新規・更新・削除データを抽出する

返却領域生成

【UiPath】2つのDataTableを比較し新規・更新・削除データを抽出する
返却値の領域は、prmDtOriginalをクローンして生成します。

prmDtInsert = prmDtOriginal.Clone
prmDtUpdate = prmDtOriginal.Clone
prmDtDelete = prmDtOriginal.Clone

更新・削除レコード取得

prmDtOriginalを回して、「データテーブルを検索」でprmDtThisTimeから同じキーを持つレコードを探します。

「データテーブルを検索」の設定。

汎用的に使えるように、どの位置にキーがあるかは呼び出し元から引数でもらいます。

キーがヒットしたらレコードが更新されているか確認、ヒットしなければ「prmDtOriginalにあってprmDtThisTimeにない」、削除レコードです。

更新データ取得

今度はカラムを末尾まで回していって、prmDtOriginalとprmDtThisTimeを比べます。
【UiPath】2つのDataTableを比較し新規・更新・削除データを抽出する

カラムの値に差分があれば、引数で受け取った印をつけ、更新フラグを立てます。

3 COMMENTS

mk

はじめまして。突然失礼いたします。
現在2つのデータテーブルを扱う処理を勉強中の者です。

こちらの内容を参考にさせていただきたく手順通りに進めようと思ったのですが、ところどころわからないところがありました。
(Invoke Methodの引数や、このワークフローはどこから呼び出しされているものなのか、等)
どこかにサンプルのxamlファイルを置かれていたりはしていらっしゃらないでしょうか。

宜しければご返信お待ちしております。

返信する
misk

匿名さん、mkさん

コメントありがとうございます。
わたし自身はUiPathに飽きてしまい、xamlは見当たらなくなってしまいました。

引数は「インターフェイス(引数)」のところに書いてあります。
呼び出し元は作っていなくて、呼び出される側だけです。

返信する

コメントを残す

メールアドレスが公開されることはありません。