やりたいこと
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 |
処理の流れ

返却領域生成

返却値の領域は、prmDtOriginalをクローンして生成します。
prmDtInsert = prmDtOriginal.Clone prmDtUpdate = prmDtOriginal.Clone prmDtDelete = prmDtOriginal.Clone
更新・削除レコード取得

prmDtOriginalを回して、「データテーブルを検索」でprmDtThisTimeから同じキーを持つレコードを探します。
「データテーブルを検索」の設定。
汎用的に使えるように、どの位置にキーがあるかは呼び出し元から引数でもらいます。

キーがヒットしたらレコードが更新されているか確認、ヒットしなければ「prmDtOriginalにあってprmDtThisTimeにない」、削除レコードです。
更新データ取得
今度はカラムを末尾まで回していって、prmDtOriginalとprmDtThisTimeを比べます。


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





サンプルソースを公開していただけると嬉しいです。
はじめまして。突然失礼いたします。
現在2つのデータテーブルを扱う処理を勉強中の者です。
こちらの内容を参考にさせていただきたく手順通りに進めようと思ったのですが、ところどころわからないところがありました。
(Invoke Methodの引数や、このワークフローはどこから呼び出しされているものなのか、等)
どこかにサンプルのxamlファイルを置かれていたりはしていらっしゃらないでしょうか。
宜しければご返信お待ちしております。
匿名さん、mkさん
コメントありがとうございます。
わたし自身はUiPathに飽きてしまい、xamlは見当たらなくなってしまいました。
引数は「インターフェイス(引数)」のところに書いてあります。
呼び出し元は作っていなくて、呼び出される側だけです。