【UiPath】実行中にデータをデバッグ出力する

# はじめに

この投稿は、RPAツールのUiPathで「ディクショナリやデータテーブルなどのデータをデバッグ」する方法についての投稿です。

パッと出てこないことがあるので、備忘録として。

# 配列やリスト型のデバッグは簡単

配列やリストなどの「値が連続して格納されている」シンプルな構造であれば、`String.Join` で結合して出力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/220743ca-22b1-cba7-d513-1df8daf38ed1.png)

<メッセージにセットしている値>
`String.Join(",", 配列)`
`String.Join(",", リスト)`

実行すると、以下のようにログ出力されます。

```
配列の内容）{"はるみ","せとか","紅まどんな"}
　↓
はるみ,せとか,紅まどんな

リストの内容）{"日向夏", "水晶文旦", "紅まどか"}
　↓
日向夏,水晶文旦,紅まどか
```

ちなみにJoinは「Strings.Join」もありますが、こちらは引数の順番が違うので注意が必要です。

| メソッド | 第一引数 | 第二引数 | 名前空間 |
|:-|:-|:-|:-|
| String.Join  |  区切り文字 | 配列  | System  |
| Strings.Join  | 配列  | 区切り文字  |  Microsoft.VisualBasic |


# ディクショナリのデバッグ

ディクショナリは「Key-Value」形式のリストなので「Key-Valueの文字列」のリストにしてからJoinで結合します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/9812138f-db7a-f265-d45c-8f5f0d43c800.png)

<メッセージにセットしている値>
`String.Join(Environment.NewLine, From kv in ディクショナリ Select String.Format("[{0}] {1}",kv.Key, kv.Value))`

実行すると、以下のようにログ出力されます。

```
ディクショナリの値）{"1", "甘平"}, {"2", "不知火"}
　↓
[1] 甘平
[2] 不知火
```

ディクショナリが複数あって、何度もデバッグする場合は「出力式を描くのが面倒」なので、Func型の変数にして定義すると楽です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/52734366-0bc3-98bf-70e0-29b9491432f1.png)

デバッグ出力時は、この変数を使用して出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/a25098e7-4558-7cb8-a6b8-c597400ab44c.png)


<既定値に入れる値>
`Function(dc As Dictionary(Of String, Object)) String.Join(Environment.NewLine, From kv in dc Select String.Format("[{0}] {1}",kv.Key, kv.Value))`

# データテーブルのデバッグ

データテーブルは [データ テーブルを出力 (Output Data Table) アクティビティ](https://docs.uipath.com/activities/lang-ja/docs/output-data-table) で出力することも出来ますが、一旦変数に格納する必要があります。

<データ テーブルを出力アクティビティを使用してデバッグ出力するフローの図>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/bc4bea0f-86f4-231c-02b6-11d6666b239d.png)

1行でデバッグもできます。データテーブルは「各行 X 列名」の形式ですが、ディクショナリと同じ要領で1行を文字列化したリストにして、Joinで結合します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/0c9a147f-9460-94af-bf6d-2811eb29fa11.png)

<メッセージにセットしている値>
`String.Join(",", From c As System.Data.DataColumn In データテーブル.Columns.OfType(Of System.Data.DataColumn) Select "[" & c.ColumnName & "]") & Environment.NewLine & String.Join(Environment.NewLine, From r As DataRow In データテーブル.Rows.OfType(Of Datarow) Select String.Join(",", r.ItemArray))`

長いですね。。。
実行すると、以下のようにログ出力されます。

```
[品種],[旬]
あすみ,2～3月
つのかがやき,1月中旬～2月中旬
```

（ディクショナリと同じく）データテーブルが複数あって、何度もデバッグする場合は「出力式を描くのが面倒」なので、Func型の変数にして定義すると楽です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/b5149699-7613-9f4f-6cf8-d7061bc52f7a.png)

<既定値に入れる値>
`Function(dt As System.Data.DataTable) String.Join(",", From c As System.Data.DataColumn In dt.Columns.OfType(Of System.Data.DataColumn) Select "[" & c.ColumnName & "]") & Environment.NewLine & String.Join(Environment.NewLine, From r As DataRow In dt.Rows.OfType(Of Datarow) Select String.Join(",", r.ItemArray))`

デバッグ出力時は、この変数を使用して出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/498badf0-7565-312f-95af-e7286533335c.png)


# 終わりに

UiPathで「データをデバッグ出力する」場合に、役に立てば幸いです。

この記事が参考になったら、 LGTMをお願いします。
閲覧ありがとうございました。