[OutSystems11]ITユーザー関連の情報を引き出すEntity・API

質問箱でITユーザー関連の質問を取得する方法について質問をもらったので、整理する。

# 環境情報
Personal Environment(Version 11.25.0 (Build 41743))
Service Studio(Version 11.54.49)

# ITユーザー
## ドキュメント (2024/03/10時点。なおこのドキュメントの日本語版は開いてみたが中身が表示されなかった）
[Application Users Groups and Roles > Considerations](https://success.outsystems.com/documentation/how_to_guides/data/data_migration_from_production_to_non_production_environment/application_users_groups_and_roles/)に記載がある。

> LifeTime syncronizes IT users across environments. In this case, Users from Service Center user provider (typically, tenant_id = 1) don´t need to be migrated.

LifeTimeが各環境にITユーザーを同期させている。このとき、tenant_id属性がService Center (通常はtenant_id=1) のレコードがITユーザー。このドキュメントは元々マイグレーションのためのものなので、「don't need to be migrated」のような記述が出てくるが、気にしなくて良いと思う。

## Entity
### (System)/UserMT: Tenant_Id=Service CenterのレコードがITユーザー
ユーザー情報を格納しているのはUser Entityであるが、このEntityはマルチテナントのEntity。
Service StudioでUserを選択して、右クリック⇒View Dataしてみると、同じテナントのユーザーのみが表示される。

そこで、ITユーザーを見たいときには、User Entityに対するビューとして、全てのテナントのデータを閲覧できるUserMTを使用する。

以下のように、Tenant_Id属性が1のものがITユーザー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/cb32fe25-0ab3-48b0-ff60-da7d8f00870d.png)

### (System)/Tenant: Name=ServiceCenterのレコードのIdでUserMTを検索する
Service Centerを表すTenantは、以下の通り、Tenant Entityから確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/b8b29270-2be1-f13b-e66b-2123bf707582.png)

### (System)/Developer Entity
DiscoveryというForgeコンポーネントでTeamやITユーザーの情報を扱っているので、それを確認してみると、このEntityを使っていた。

Descriptionは、
> Service Center user and role permissions.

とあり、Service Centerユーザー（たぶん歴史的理由でこういう名前になっている。確かLifeTimeは後からできた）とその権限を管理しているということのようだ。

注意事項として、このEntityに関してはドキュメントが見つからないので、確実なことは分からない。

とはいえ、データからわかることもあるので見ていこう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/29319685-7f25-8519-b606-95c14cbada79.png)

読み取れる情報として（全て推測である点について注意）

- Role_Id=0のレコードは、個別のITユーザーに直接与えられている権限を表す
- User_Id=0のレコードは、ロール定義そのものを表す（後述）

## API
[Life Time API v2 - GET /users/](https://success.outsystems.com/ja-jp/documentation/11/reference/outsystems_apis/lifetime_api_v2/#operation--users--get)で取得できるはず。
ただ、Personal Environmentでは動作確認が取れない機能なので、リンクのみ示しておく。

# ITユーザーのRole
## ドキュメント
恐らく無い。

## Entity

### ER図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/250bdc59-14e0-1e5a-482b-e1f0f3fe443d.png)

### (System)/ServiceCenter_Role: ITユーザー向けのロールのリスト
ドキュメントが無いので、推測であることに注意。
PE環境なので、独自のITユーザー向けRoleを作れないので、デフォルトのAdministratorとDeveloperしか無い（他の2つはあまり見覚えが無いRoleなので、内部的に利用しているものだろう）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/1e80cbb6-e97b-44c1-cff0-13579908f191.png)

これを、Developer Entityとジョインすることで与えられた権限を見ることが出来そう。

## API
[Life Time API v2 - GET /roles/](https://success.outsystems.com/ja-jp/documentation/11/reference/outsystems_apis/lifetime_api_v2/#operation--roles--get)で取得できるはず。
ただ、Personal Environmentでは動作確認が取れない機能なので、リンクのみ示しておく。

# Team
## ドキュメント
恐らく無い。

## Entity
Teamについては、Entityの情報は見当たらない。

## API
[Life Time API v2 - GET /teams/](https://success.outsystems.com/ja-jp/documentation/11/reference/outsystems_apis/lifetime_api_v2/#operation--teams--get)で取得できるはず。
ただ、Personal Environmentでは動作確認が取れない機能なので、リンクのみ示しておく。

なお、↑でも出てきたDiscoveryというForgeコンポーネントでは、Life Timeの既にdeprecatedになった古い[LifeTime Services API](https://success.outsystems.com/ja-jp/documentation/11/reference/outsystems_apis/lifetime_services_api/)を使っている。