次の方法で共有


監査済みデータの変更履歴を取得する

監査が有効で、監査済みのテーブルや列が変更された場合は、そのテーブルと列の変更履歴を取得できます。

Dataverse TDS (SQL) エンドポイント を使用した監査データは利用できません。

監査履歴は、モバイル アプリのテーブルではご利用いただけません。

Audit テーブル

監査イベントは、監査 (Audit) テーブル に保存されています。 Web API では、監査 EntityType がこのデータのリソースです。 オブジェクト テーブルは読み取り専用です。

監査テーブルでは、Power Platform 管理センターに表示される 監査概要の表示 のデータを提供します。

テーブルからデータを取得するには、呼び出し元ユーザーに、prvReadAuditSummary 権限があることを確認してください

次の表は、監査テーブルの重要な列をまとめたものです。

スキーマ名
LogicalName
表示名
タイプ Description
Action
action
イベント
選択肢 変更の原因となったイベントを表します。 アクションに関する詳細
AttributeMask
attributemask
変更されたフィールド
メモ 変更がレコード データへの変更を表す場合、変更された列の AttributeMetadata.ColumnNumber に対応するコンマで区切られた番号の一覧が含まれます。

注: このデータは使用しません。 代わりに、メッセージを使用して 変更履歴を取得します
AuditId
auditid
レコード ID
一意識別子 監査テーブルの主キーを識別する。
CallingUserId
callinguserid
呼び出し元ユーザー
参照 操作に偽装が使用されている場合の呼び出し元ユーザーを識別し、その他の場合は null 値にします。
CreatedOn
createdon
変更日
DateTime 監査レコードが作成されたとき、つまりユーザー操作が行われたときを識別します。
ObjectId
objectid
レコード
参照 監査されたレコードを一意に識別します。
ObjectTypeCode
objecttypecode
Entity
EntityName objectid 列ごとに参照されるテーブルの論理名を表示します。
Operation
operation
操作
選択肢 監査レコードを作成した操作を識別します (以下の 4 つの値のいずれか)。
1 = 作成
2 = 更新
3 = 削除
4 = アクセス
UserId
userid
変更者
参照 データを変更したユーザーの ID を表示します。

監査アクション

アクションの選択肢/オプション を使用して、特定のイベントをフィルター処理します。 次のテーブルは、イベントを分類します。

テーブル行イベント

これらのイベントは、レコードへの変更をキャプチャします。

ラベル メッセージ 説明
1 作成 Create レコードが作成されます。
2 更新 Update レコードが更新されます。
3 削除 Delete レコードが削除されます。
12 マージ Merge レコードが別のレコードと結合されます。
13 割り当て Assign ユーザー所有のテーブル レコードの ownerid 列の値が変更されました。
41 状態の設定 SetState レコードの statecode 列の値が変更されました。

レコードの共有イベント

これらのイベントは、レコードの共有時にレコード アクセスへの変更をキャプチャします。

ラベル メッセージ 説明
14 共有 GrantAccess ユーザーには、レコードに対する特権が付与されます。
48 共有の修正 ModifyAccess ユーザーに付与される特権が変更されました。
49 共有の解除 RevokeAccess レコードに対するユーザーのアクセス権が削除されます。

多対多の関連付けイベント

これらのイベントは、多対多の関連付けの変更をキャプチャします。

価値 Label Message Description
33 エンティティの関連付け Associate 1 つ以上のレコードが別のレコードに関連付けられています。
34 エンティティの関連付けの解除 Disassociate 1 つ以上のレコードが別のレコードから関連付け解除されています。
53 チームへのロールの割り当て Associate チームにセキュリティ ロールが割り当てられます。
54 チームからロールを削除 Disassociate チームからセキュリティ ロールが削除されます。
55 ユーザーへのロールの割り当て Associate ユーザーにセキュリティ ロールが割り当てられます。
56 ユーザーからロールを削除 Disassociate ユーザーからセキュリティ ロールが削除されます。

ユーザー アクセス イベント

これらのオプションは、ユーザー アクセス監査が有効な場合に、ユーザー アクセスの履歴をキャプチャするために使用されます。 これらのイベントの監査レコードには、4 の operation 列値があります。

価値 Label Description
64 Web 経由のユーザー アクセス ユーザーはモデル駆動型アプリを使用して Dataverse にアクセスしています。
65 Web サービス経由のユーザー アクセス ユーザーは、モデル駆動型アプリ以外のクライアントで Web サービスを使用して Dataverse にアクセスしています。
112 ユーザー アクセス監査の開始 ユーザー アクセス監査が始まりました。
113 ユーザー アクセス監査の停止 ユーザー アクセス監査が停止しました。

サンプル: ユーザー アクセスの監査 では、アクション オプションを使用してユーザー アクセスを監査する方法を説明します。

メタデータ変更イベント

これらのイベントは、組織テーブルへの変更だけでなく、テーブルと列の定義への変更もキャプチャします。

ラベル 説明
100 エンティティの削除 ユーザーがテーブルを削除しました。
101 属性の削除 ユーザーが列を削除しました。
102 エンティティ レベルで変更を監査 ユーザーがテーブル定義を変更して、監査を有効または無効にしました。
103 属性レベルで変更を監査 ユーザーが列定義を変更して、監査を有効または無効にしました。
104 組織レベルで変更を監査 ユーザーが組織設定を変更しました。

監査変更イベント

これらのイベントは、監査設定への変更をキャプチャします。

価値 Label Description
105 エンティティ監査の開始 監査がテーブルに対して有効化されました。
106 属性監査の開始 監査が列に対して有効化されました。
107 監査の有効化 組織に対する監査が有効になりました。
108 エンティティ監査の停止 監査がテーブルに対して無効化されました。
109 属性監査の停止 監査が属性に対して無効化されました。
110 監査の無効化 監査が列に対して無効化されました。
111 監査ログの削除 監査ログが削除されました。

セキュリティ ロール変更イベント

これらのイベントは、セキュリティ ロールへの変更をキャプチャします。

価値 Label Message Description
57 ロールに特権を追加 AddPrivilegesRole ロールに特権が追加されました。
58 ロールから特権を削除 RemovePrivilegeRole ロールから特権が削除されました。
59 ロールの特権を置き換え ReplacePrivilegesRole ロールの特権が置き換えられました。

その他の処理

残りのアクション オプションは、通常、Dynamics 365 Sales、Customer Service、Marketing などの特定のソリューションに適用される監査可能な操作について言及されます。

これらのアクションのラベルは、アクションを表す SdkMessage.Name 値に合わせる必要があります。 特定の操作は、アクション名とテーブルの組み合わせである可能性があります。 たとえば、値が 10 でラベル 閉じる が付いたオプションは、CloseIncident または CloseQuote メッセージに対応する必要があります。

監査テーブルの関連付け

監査テーブルには、systemuserテーブルを使用する多対一の関連付けが 2 つだけあります。

Relationship Audit テーブル ルックアップ 説明
lk_audit_userid userid ユーザーが加えた変更により作成されたすべての監査レコードにユーザーを関連付けます。
lk_audit_callinguserid callinguserid 別のユーザーに偽装している間作成した監査レコードのいずれかにユーザーを関連付けます。

これらの関連付けを使用して、特定のユーザー用に作成された監査データ レコードをフィルタリングできます。

監査エンティティは、クエリで 1 つのリンク エンティティのみをサポートします。 systemuser テーブルを使用する 2 つの関連付けしかないため、callinguserid または userid 列のいずれかからデータを含めることができますが、同時に両方を含めることはできないことを意味します。

QueryExpression または FetchXml を使用して、systemuser テーブルに存在する 2 つの正式な関連付け以外のテーブルと監査データを結合するクエリを構築することはできません。

監査 EntityType の定義

Web API では、監査 EntityType リソースを使用して監査テーブルからデータを読み取ります。 以下のデータは、Web API CSDL $metadata サービス ドキュメント の監査 EntityType 定義です (注釈は含まれていません)。

<EntityType Name="audit" BaseType="mscrm.crmbaseentity">
  <Key>
      <PropertyRef Name="auditid" />
  </Key>
  <Property Name="operation" Type="Edm.Int32" />
  <Property Name="attributemask" Type="Edm.String" Unicode="false" />
  <Property Name="action" Type="Edm.Int32" />
  <Property Name="useradditionalinfo" Type="Edm.String" Unicode="false" />
  <Property Name="createdon" Type="Edm.DateTimeOffset" />
  <Property Name="objecttypecode" Type="Edm.String" Unicode="false" />
  <Property Name="_callinguserid_value" Type="Edm.Guid" />
  <Property Name="_regardingobjectid_value" Type="Edm.Guid" />
  <Property Name="_objectid_value" Type="Edm.Guid" />
  <Property Name="_userid_value" Type="Edm.Guid" />
  <Property Name="transactionid" Type="Edm.Guid" />
  <Property Name="auditid" Type="Edm.Guid" />
  <NavigationProperty Name="callinguserid" Type="mscrm.systemuser" 
    Nullable="false" Partner="lk_audit_callinguserid">
      <ReferentialConstraint Property="_callinguserid_value" 
        ReferencedProperty="systemuserid" />
  </NavigationProperty>
  <NavigationProperty Name="userid" Type="mscrm.systemuser" 
    Nullable="false" Partner="lk_audit_userid">
      <ReferentialConstraint Property="_userid_value" 
        ReferencedProperty="systemuserid" />
  </NavigationProperty>
</EntityType>

注意

ChangeData 列 は、Web API 監査 EntityType に含まれていません。 このデータは使用しません。 代わりに、メッセージを使用して 監査変更履歴を取得します

例: ユーザーが削除した取引先担当者レコードを検索する

次の例は、特定のユーザーによって削除された取引先担当者レコードの監査履歴を示すクエリです。

次のクエリは、両方とも同じ応答を返します。

次のクエリは、監査レコードの _userid_value プロパティで値が <user id> に一致する場合にフィルター処理を行います。

要求:

GET [Organization URI]/api/data/v9.2/audits?$select=_objectid_value,objecttypecode,createdon,_userid_value&$orderby=createdon desc&$filter=operation eq 3 and objecttypecode eq 'contact' and _userid_value eq '<user id>'

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*" 

次のクエリでは、lk_audit_userid コレクション値のナビゲーション プロパティを使用して、systemuserid 値が <user id> に一致する systemuser テーブルから特定のユーザーの監査レコードのコレクションにアクセスします

要求:

GET [Organization URI]/api/data/v9.2/systemusers(<user id>)/lk_audit_userid?$select=_objectid_value,objecttypecode,createdon,_userid_value&$orderby=createdon desc&$filter=operation eq 3 and objecttypecode eq 'contact'

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*" 

応答:

HTTP/1.1 200 OK
Preference-Applied: odata.include-annotations="*"

{
  "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#audits(_objectid_value,objecttypecode,createdon,_userid_value)",
  "@Microsoft.Dynamics.CRM.totalrecordcount": -1,
  "@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false,
  "value": [
    {
      "_objectid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
      "_objectid_value": "0e76dc8a-41b5-ec11-983f-0022482bf046",
      "objecttypecode@OData.Community.Display.V1.FormattedValue": "Contact",
      "objecttypecode": "contact",
      "createdon@OData.Community.Display.V1.FormattedValue": "5/12/2022 3:19 PM",
      "createdon": "2022-05-12T22:19:12Z",
      "_userid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "systemuser",
      "_userid_value@OData.Community.Display.V1.FormattedValue": "FirstName LastName",
      "_userid_value": "4026be43-6b69-e111-8f65-78e7d1620f5e"
    },
    < Other results truncated for brevity>
  ]
}

監査の変更履歴を取得する

3 つのメッセージを使用して、監査されたデータ変更を取得することができます。

Web API .NET 用 SDK Description
RetrieveAuditDetails 関数 RetrieveAuditDetailsRequest クラス 監査レコードから完全な監査の詳細を取得します。
RetrieveAttributeChangeHistory 関数 RetrieveAttributeChangeHistoryRequest クラス 監査済みレコードの単一の列に対する変更履歴を取得します。
RetrieveRecordChangeHistory 関数 RetrieveRecordChangeHistoryRequest クラス 特定のレコードに対するすべての監査済みデータの変更を取得します。

これらのメッセージを使用するには、prvReadRecordAuditHistoryprvReadAuditSummary 特権があることを確認してください

AuditDetail タイプ

これらのメッセージには、アクションの種類に応じた細かい詳細が含まれます。 これらの詳細は、次のテーブルが示しているように、ベース AuditDetail タイプから派生した異なるタイプを使用して実装されます。

Web API .NET 用 SDK Description
AuditDetail ComplexType AuditDetail クラス 派生クラスの基本タイプを表示する。 監査レコードに対するアクセス権を付与します。
AttributeAuditDetail ComplexType AttributeAuditDetail クラス レコードのデータ変更が発生したときの詳細を提供します。 古い値と新しい値へのアクセスを提供します。
次のタイプのアクションによって返されます:
- テーブル行イベント
- メタデータ変更イベント
- 監査変更イベント
RelationshipAuditDetail ComplexType RelationshipAuditDetail クラス 多対多の関連付けを使用してレコードが関連付けまたは関連付け解除されたときの詳細を提供します。 関連付けの名前と、操作が変更されたレコードの一覧を提供します。
多対多の関連付けイベント により返されました。
RolePrivilegeAuditDetail ComplexType RolePrivilegeAuditDetail クラス セキュリティ ロール (Role) レコードの定義が変更されたときに、詳細を提供します。 ロールに関連付けられている新旧のロール特権に関する情報を提供します。
セキュリティ ロール変更イベント により返されました。
ShareAuditDetail ComplexType ShareAuditDetail クラス レコードが共有されている、共有されていない、または共有レコードへのアクセス レベルが変更された場合に、詳細を提供します。
レコード共有イベント により返されました。
UserAccessAuditDetail ComplexType UserAccessAuditDetail クラス ユーザー アクセス監査を追跡するための詳細を提供します。 間隔とアクセス時間の詳細を提供します。
ユーザー アクセス イベント により返されました。

重要

  • AuditDetail ComplexType を継承する前述の Web API タイプは、AuditDetail から継承する必要がある AuditRecord ナビゲーション プロパティ値を返しません。 .NET 用 SDK クラスはこのデータを返します。

  • Email.Description注釈 などの AttributeAuditDetailOldValueNewValue プロパティに含まれる大きな列の値は、5KB か最大 5,000 文字に制限されています。 列の値の上限は、テキストの末尾にある省略記号 (…) で認識できます (たとえば "lorem ipsum、lorem ip…")。データは切り捨てられるため、これらの列の値への変更を復元するために使用することはできません。

RetrieveAuditDetails メッセージ

このメッセージを使用して、単一の監査レコードの監査の詳細を取得します。

RetrieveAuditDetails は、audit テーブルにバインドされた関数です。 Prefer: odata.include-annotations="*" 要求ヘッダーを含めて、書式設定された値 を取得します。

以下の例は、parentaccountidaccount レコードに設定されている場合に、AttributeAuditDetail ComplexType が返されることを表しています。

要求:

GET [Organization URI]/api/data/v9.2/audits(12869c65-d7d3-ec11-b656-281878f0eba9)/Microsoft.Dynamics.CRM.RetrieveAuditDetails

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*" 

応答:

HTTP/1.1 200 OK
OData-Version: 4.0
Preference-Applied: odata.include-annotations="*"

{
 "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveAuditDetailsResponse",
 "AuditDetail": {
  "@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
  "InvalidNewValueAttributes": [],
  "LocLabelLanguageCode": 0,
  "DeletedAttributes": {
   "Count": 0,
   "Keys": [],
   "Values": []
  },
  "OldValue": {
   "@odata.type": "#Microsoft.Dynamics.CRM.account"
  },
  "NewValue": {
   "@odata.type": "#Microsoft.Dynamics.CRM.account",
   "_parentaccountid_value@OData.Community.Display.V1.FormattedValue": "A. Datum Corporation",
   "_parentaccountid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "parentaccountid",
   "_parentaccountid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
   "_parentaccountid_value": "d249d106-38b5-ec11-983f-002248296cd0"
  }
 }
}

詳細情報

RetrieveAttributeChangeHistory メッセージ

このメッセージを使用して、特定のテーブル列の変更の一覧を取得します。

PagingInfo パラメーターを使用して返すレコードの数を制限し、ページを前後に移動させます。 後続の要求では、PagingInfo.PagingCookie プロパティを AuditDetailCollection.PagingCookie によって返される値に設定します。

このメッセージの変更は、常に AttributeAuditDetail タイプです。

この例では、account テーブル レコードの description 列に対する監査済み単一の変更履歴が返されます。

要求:

GET [Organization URI]/api/data/v9.2/RetrieveAttributeChangeHistory(Target=@target,AttributeLogicalName=@attributeLogicalName,PagingInfo=@paginginfo)?
@target={ '@odata.id':'accounts(611e7713-68d7-4622-b552-85060af450bc)'}
&@attributeLogicalName='description'
&@paginginfo={
   "PageNumber": 1,
   "Count": 1,
   "ReturnTotalRecordCount": true
}

Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-None-Match: null

応答:

HTTP/1.1 200 OK

{
 "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveAttributeChangeHistoryResponse",
 "AuditDetailCollection": {
  "MoreRecords": true,
  "PagingCookie": "<cookie page=\"1\"><cookieExtensions ContinuationToken=\"{&quot;pageNumber&quot;:2,&quot;continuationToken&quot;:&quot;[{\\&quot;compositeToken\\&quot;:{\\&quot;token\\&quot;:null,\\&quot;range\\&quot;:{\\&quot;min\\&quot;:\\&quot;3A800000000000000000000000000000\\&quot;,\\&quot;max\\&quot;:\\&quot;3B000000000000000000000000000000\\&quot;}},\\&quot;orderByItems\\&quot;:[{\\&quot;item\\&quot;:\\&quot;2022-05-13T22:06:46.6175613Z\\&quot;}],\\&quot;rid\\&quot;:\\&quot;CVoNAJIidnNsmz0AAADwAw==\\&quot;,\\&quot;skipCount\\&quot;:0,\\&quot;filter\\&quot;:null}]&quot;}\" /></cookie>",
  ,
  "TotalRecordCount": 3,
  "AuditDetails": [
   {
    "@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
    "InvalidNewValueAttributes": [],
    "LocLabelLanguageCode": 0,
    "DeletedAttributes": {
     "Count": 0,
     "Keys": [],
     "Values": []
    },
    "OldValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "description": "Old description value"
    },
    "NewValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "description": "New description value"
    }
   }
  ]
 }
}

詳細情報

RetrieveRecordChangeHistory メッセージ

RetrieveRecordChangeHistory メッセージは、Target パラメーターが示す特定のレコードに対するデータ変更の履歴を表します。

PagingInfo パラメーターを使用して返すレコードの数を制限し、ページを前後に移動させます。 後続の要求では、PagingInfo.PagingCookie プロパティを AuditDetailCollection.PagingCookie によって返される値に設定します。

このメッセージの結果は、モデル駆動型アプリで関連>監査履歴を選択したときに表示される AttributeAuditDetail データとしてよく見られるものです。 レコードの古い値と新しい値が表示されますが、RelationshipAuditDetailShareAuditDetail 型も返されます。

このメッセージは、systemuserrole テーブルで使用され、RolePrivilegeAuditDetailUserAccessAuditDetail 型を返します。

次の例では、アカウント レコードの 4 つの変更のうち最初の 2 つだけが返されます。

要求:

GET [Organization URI]/api/data/v9.2/RetrieveRecordChangeHistory(Target=@target,PagingInfo=@paginginfo)?
@target={ '@odata.id':'accounts(611e7713-68d7-4622-b552-85060af450bc)'}
&@paginginfo={
   "PageNumber": 1,
   "Count": 2,
   "ReturnTotalRecordCount": true
}
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-None-Match: null

応答:

HTTP/1.1 200 OK

{
 "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveRecordChangeHistoryResponse",
 "AuditDetailCollection": {
  "MoreRecords": true,
  "PagingCookie": "<cookie page=\"1\"><cookieExtensions ContinuationToken=\"{&quot;pageNumber&quot;:2,&quot;continuationToken&quot;:&quot;[{\\&quot;compositeToken\\&quot;:{\\&quot;token\\&quot;:null,\\&quot;range\\&quot;:{\\&quot;min\\&quot;:\\&quot;38000000000000000000000000000000\\&quot;,\\&quot;max\\&quot;:\\&quot;38800000000000000000000000000000\\&quot;}},\\&quot;orderByItems\\&quot;:[{\\&quot;item\\&quot;:\\&quot;2022-05-13T22:06:27.8029732Z\\&quot;}],\\&quot;rid\\&quot;:\\&quot;CVoNAJIidnPOnT0AAAAICA==\\&quot;,\\&quot;skipCount\\&quot;:0,\\&quot;filter\\&quot;:null}]&quot;}\" /></cookie>",
  "TotalRecordCount": 4,
  "AuditDetails": [
   {
    "@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
    "InvalidNewValueAttributes": [],
    "LocLabelLanguageCode": 0,
    "DeletedAttributes": {
     "Count": 0,
     "Keys": [],
     "Values": []
    },
    "OldValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "description": "Old description value"
    },
    "NewValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "description": "New description value"
    }
   },
   {
    "@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
    "InvalidNewValueAttributes": [],
    "LocLabelLanguageCode": 0,
    "DeletedAttributes": {
     "Count": 0,
     "Keys": [],
     "Values": []
    },
    "OldValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "_ownerid_value@OData.Community.Display.V1.FormattedValue": "FirstName LastName",
     "_ownerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "ownerid",
     "_ownerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "systemuser",
     "_ownerid_value": "4026be43-6b69-e111-8f65-78e7d1620f5e"
    },
    "NewValue": {
     "@odata.type": "#Microsoft.Dynamics.CRM.account",
     "_ownerid_value@OData.Community.Display.V1.FormattedValue": "TeamName",
     "_ownerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "ownerid",
     "_ownerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "team",
     "_ownerid_value": "39e0dbe4-131b-e111-ba7e-78e7d1620f5e"
    }
   }
  ]
 }
}

注意

現在返される AuditDetail ComplexType 値には AuditRecord プロパティが含まれないため、誰がいつ変更を加えたかについてのデータはありません。

詳細情報

参照

監査の概要
監査の構成
監査データを削除
Dataverse 監査を管理する
サンプル: 監査テーブルのデータ変更
サンプル: ユーザー アクセスの監査