Open6

OutSystemsのTenant

Junji WatanabeJunji Watanabe

Data Model

Documentation

(System)の下にあるEntityはドキュメントのあるものが少ない。
Tenant関係のEntityも多分ないはず。

ER図

Espace

Junji WatanabeJunji Watanabe

Tenant

  • Tenantの一覧を検索するのに、TenantのMaster Classでは、①現在のモジュールのUser Providerを特定②TenantのEspace_IdがUser Providerと合致するものを取得 することで行っていた
  • Tenantをいくつか作ってあるPEで確認したところ、Service Center, Users, 作成したTenantのTenant Idのみが利用されていた(UserMTビューで確認)

こんな感じに4つのTenantを作成してあるPEで

Tenant Entityのレコードをダウンロードして確認してみると、

  • Tenant.NameとTenant.Espace_Idが差すEspace.Nameが一致しないレコードは3つだけ。それぞれMyTenant、MyNewTenant、test_comでUsers以外のTenantの名前。残りのTenantはUsersなので、つまりTenant.Espace_Id=UsersのEspace Ientifierのレコードがテナントを指していることが確認できる(ただしテナントの管理をUsesアプリケーションで行うデフォルトの場合)
  • 実はTenantには他にもたくさんレコードが入っているが、Tenant.NameとTenant.Espace_Idで指すEspaceのIdentifierが一致するレコード。つまりeSpaceの名前がそのままTenantであるようなレコードがあるが、おそらく通常は何の役割も持たない
Junji WatanabeJunji Watanabe

Espace_Tenant

  • https://www.outsystems.com/forums/discussion/53502/what-is-the-escape-tenant/ によると「The entity you mention is Espace_Tenant, that maps Service Studio modules to the tenant they belong to, and is used in that Aggregate to restrict the list of users that can login to your application to the ones belonging to the right tenant.」と書かれている
    • 用途としては、eSpaceとeSpaceが属するTenantのマッピングを行うこと、か
  • 実際にレコードを確認してみると、環境内のUsersで管理している全TenantとServiceCenterに対して、それぞれをUser Providerとして設定しているeSpaceのIdentifierが登録されている
    • 例:User ProviderとしてUsersを使うモジュールAがあるとする。すると、Espace_Tenant Entityには、TenantId=Usersで管理しているTenant Id, EspaceId=AのIdというレコードができる
  • なぜか、Plugin (Mobile向けのハードウェア機能を追加するモジュールの種類)だけ、Espace Name=Tenant Nameとなるレコードが5つだけあった。あきらかに、環境内の全レコードではない。なぜPluginの一部だけこのようなレコードができるのかは不明
Junji WatanabeJunji Watanabe

https://learn.outsystems.com/training/journeys/multi-tenancy-516/master-class-on-multi-tenancy/o11/2429

  • An end-user only belongs to a single tenant
  • The default tenant of an application is the user provider configured
  • Entities, Site Properties and Timers can be set individually or inherit the multi-tenant definition of the module.
  • テナント作成
    • TenantCreate Action (System): eSpaceNameとTenantNameがパラメータ
    • Service CenterでeSpaceを開き、Tenantsタブから。このタブの上方に「Create Tenant in Users」というのがあるので、Usersに作成する。Usersで管理か。MasterClassサンプルでも、現在のeSpaceのUserProviderを取ってきてTenantのeSpaceIdにぶつけていた
Junji WatanabeJunji Watanabe

Service Centerで見たとき、おそらくモジュールの種類によって、Tenantsタブがあるものとないものがある
⇒特定する

  • Is MultiTenant=NoでもService CenterでTenantsタブが表示されるものはある
  • Reactive, Mobile, Traditionalで表示を確認。CropperLibraryというモジュール種別=LibraryのモジュールではTenantsタブが表示されず、Service StudioのIs MultiTenantプロパティも表示されない様子
  • モジュールのIs MultiTenant=Trueにしたときの効果としてAlerts other developers to the fact that the module is Multi-tenant ready.

Usersアプリケーションから

  • User_Login Action(各アプリケーションで参照するログイン用Action)からUser_LoginInternalを呼ぶときに、TenantIdパラメータにUserMT.Tenant_Idを渡している