Common Data Service で自動的に作られるフィールドについて


Power Platform の勉強会で最近話題に出る、Common Data Service (CDS) に自動で作られるフィールドについてです。

自動生成されるフィールド

新規にカスタムエンティティを作ると、以下のようなフィールドが自動で作成されます。こちらのフィールドについて説明します。

一意識別子

全てのレコードは内部的に区別するよう、Guid 列が作成されます。これにより各レコードの一意性が保証されます。またレコードを特定する際に使います。

状態 (statecode) とステータス (statuscode)

レコードの状況を指定するために使い、各状態に対して複数のステータスを作成できます。

既定では以下のような状態のためイメージが沸かないかもしれません。

状態 ステータス
アクティブ アクティブ
非アクティブ 非アクティブ

しかしより細かくステータスを管理したい場合、以下のようにカスタマイズできます。ここでは登壇用プレゼン資料の管理を考えます。

状態 ステータス
アクティブ 資料テーマ検討中
資料ドラフト作成中
資料レビュー中
資料レビュー完了
非アクティブ 公開済
非公開

尚、編集は現時点でクラシックエクスペリエンスのみでサポートされます。

作成日 (createdon)、修正日 (modifiedon)、レコード作成日 (overriddencreatedon)

レコードは作成された日や最終更新日が自動で管理されます。

  • 作成日: レコードが作成された時点の UTC 時間が入ります
  • 修正日: レコードに変更があった時点の UTC 時間が入ります
  • レコード作成日: データインポートなどでレコードを作成する場合、明示的に作成日を指定できます

UTC 変換タイムゾーンコード (utcconversiontimezonecode)、タイムゾーン規則のバージョン番号 (timezoneruleversionnumber)

レコードが作成された際、作成者のタイムゾーンと時刻を使って UTC 時間を計算しますが、その際に利用した情報が残ります。

バージョン番号 (versionnumber)

各レコードの変更管理につかわれ、更新がある度に更新されます。バージョン番号はシステム全体で管理されるため、前回同期を実行した以降に作成、更新さえたレコードの一覧が取得できるようになっています。

参照: 変更の追跡を使用してデータを外部システムに同期

作成者(createdby)、作成者代理 (createdonbehalfby)、修正者 (modifiedby)、修正者代理 (modifiedonbehalfby)

レコードを作成または修正したユーザーの GUID を格納します。
またインポートや SDK 経由などで作成、修正した場合に使ったアカウントも代理者に格納します。

所有者 (ownerid)、所有チーム (owningteam)、所属部署 (owningbusinessunit)

CDS ではレコードのセキュリティとして以下の 5 段階を用意しています。

  • グローバル (組織全体): すべてのレコードにアクセスできます
  • ディープ (部署配下): 所属する部署とその配下のすべての部署のレコードにアクセスできます
  • ローカル (部署): 所属する部署のレコードにアクセスできます
  • ベーシック (ユーザー): 自分が所有しているレコード、ユーザーが共有しているオブジェクト、ユーザーがメンバーになっているチームが共有しているオブジェクトにアクセスできます
  • なし: アクセスは許可されません

上記のモデルを効率よく適用するため、各レコードは所有者、所有チーム、所属部署があり、所属部署は所有者が設定された時点で、そのユーザーの部署が自動的に入ります。

尚、エンティティは個人とチームが所有するモデルと組織が所有するモデルがあり、組織が所有する場合はこれらのフィールドは不要なため追加されません。

インポート シーケンス番号 (importsequencenumber)

データのインポートを使用した場合、インポートのソースとレコードをマップするために保持するフィールドです。

まとめ

CDS を使うと、以下の機能が自動的に使えます。

  • レコードの状態管理
  • 所有者や部署など、階層的なセキュリティ + 共有などより柔軟なセキュリティ
  • レコードの作成日や修正日の自動付与
  • レコードの作成者や編集者の自動付与
  • 複数タイムゾーンのサポート
  • 複数言語、通貨のサポート

上記の機能を満たすため、多くのフィールドが自動で追加されるのです。これらのフィールドはシステムフィールドであり削除できませんが、便利な者なので、邪魔者扱いせず活用してください。