UiPath Data Service の使い方

# はじめに

- 本記事では、UiPath Data Service の使い方を紹介します。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.10 バージョンのもので構成しています。

# UiPath Data Service とは

https://docs.uipath.com/ja/data-service/automation-cloud/latest/user-guide/introduction

端的に説明すると
***テナントをスコープとして、簡単にDBスキーマを定義・作成・利用できるサービス***
です。

![DataServiceの使い方.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/1572c19f-3af1-eb38-1ba9-6b6cd52873c7.jpeg)

::: note warn
データの登録や更新については、権限で制御が可能ですが、すべてのユーザーに読取権限がつくため、取り扱うデータには注意が必要です。（Everyone（グループ）に読取権限が付いており、手元の動作を見る限り権限をOFFにしての更新もできない）
***※Everyone（グループ）自体は削除が可能なため、削除した場合は閲覧者から制限することもできます。***
:::

::: note
なお、***アクセス可能なエンティティを制御したい***場合、「アクセス権を管理（画面上部の三点ボタン）」＞「新しいロールを作成」より設定可能です。

![DataServiceの使い方24.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/1c6f9009-7fe7-c638-8dd5-9ab1f1754aa4.jpeg)
:::

# Studio での使い方

## 事前準備

アクティビティを使うにあたって、まず Data Service にエンティティを作成します。

![DataServiceの使い方3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/68d5526b-25c4-0592-6e8d-3609e0ac90bb.jpeg)

「新しいエンティティを作成」からDBスキーマ（新しいテーブル）を1つ追加します。

![DataServiceの使い方4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/5fd28f4d-8a3e-2bc5-0e22-32be176afb83.jpeg)

本記事では、稼働日のデータを登録して、稼働日判定をおこなう例を紹介します。
登録するデータは
- Year：日付
- Flag：稼働日か否かの真偽値

![DataServiceの使い方5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e768c6be-d109-1409-26d2-e5d9fc3501a1.jpeg)

Year（日付）は「yyyy-MM-dd」の形式で指定するため Text とし、
Flag（稼働日か否か）は『Yes/No』とします。
テストレコードを2件（Yes/No それぞれ1件）を登録します。

![DataServiceの使い方6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/5c9a3590-f779-ae9d-51f5-8a3fdb9f17cd.jpeg)

## Studio での実装手順

![DataServiceの使い方8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/2e781fb9-0c6c-e7f6-28a2-2f3aee129dc8.jpeg)

標準で Data Service のエンティティ（DBのテーブル）に対する検索・登録・更新・削除をおこなうアクティビティが用意されています。***※一括登録・更新・削除もできます。***

検索アクティビティを配置します。
下のキャプチャでは Entity 欄にエンティティ（DBのテーブル）が指定できていますが、***ここでエンティティを選択するためにはプロジェクトへのエンティティのインポートが必要です。***

![DataServiceの使い方9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/78c93605-72f2-25e1-590e-7ac4e48c0c23.jpeg)

:::note
プロジェクトパネルのエンティティ＞右クリック＞ ***「エンティティを管理」*** から、操作したいエンティティ（DBのテーブル）をインポートできます。

![DataServiceの使い方10.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7e912e61-f26a-d7ea-c63e-ab84ccbca323.jpeg)

![DataServiceの使い方7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b1aa0b57-3d3b-a378-789b-33edd262cd87.jpeg)

参考ガイド：
https://docs.uipath.com/ja/studio/standalone/2023.4/user-guide/importing-entities
:::

それでは、指定した日付が稼働日か否かを確認してみます。
「フィルターを編集」から「フィルタービルダー」を起動します。

![DataServiceの使い方11.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4f803c4d-bfb5-a434-d8b7-5ada181c2846.jpeg)

Year 欄の値と指定日が等しいかを判定する条件式を入力します。
***左辺に「Year」、右辺は「yyyy-MM-dd」形式とするため、『DateTime.Parse(指定日).ToString("yyyy-MM-dd")』*** と指定します。

指定日：2/12　想定する返り値：False
![DataServiceの使い方12.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/155cd724-46f3-3268-cab2-cd5b72974386.jpeg)
![DataServiceの使い方13.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/379146fe-8877-2fce-55ec-61830bdf518e.jpeg)

指定日：2/15　想定する返り値：True
![DataServiceの使い方14.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7608a15e-5f4e-40bc-05b3-b7a1d3ac8526.jpeg)
![DataServiceの使い方15.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/f7472a14-8721-d976-45f3-eeb856981011.jpeg)

クエリでの検索実行で期待結果が得られたので、次にエンティティの中身を更新してみます。
「エンティティレコードを更新」を配置します。

![DataServiceの使い方16.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e20fedcc-e79f-e45f-4fc2-241b9502784e.jpeg)

レコードの必須項目は自動で読み込まれます。
「入力レコード」に何を指定すればよいのか不明なため、とりあえず変数を作成します。

![DataServiceの使い方17.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/6ca0e68b-f8f4-6790-cb0f-25c7c63550ee.jpeg)

***『System.Guid』***、はじめてみました。

先述の「エンティティレコードにクエリを実行」の出力は***検索結果のリストデータ***のため、そのままでは利用できない様です。

![DataServiceの使い方18.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/d1530a3e-125b-ba9a-3221-18cf203c82d9.jpeg)

調べたところ、***GUIDはレコードのIDと同じ***様なので ***「出力レコード.Item(0).Id」*** として更新をかけてみます。

![DataServiceの使い方19.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/9349a2c0-e95b-7ea0-6ee4-27102a93dad2.jpeg)

正常に更新できました！

最後に「エンティティレコードを作成」を配置し、登録の挙動をみておきます。

![DataServiceの使い方20.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/058c37c3-c747-5154-af19-38cea1310d62.jpeg)

これは説明不要ですね。フィールドの値を指定して実行するだけ。

![DataServiceの使い方21.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/46aa4c4d-d972-4f83-7e44-3899b6530a32.jpeg)

# おまけ

Automation Cloud の Data Service 画面上で一括登録（データインポート）方法について。

1）CSV形式のデータファイルを用意（ヘッダーはフィールド名のカンマ区切り）

![DataServiceの使い方23.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b8f424e6-cd61-46b9-6524-c97bc22432ee.jpeg)

2）Data Service の「データをインポート」ボタンから1番で用意したCSVファイルを取り込みます。

![DataServiceの使い方22.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/524642d9-bb92-f1b2-bd1e-f6e03bdd0ada.jpeg)

# さいごに

いかがでしたでしょうか。
DBの運用コストもかからず、これだけ簡単に扱える内部DBの存在は大きいですよね。
冒頭にも触れたように、テナントに所属するユーザーについては、（Everyone（グループ）を削除しない限り）基本的には閲覧はできてしまうため、セキュアな情報や人事・会計情報などを登録することは控えましょう。
汎用的なマスターやテナント単位の情報収集・管理（ヘルプデスクの各種申請など）で利用できそうなものは積極的に取り入れるのがよさそうです。
最後までお読みいただきありがとうございます(・ω・)ノ