Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
[Este artículo es documentación preliminar y está sujeto a modificaciones].
A veces, las personas eliminan registros que no deberían. Los administradores pueden habilitar el mantenimiento de registros eliminados para que puedan restaurar los registros eliminados dentro de un período de tiempo especificado. Obtenga información sobre cómo los administradores pueden restaurar registros eliminados.
Cuando se habilita el mantenimiento de registros eliminados, los desarrolladores pueden usar el mensaje para restaurar el Restore registro eliminado antes del período de tiempo especificado. El período de tiempo puede ser de hasta 30 días.
Recuperación de registros eliminados que se pueden restaurar
Para recuperar los registros eliminados que se pueden restaurar, establezca el origen de datos de la consulta en "bin".
En los ejemplos siguientes se devuelven hasta tres registros de cuenta eliminados.
Al usar el SDK, puede recuperar datos mediante FetchXml o QueryExpression.
Al recuperar datos mediante FetchXml, establezca el atributo del elemento 'fetch'datasource en 'bin' al obtener registros.
static EntityCollection GetDeletedAccountRecordsFetchXml(IOrganizationService service) {
string queryString = @"<fetch top='3' datasource='bin'>
<entity name='account'>
<attribute name='name' />
</entity>
</fetch>";
FetchExpression query = new(queryString);
return service.RetrieveMultiple(query);
}
Al recuperar datos mediante QueryExpression, establezca la propiedad QueryExpression.DataSource en "bin" al recuperar registros.
static EntityCollection GetDeletedAccountRecordsQueryExpression(IOrganizationService service) {
QueryExpression query = new("account") {
ColumnSet = new ColumnSet("name"),
DataSource = "bin",
TopCount = 3
};
return service.RetrieveMultiple(query);
}
Restauración de un registro eliminado
Use el Restore mensaje para restaurar un registro eliminado. El Target parámetro no es una referencia a un registro eliminado. Es un registro completo para que pueda establecer valores de columna mientras restaura el registro. Todos los valores de columna originales se restauran a menos que los invalide estableciendo valores durante la Restore operación.
Nota:
En este momento, solo puede restaurar registros mediante el valor de clave principal. No puede usar una clave alternativa para restaurar un registro.
La forma de restaurar un registro eliminado depende de si usa el SDK para .NET o la API web.
La forma de restaurar un registro mediante el SDK para .NET depende de si está generando tipos enlazados tempranos mediante pac modelbuilder o está usando tipos enlazados tardíos.
Ejemplo de enlace adelantado
El método estático RestoreAccountRecordEarlyBound utiliza las clases RestoreRequest<T> y Account generadas mediante el modelador de pac.
/// <summary>
/// Restores an account record
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance</param>
/// <param name="accountId">The ID of the deleted account record.</param>
/// <param name="originalName">The original name value for the account record.</param>
/// <returns>The ID of the restored account</returns>
static Guid RestoreAccountRecordEarlyBound(
IOrganizationService service,
Guid accountId,
string originalName)
{
Account accountToRestore = new()
{
Id = accountId,
// Appending '(Restored)' to the original name
// to demonstrate overwriting a value.
Name = originalName + " (Restored)"
};
RestoreRequest<Account> request = new()
{
Target = accountToRestore
};
var response = (RestoreResponse)service.Execute(request);
return response.id;
}
Ejemplo de enlace tardío
El método estático RestoreAccountRecordLateBound usa la clase OrganizationRequest para invocar el Restore mensaje, estableciendo el Target parámetro .
/// <summary>
/// Restores an account record
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance</param>
/// <param name="accountId">The ID of the deleted account record.</param>
/// <param name="originalName">The original name value for the account record.</param>
/// <returns>The ID of the restored account</returns>
static Guid RestoreAccountRecordLateBound(
IOrganizationService service,
Guid accountId,
string originalName)
{
Entity accountToRestore = new("account", accountId)
{
Attributes = {
// Appending '(Restored)' to the original name
// to demonstrate overwriting a value.
{"name", originalName + " (Restored)"}
}
};
OrganizationRequest request = new("Restore")
{
Parameters = {
{ "Target", accountToRestore }
}
};
OrganizationResponse response = service.Execute(request);
return (Guid)response.Results["id"];
}
Procedimientos recomendados al restaurar registros
Evite los siguientes problemas al restaurar registros:
- Restaurar registros relacionados antes de restaurar el registro principal
- No especifique los valores de clave principal al crear registros
- Registros con valores de clave alternativos coincidentes bloquean la restauración
- Los registros que usan opciones de opción eliminadas no se restauran
- Infracción de clave principal al eliminar
Restaurar registros relacionados antes de restaurar el registro principal
Si algunos registros relacionados hacen referencia a registros que la relación en cascada eliminó, se produce un error en la operación de restauración. Para evitar este problema, restaure siempre los registros relacionados que la eliminación del registro actual no quitó antes de intentar restaurar el registro principal.
Nombre:
RefCannotBeRestoredRecycleBinNotFound
Código:0x80049959
Número:-2147182247
Mensaje:Entity with id '<Guid Value>' and logical name '<Entity.LogicalName>' does not exist. We cannot restore the reference '<Referred Primary Key Name>' that must be restored as part of this Restore call. ValueToBeRestored: <Guid Value>, ReferencedEntityName: <Referenced Entity Name>, AttributeName: <Referred Attribute Name>
No especifique los valores de clave principal al crear registros
Deje siempre que Dataverse establezca la clave principal al crear un registro. Si crea un registro que tenga el mismo valor de clave principal que un registro eliminado, no podrá restaurar el registro eliminado. Si desea restaurar el registro eliminado, elimine primero el nuevo registro.
Nombre:
DuplicateExceptionRestoreRecycleBin
Código:0x80044a02
Número:-2147182279
Mensaje:Please delete the existing conflicting record '<Entity Platform Name>' with primary key '<Primary Key Name>' and primary key value '<Primary Key Value>' before attempting restore.
Registros con valores de clave alternativos coincidentes bloquean la restauración
Si crea un registro que tenga los mismos valores de columna de clave alternativa que un registro eliminado, no podrá restaurar el registro eliminado. Si desea restaurar el registro eliminado, elimine primero el nuevo registro.
Nombre:
DuplicateExceptionEntityKeyRestoreRecycleBin
Código:0x80049929
Número:-2147182295
Mensaje:Duplicate entity key preventing restore of record '<Entity Platform Name>' with primary key '<Primary Key Name>' and primary key value '<Primary Key Value>'. See inner exception for entity key details.
Los registros que usan opciones de opción eliminadas no se restauran
Si elimina una opción de conjunto de opciones y esa opción se usó en un registro eliminado, no puede restaurar el registro porque la opción ahora no es válida. Antes de eliminar una opción de conjunto de opciones, compruebe que ningún registro use esa opción, incluidos los registros eliminados.
Nombre:
PicklistValueOutOfRangeRecycleBin
Código:0x80049949
Número:-2147182263
Mensaje:Picklist value not valid, please add the invalid value back to the picklist before restoring record
Violación de clave primaria al eliminar
Si el registro con la misma clave principal ya existe, no ocurre nada. Para exigir que se registren todos los elementos eliminados, establezca la configuración de DoNotEnforcePrimaryKeyOrgSettingRecycleBin mediante la herramienta OrgDBOrgSettings para Microsoft Dynamics CRM.
Después de habilitar esta configuración, es posible que reciba el siguiente error:
Nombre:
DuplicateExceptionRestoreRecycleBin
Código:0x80049939
Número:-2147182279
Mensaje:A record that has the attribute values Deleted Object already exists on Delete.
Detectar qué tablas están habilitadas para el mantenimiento de registros eliminados
Antes de habilitar esta característica, la tabla Configuración de mantenimiento de registros eliminados (RecycleBinConfig) no tiene filas.
Con el tiempo, la mayoría de las tablas admitirán el mantenimiento de registros eliminados. Los componentes de la solución, las tablas virtuales y las tablas elásticas no se admiten para el mantenimiento de registros eliminados. Algunas tablas que no están habilitadas actualmente podrían habilitarse más adelante (por ejemplo, tablas con más de 600 columnas). Para obtener una lista de las tablas que no admiten esta característica, consulte Tablas no admitidas actualmente.
También puede deshabilitar el mantenimiento de registros eliminados para el entorno. Si el mantenimiento de registros eliminados no está habilitado para una tabla, no encontrará ningún registro apto para restaurarse. Puede consultar Dataverse para averiguar si el mantenimiento de registros eliminados está habilitado para una tabla o no.
Las tablas que están habilitadas para el mantenimiento de registros eliminados tienen una fila en la RecycleBinConfig tabla donde statecode está activo y isreadyforrecyclebin es verdadero. La RecycleBinConfig tabla no contiene el nombre de la tabla, pero hace referencia a una fila de la tabla Entity donde la logicalname columna contiene logicalName de la tabla.
Use la siguiente consulta FetchXml para detectar qué tablas han eliminado el mantenimiento de registros habilitados:
<fetch>
<entity name='recyclebinconfig'>
<filter type='and'>
<condition attribute='statecode'
operator='eq'
value='0' />
<condition attribute='isreadyforrecyclebin'
operator='eq'
value='1' />
</filter>
<link-entity name='entity'
from='entityid'
to='extensionofrecordid'
link-type='inner'
alias='entity'>
<attribute name='logicalname' />
<order attribute='logicalname' />
</link-entity>
</entity>
</fetch>
Aprenda a consultar datos mediante FetchXml
Detectar qué tablas no están habilitadas para el mantenimiento de registros eliminados
Para saber qué tablas no están habilitadas para el mantenimiento de registros eliminados, use la siguiente consulta FetchXml que es la inversa de la que se encuentra en Detectar qué tablas están habilitadas.
<fetch>
<entity name='entity'>
<attribute name='logicalname' />
<filter type='or'>
<condition entityname='recyclebin'
attribute='extensionofrecordid'
operator='null' />
<condition entityname='recyclebin'
attribute='statecode'
operator='ne'
value='0' />
<condition entityname='recyclebin'
attribute='isreadyforrecyclebin'
operator='ne'
value='1' />
</filter>
<order attribute='logicalname' />
<link-entity name='recyclebinconfig'
from='extensionofrecordid'
to='entityid'
link-type='outer'
alias='recyclebin' />
</entity>
</fetch>
Aprenda a consultar datos mediante FetchXml
Los resultados de esta consulta a partir de mayo de 2024, cuando se inició esta característica, se encuentran en tablas que actualmente no son compatibles para mantener registros de eliminaciones.
Recuperar y establecer la configuración del período de tiempo de limpieza automática para el mantenimiento de registros eliminados
Establezca el valor que determina cuánto tiempo están disponibles los registros eliminados para restaurarse en la columna RecycleBinConfig.CleanupIntervalInDays donde el valor de la columna Name es organization. Cada dos filas en la tabla RecycleBinConfig tiene un valor de columna CleanupIntervalInDays de -1. Este valor indica que usa los mismos valores establecidos para la organization tabla.
Para especificar un valor diferente para otra tabla, establezca el CleanupIntervalInDays valor de columna donde Name coincide con el nombre lógico de la tabla. Esta columna acepta valores de hasta 30. No establezca este valor a menos que quiera usar un valor diferente del valor predeterminado de la organización.
Use este método estático SetCleanupIntervalInDays para establecer el valor de CleanupIntervalInDays columna de una tabla específica.
/// <summary>
/// Updates the CleanupIntervalInDays value for a specified table
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance</param>
/// <param name="entityId">The entityId of the table</param>
/// <param name="cleanupIntervalInDays">The new CleanupIntervalInDays value</param>
static void SetCleanupIntervalInDays(
IOrganizationService service,
Guid entityId,
int cleanupIntervalInDays)
{
QueryExpression query = new("recyclebinconfig")
{
ColumnSet = new ColumnSet("recyclebinconfigid"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions = {
{
new ConditionExpression(
attributeName: "extensionofrecordid",
conditionOperator: ConditionOperator.Equal,
value: entityId)
}
}
}
};
EntityCollection records = service.RetrieveMultiple(query);
if (records.Entities.Count.Equals(1))
{
Guid id = records.Entities[0].Id;
Entity record = new(entityName: "recyclebinconfig", id: id)
{
Attributes = {
{ "cleanupintervalindays", cleanupIntervalInDays }
}
};
service.Update(record);
}
else
{
throw new Exception($"Deleted record keeping configuration for table '{tableLogicalName}' not found.");
}
}
Deshabilitar el mantenimiento de registros eliminados para el entorno
Nota:
La manera preferida de deshabilitar el mantenimiento de registros eliminados para un entorno es desactivarlo en el Centro de administración de Power Platform. El método descrito aquí podría cambiar antes de que la característica esté disponible con carácter general.
Elimine la fila de la tabla RecycleBinConfig donde el name valor es organization. Esta acción elimina todos los registros de la RecycleBinConfig tabla y deshabilita el mantenimiento de registros eliminados para el entorno.
Importante
No intente eliminar otros registros individuales. Es importante que Dataverse administre esta acción.
Administración de la restauración de registros eliminados por lógica de negocios personalizada
Dataverse proporciona un mecanismo para administrar las acciones deseadas para los registros relacionados cuando se elimina una fila. Estos datos de configuración forman parte de la definición de la relación. Cuando se elimina un registro relacionado, puede configurar cuatro comportamientos posibles:
| Comportamiento de eliminación | Description |
|---|---|
| Cascade All | Elimina los registros relacionados. |
| Quitar vínculo | Establece las columnas de búsqueda en el registro eliminado en NULL. |
| Ninguno en Cascade | No se aplica ningún cambio a los registros relacionados. (Solo interno) |
| Restringir | Impide la eliminación del registro para mantener la integridad de los datos. El registro no se puede eliminar a menos que no haya registros relacionados con esta relación. |
Obtenga más información sobre los comportamientos de relación.
Al configurar la relación para Cascade All, Remove Link o Restrict, Dataverse administra estos comportamientos y no hay nada adicional que hacer.
Si configura una relación para usar el comportamiento Quitar vínculo , pero se supone que la relación elimina el registro relacionado, es posible que necesite lógica personalizada que aplique algún comportamiento personalizado. Por ejemplo, puede que desee responder a este comportamiento de forma diferente e implementar su propio comportamiento "Cascade some" en función de las reglas que defina. Por ejemplo, puede eliminar registros inactivos o registros que no se actualizaron en un período de tiempo determinado. Normalmente, esta lógica se implementa mediante un complemento, pero también se puede realizar mediante Power Automate con el conector Microsoft Dataverse: cuando se agrega, modifica o elimina una fila.
Si tiene este tipo de lógica de negocios personalizada, Dataverse no lo sabe y no puede deshacer automáticamente la lógica. Sin embargo, puede registrar otro complemento en el mensaje Restore para revertir cualquier lógica personalizada que tenga. O bien, puede usar Power Automate y el conector Microsoft Dataverse: desencadenador al realizar una acción.
Importante
Tenga cuidado con el contexto al registrar los pasos del plug-in para el mensaje Restore. El registro que está restaurando no está disponible en la PreOperation fase. Si necesita crear registros relacionados, use la PostOperation etapa.
Obtenga más información sobre las etapas del plug-in.
Los parámetros InputParameters y OutputParameters del Restore mensaje son similares al Create mensaje, por lo que los complementos escritos que se van a registrar para el Create mensaje se pueden volver a usar para el Restore mensaje con menos cambios.
Actualmente no se admiten tablas para el mantenimiento de registros eliminados
La consulta descrita en Detectar qué tablas no están habilitadas se usó para generar esta lista en agosto de 2024.
Consulte también
Restaurar registros eliminados de la tabla de Microsoft Dataverse