Partager via


Extraire l’historique de modifications de données auditées

Après avoir activé l’audit et modifié les données dans les tables et colonnes auditées, vous pouvez commencer à extraire l’historique des modifications de ces tables et colonnes.

Les données d’audit ne sont pas disponibles à l’aide du point de terminaison (SQL) TDS Dataverse.

L’historique d’audit n’est pas disponible pour les tables dans l’application mobile.

Table d’audit

Les événements d’audit sont stockés dans la Table d’audit. Dans l’API web, l’EntityType de l’audit est la ressource pour ces données. La table d’audit est en lecture seule.

La table d’audit fournit les données pour l’option Afficher le résumé de l’audit affichée dans le centre d’administration Power Platform.

Veillez à ce que l’utilisateur appelant a le privilège prvReadAuditSummary pour récupérer les données de la table.

Le tableau suivant résume les colonnes importantes de la table d’audit.

SchemaName
LogicalName
DisplayName
Type Description
Action
action
Événement
Option Représente l’événement à l’origine de la modification. En savoir plus sur les actions.
AttributeMask
attributemask
Champ modifié
Memo Lorsque le changement représente une modification de données dans un enregistrement, contient une liste de nombres séparés par des virgules qui correspondent au AttributeMetadata.ColumnNumber pour les colonnes qui ont été modifiées.

Remarque : n’utilisez pas ces données. Utilisez plutôt les messages pour extraire l’historique des modifications.
AuditId
auditid
ID de l’enregistrement
Identificateur unique Identifie la clé primaire de la table d’audit.
CallingUserId
callinguserid
Utilisateur appelant
Lookup Identifier l’utilisateur appelant lorsque l’emprunt d’identité est utilisé pour l’opération ; sinon, valeur nulle.
CreatedOn
createdon
Date de modification
DateHeure Identifie lorsque l’enregistrement d’audit a été créé, c’est-à-dire lorsque l’opération de l’utilisateur a eu lieu.
ObjectId
objectid
Enregistrer
Lookup Identifie de façon unique l’enregistrement audité.
ObjectTypeCode
objecttypecode
Entité
Nom de l’entité Affiche le nom logique de la table référencée par la colonne objectid.
Operation
operation
Opération
Option Identifie l’opération qui a créé l’enregistrement d’audit ; l’une des quatre valeurs :
1 = Créer
2 = Mettre à jour
3 = Supprimer
4 = Accès
UserId
userid
Modifié par
Lookup Affiche l’ID de l’utilisateur ayant modifié les données.

Actions d’audit

Utilisez Choix/Options Action pour filtrer selon les événements spécifiques. Les tables suivantes classent les événements.

Événements de ligne de table

Ces événements capturent les modifications apportées à un enregistrement.

Valeur Étiquette Message Description
1 Créer Create Un enregistrement est créé.
2 Mettre à jour Update Un enregistrement est mis à jour.
3 Supprimer Delete Un enregistrement est supprimé.
12 Fusionner Merge Un enregistrement est fusionné avec un autre.
13 Attribuer Assign La valeur de la colonne ownerid d’un enregistrement de table appartenant à l’utilisateur est modifiée.
41 Définir l’état SetState La valeur de la colonne statecode d’un enregistrement est modifiée.

Événements de partage d’enregistrement

Ces événements capturent les modifications apportées à l’accès aux enregistrements lorsqu’un enregistrement est partagé.

Valeur Étiquette Message Description
14 Partager GrantAccess Un utilisateur se voit accorder des privilèges sur un enregistrement.
48 Modifier le partage ModifyAccess Les privilèges accordés à un utilisateur ont changé.
49 Annuler le partage RevokeAccess L’accès d’un utilisateur à un enregistrement est supprimé.

Événements de relation de plusieurs à plusieurs

Ces événements capturent les changements pour plusieurs relations.

active Étiquette Message Description
33 Associer des entités Associate Un ou plusieurs enregistrements sont associés à un autre.
34 Dissocier des entités Disassociate Un ou plusieurs enregistrements sont dissociés d’un autre.
53 Attribuer un rôle à une équipe Associate Un rôle de sécurité est attribué à une équipe.
54 Supprimer un rôle d’une équipe Disassociate Un rôle de sécurité est supprimé d’une équipe.
55 Attribuer un rôle à un utilisateur Associate Un rôle de sécurité est attribué à un utilisateur.
56 Supprimer un rôle d’un utilisateur Disassociate Un rôle de sécurité est supprimé d’un utilisateur.

Événements d’accès utilisateur

Ces options capturent l’historique de l’accès utilisateur lorsque l’audit de l’accès utilisateur est activé. L’enregistrement d’audit de ces événements a une valeur de la colonne operation 4.

active Étiquette Description
64 Accès utilisateur via le web L’utilisateur accès à Dataverse à l’aide d’une application pilotée par modèle.
65 Accès utilisateur via les services web L’utilisateur accède à Dataverse à l’aide de services web utilisant un client autre qu’une application pilotée par modèle.
112 L’audit de l’accès utilisateur a démarré L’audit de l’accès utilisateur a commencé.
113 L’audit de l’accès utilisateur s’est arrêté L’audit de l’accès utilisateur a pris fin.

L’Exemple : Auditer l’accès des utilisateurs montre comment utiliser ces options d’action pour auditer l’accès des utilisateurs.

Événements de modification des métadonnées

Ces événements capturent les modifications apportées aux définitions de table et de colonne ainsi que les modifications apportées à la table d’organisation.

Valeur Étiquette Description
100 Supprimer une entité L’utilisateur a supprimé une table.
101 Supprimer un attribut L’utilisateur a supprimé une colonne.
102 Auditer les modifications au niveau de l’entité L’utilisateur a modifié une définition de table pour activer ou désactiver l’audit.
103 Auditer les modifications au niveau de l’attribut L’utilisateur a modifié une définition de colonne pour activer ou désactiver l’audit.
104 Auditer les modifications au niveau de l’organisation L’utilisateur a modifié les paramètres d’organisation.

Événements de modification d’audit

Ces événements capturent les modifications apportées aux paramètres d’audit.

active Étiquette Description
105 Audit de l’entité démarré Un audit a été activé pour une table.
106 Audit de l’attribut démarré L’audit a été activé pour une colonne.
107 Audit activé L’audit a été activé pour l’organisation.
108 Audit de l’entité interrompu L’audit a été désactivé pour une table.
109 Audit de l’attribut interrompu L’audit a été désactivé pour un attribut.
110 Audit désactivé L’audit a été désactivé pour une colonne.
111 Suppression du journal d’audit Un journal d’audit a été supprimé.

Événements de modification des rôles de sécurité

Ces événements capturent les modifications apportées aux rôles de sécurité.

active Étiquette Message Description
57 Ajouter des privilèges à un rôle AddPrivilegesRole Des privilèges ont été ajoutés à un rôle.
58 Supprimer des privilèges d’un rôle RemovePrivilegeRole Des privilèges ont été supprimés d’un rôle.
59 Remplacer des privilèges d’un rôle ReplacePrivilegesRole Les privilèges d’un rôle ont été remplacés.

Autres actions

Les options d’action restantes font généralement référence à des opérations auditables qui s’appliquent à des solutions spécifiques, telles que Dynamics 365 Sales, Customer Service et Dynamics 365 Marketing.

Les Étiquettes de ces actions doivent s’aligner sur une valeur SdkMessage.Name qui représente l’action. L’opération spécifique peut être une combinaison du nom de l’action et d’une table. Par exemple, une option avec la valeur 10 et l’étiquette Fermer doit correspondre aux messages CloseIncident ou CloseQuote.

Relations de table d’audit

La table d’audit n’a que deux Relations Plusieurs-à-un avec la table systemuser :

Relationship Recherche dans la table d’audit Description
lk_audit_userid userid Associe l’utilisateur à tous les enregistrements d’audit créés en raison des modifications qu’il a apportées.
lk_audit_callinguserid callinguserid Associe l’utilisateur à l’un des enregistrements d’audit qu’il a créés en empruntant l’identité d’un autre utilisateur.

Vous pouvez utiliser ces relations pour filtrer les enregistrements de données d’audit créés pour un utilisateur spécifique.

L’entité d’audit ne prend en charge qu’une seule entité de lien dans une requête. Comme seules deux relations existent avec la table systemuser, cela signifie que vous pouvez inclure des données des colonnes callinguserid ou userid, mais pas les deux en même temps.

Vous ne pouvez pas créer de requêtes à l’aide de QueryExpression ou de FetchXml qui joignent des données d’audit à des tables autres que les deux relations formelles qui existent avec la table systemuser.

Définition EntityType d’audit

Avec l’API web, vous utiliserez la ressource EntityType audit pour lire les données depuis la table d’audit. Les données suivantes sont la définition EntityType audit depuis l’API web document $Metadata Service CSDL sans annotations.

<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>

Note

La colonne ChangeData n’est pas incluse dans l’API web EntityType audit. N’utilisez pas ces données. Utilisez plutôt les messages pour extraire l’historique des modifications d’audit.

Exemple : rechercher des enregistrements de contact supprimés par un utilisateur

Les exemples suivants sont des requêtes affichant l’historique d’audit pour les enregistrements de contact supprimés par un utilisateur spécifique.

Les deux requêtes suivantes renvoient la même réponse.

La suivante filtre selon la propriété _userid_value de l’enregistrement d’audit où la valeur correspond à <user id>.

Demande :

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="*" 

La requête suivante accède à la collection d’enregistrements d’audit pour un utilisateur spécifique avec la propriété de navigation lk_audit_userid affectée à une valeur de collection de la table systemuser où la valeur systemuserid correspond à <user id>.

Demande :

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="*" 

Réponse :

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>
  ]
}

Extraire l’historique des modifications d’audit

Vous pouvez utiliser un des trois messages pour extraire les modifications de données qui sont auditées.

API web Kit de développement logiciel (SDK) pour .NET Description
Fonction RetrieveAuditDetails Classe RetrieveAuditDetailsRequest Récupère les détails complets de l’audit à partir d’un enregistrement d’audit.
Fonction RetrieveAttributeChangeHistory Classe RetrieveAttributeChangeHistoryRequest Extrayez l’historique de modifications pour une seule colonne d’un enregistrement audité.
Fonction RetrieveRecordChangeHistory Classe RetrieveRecordChangeHistoryRequest Récupère toutes les modifications de données auditées pour un enregistrement spécifique.

Pour utiliser ces messages, vous devez avoir les privilèges prvReadRecordAuditHistory et prvReadAuditSummary.

Types de détails d’audit

Ces messages fournissent des détails supplémentaires qui dépendent du type d’action. Les détails sont mis en œuvre à l’aide de différents types dérivés d’un type de base AuditDetail, comme indiqué dans la table suivante.

API web Kit de développement logiciel (SDK) pour .NET Description
ComplexType AuditDetail Classe AuditDetail Affiche le type de base pour les classes dérivées. Fournit l’accès à l’enregistrement d’audit.
ComplexType AttributeAuditDetail Classe AttributeAuditDetail Fournit des détails lorsque des modifications de données se produisent pour un enregistrement. Permet d’accéder aux anciennes valeurs et aux nouvelles valeurs.
Renvoyé par les types d’actions suivants :
- Événements de ligne de table
- Événements de modification des métadonnées
- Événements de modification d’audit
ComplexType RelationshipAuditDetail Classe RelationshipAuditDetail Fournit des détails lorsque des enregistrements sont associés ou dissociés à l’aide d’une relation Plusieurs-à-plusieurs. Fournit le nom de la relation et une liste des enregistrements modifiés par l’opération.
Renvoyés par les Événements de relation Plusieurs à plusieurs.
ComplexType RolePrivilegeAuditDetail Classe RolePrivilegeAuditDetail Fournit des détails lorsque les définitions des enregistrements Rôle de sécurité (Rôle) changent. Fournit des informations sur les anciens et nouveaux privilèges de rôle associés au rôle.
Renvoyé par les Événements de modification des rôles de sécurité.
ComplexType ShareAuditDetail Classe ShareAuditDetail Fournit des détails lorsqu’un enregistrement est partagé ou non partagé ou lorsque le niveau d’accès à un enregistrement partagé change.
Renvoyé par les Événements de partage d’enregistrements.
ComplexType UserAccessAuditDetail Classe UserAccessAuditDetail Fournit des détails pour suivre l’audit de l’accès des utilisateurs. Fournit des détails sur l’intervalle et le moment de l’accès.
Renvoyé par les événements d’accès utilisateur.

Important

  • Les types d’API web répertoriés précédemment qui héritent de ComplexType AuditDetail ne renvoient pas la valeur de propriété de navigation AuditRecord dont ils devraient hériter de AuditDetail. Le SDK pour les classes .NET renvoie ces données.

  • Les grandes valeurs de colonne incluses dans les propriétés AttributeAuditDetailOldValue ou NewValue telles que Email.Description ou Annotation sont limitées (plafonnées) à 5 Ko or ~5 000 caractères de longueur. Une valeur de colonne plafonnée peut être reconnue par des points de suspension (…) à la fin du texte ; par exemple, « lorem ipsum, lorem ip… » Les données étant tronquées, vous ne pouvez pas les utiliser pour restaurer les modifications apportées à ces valeurs de colonne.

Message RetrieveAuditDetails

Utilisez ce message pour récupérer les détails d’audit d’un seul enregistrement d’audit.

RetrieveAuditDetails est une fonction liée à la table d’audit. Incluez l’en-tête de requête Prefer: odata.include-annotations="*", vous obtiendrez des valeurs mises en forme.

L’exemple suivant montre le ComplexType AttributeAuditDetail renvoyé lorsque l’parentaccountid est défini sur un enregistrement de type account.

Demande :

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="*" 

Réponse :

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"
  }
 }
}

En savoir plus sur :

Message RetrieveAttributeChangeHistory

Utilisez ce message pour récupérer une liste des modifications pour une colonne de table spécifique.

Utilisez le paramètre PagingInfo pour contrôler le nombre d’enregistrements à renvoyer et avancer ou reculer dans les pages. Pour les requêtes ultérieures, définissez la propriété PagingInfo.PagingCookie à la valeur renvoyée par le AuditDetailCollection.PagingCookie.

Les modifications apportées à ce message sont toujours du type AttributeAuditDetail.

Cet exemple renvoie un seul historique des modifications audité pour la colonne description d’un enregistrement de table account.

Demande :

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

Réponse :

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"
    }
   }
  ]
 }
}

En savoir plus sur :

Message RetrieveRecordChangeHistory

Le message RetrieveRecordChangeHistory affiche l’historique des modifications de données pour un enregistrement indiqué par le paramètre Target.

Utilisez le paramètre PagingInfo pour contrôler le nombre d’enregistrements à renvoyer et avancer ou reculer dans les pages. Pour les requêtes ultérieures, définissez la propriété PagingInfo.PagingCookie à la valeur renvoyée par le AuditDetailCollection.PagingCookie.

Les résultats de ce message sont généralement considérés comme les données AttributeAuditDetail affichées dans les applications pilotées par modèle lorsque vous sélectionnez Associé>Historique d’audit. Ils affichent les anciennes valeurs et les nouvelles valeurs des enregistrements, mais ils renvoient également les types RelationshipAuditDetail et ShareAuditDetail.

Ce message peut également être utilisé avec les tables systemuser et role pour renvoyer les types RolePrivilegeAuditDetail et UserAccessAuditDetail.

L’exemple suivant renvoie uniquement les deux premières des quatre modifications d’un enregistrement de compte.

Demande :

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

Réponse :

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"
    }
   }
  ]
 }
}

Note

Les valeurs ComplexType AuditDetail renvoyées actuellement n’incluent pas la propriété AuditRecord, donc il n’y a pas de données concernant qui a fait le changement et quand il est disponible.

En savoir plus sur :

Voir aussi

Présentation de l’audit
Configurer l’audit
Supprimer des données d’audit
Gérer les audits Dataverse
Exemple : Auditer les modifications des données d’entité
Exemple : Audit de l'accès utilisateur