Compartir a través de


Detección de conflictos

Última modificación: miércoles, 12 de noviembre de 2008

Hace referencia a: SharePoint Foundation 2010

En este artículo
Obtención-Envío-Actualización
owshiddenversion (campo)
vti_versionhistory (propiedad)
Encabezado Etag DAV
Datos adjuntos

Además de las consideraciones de rendimiento, la detección de conflictos es uno de los temas de sincronización más importantes.

Obtención-Envío-Actualización

Es mejor detectar los conflictos y resolverlos en el cliente. El cliente puede detectar si los cambios realmente entran en conflicto, puede provocar una alerta para notificar al usuario que corrija manualmente un conflicto y puede almacenar una copia de los cambios hechos por el usuario local en el almacenamiento del usuario.

Por este motivo, es mejor si una operación de sincronización incluye tres partes: en primer lugar, los datos que posiblemente han cambiado se obtienen del servidor y, a continuación, el cliente determina si existe algún conflicto con los cambios ya cargados en la copia de cliente; por último, si no hay conflictos, se cargan los nuevos datos del cliente.

Los objetos de SharePoint pueden tener una lógica empresarial aplicada en el momento de la actualización. Por esta razón, el método UpdateListItems(String, XmlNode) devuelve los valores actualizados de todos los campos y propiedades de los elementos actualizados.

owshiddenversion (campo)

Windows SharePoint Services 3.0 usa el campo owshiddenversion (en la clase Microsoft.SharePoint.SPBuiltInFieldId) para detectar conflictos. Si este valor de campo no se proporciona durante el proceso de actualización, el servidor invalidará todos los cambios. Un cliente siempre debe proporcionar este valor de campo durante el proceso de actualización para evitar la pérdida de datos. El valor de campo es el número que el servidor ha devuelto más recientemente.

El valor del campo owshiddenversion permite que el servidor determine si se va a actualizar una copia obsoleta de un elemento. Por ejemplo, un cliente sincroniza un elemento y obtiene un valor de '2' para este atributo. Mientras tanto, un usuario cambia el título de dicho elemento en el servidor, por lo que el valor cambia a '3'. Cuando el cliente envía un cambio con un valor de '2' y el elemento se ha modificado desde la última vez que el cliente lo solicitó, el servidor devuelve un error TP_E_VERSIONCONFLICT (0x81020015) y una lista del contenido actual del elemento.

vti_versionhistory (propiedad)

El campo owshiddenversion es suficiente para la detección de conflictos simples cuando todos los clientes se sincronizan con un servidor central. Sin embargo, la sincronización punto a punto presenta más complicaciones. Le conviene evitar crear conflictos innecesarios cuando se haya sincronizado un cambio en un cliente del mismo nivel.

Los conflictos también pueden ocurrir en un escenario que no es punto a punto. Si un cliente carga correctamente un cambio en el servidor pero no recibe confirmación (respuesta de UpdateListItems(String, XmlNode)), el cliente debe determinar, en la siguiente sincronización, que se han cargado sus cambios más recientes.

Encabezado Etag DAV

Las obtenciones y actualizaciones de documentos y datos adjuntos se efectúan mediante el protocolo HTTP/DAV (también conocido como WebDAV o DAV). Este protocolo utiliza un mecanismo distinto para la detección de conflictos. Cuando se utiliza un descriptor get para obtener un archivo, que puede incluir un documento en una lista, un archivo adjunto o una página que no está en una lista, se devuelve un ETag. El ETag incluye otro objeto binario grande (BLOB) que contiene un GUID y un número de versión. Cuando se utiliza el descriptor put para cargar un documento, un cliente debe solicitar que el ETag coincida con el proporcionado.

Nota

Este protocolo no admite el historial de versiones.

Datos adjuntos

Aunque puede actualizar datos adjuntos usando el protocolo HTTP/DAV, para agregar datos adjuntos debe usar el método AddAttachment del servicio web Lists. Este método acepta una matriz binaria y devuelve la dirección URL de los datos adjuntos.

Para obtener más información, consulte AddAttachment(String, String, String, []).

Vea también

Conceptos

GetListItemChangesSinceToken y sincronización de aplicaciones