PROBLEMA

Las ediciones en las relaciones en las que ObjectID es la clave principal se pueden sincronizar incorrectamente con replicación bidireccional y unidireccional

Last Published: January 8, 2021

Descripción

La clave principal para una relación puede estar basada en un GlobalID mantenido por una geodatabase, en una aplicación o una clave principal mantenida por el cliente o en un ObjectID mantenido por una geodatabase. En algunos casos de uso, las ediciones que involucran relaciones pueden sincronizarse de forma incorrecta cuando la clave principal de la relación se basa en una columna ObjectID (OID).

Nota: Este artículo corresponde únicamente a las versiones 9.x de ArcGIS. Es posible que versiones posteriores de ArcGIS incluyan funcionalidades distintas, así como nombres y ubicaciones distintos para menús, comandos y herramientas de geoprocesamiento.

A continuación, se muestra un caso de uso de ejemplo en el que las ediciones se sincronizan incorrectamente.

Considere un ejemplo en el que hay una clase de entidad de postes y una tabla de transformadores en una réplica bidireccional. En este ejemplo, hay una clase de relación simple entre los postes y los transformadores. Postes es la clase de origen y la clave principal es su columna ObjectID. Transformadores es la clase de destino y la clave externa es una columna de entero largo llamada idposte.

A continuación, se describe un caso de uso donde las relaciones no se sincronizan correctamente.

  1. Se agrega un nuevo poste (ObjectID = 10) a la geodatabase de réplica primaria.
  2. Se agrega un nuevo transformador (ObjectID = 100) a la réplica primaria.
  3. A continuación, la réplica se sincroniza de la primaria a la secundaria, lo que agrega los nuevos poste y transformador a la réplica secundaria. El ObjectID asignado al nuevo poste en la réplica secundaria es 12. Esto se debe a que el ObjectID 10 ya lo utiliza otra entidad de la réplica secundaria. El ObjectID asignado al nuevo transformador es 105. Los GlobalID de estas filas son idénticos a los valores correspondientes en la geodatabase principal y son los que se utilizan para mantener la correspondencia subsiguiente entre entidades.
  4. En la principal, se agrega una nueva relación entre la parcela con ObjectID 10 y el transformador con ObjectID 100. Esto establece el valor de idposte integrado (clave externa) en la fila del transformador en 10.
  5. La réplica se sincroniza de nuevo de la versión primaria a la secundaria. El cambio en la fila del transformador en la geodatabase principal se aplica a la fila del transformador de la geodatabase secundaria con ObjectID 105 (utilizando los GlobalID para establecer la correspondencia). Sin embargo, el valor actualizado de idposte en la fila del transformador secundario no es correcto. Se actualiza a 10, pero debería haber sido 12.

El ejemplo anterior funcionaría correctamente si la edición para crear la relación entre el poste y el transformador se hubiera realizado en la misma generación de ediciones en las que se crearon originalmente el poste y el transformador. Por ejemplo, si la relación se hubiera creado antes de la sincronización en el paso 3. El algoritmo de sincronización registra el cambio en el ObjectID del poste durante la creación y lo utiliza para actualizar correctamente la clave externa en el transformador.

Notas sobre los casos de uso en los que las ediciones se sincronizan correctamente:

Los casos de uso en los que las ediciones se sincronizan correctamente corresponden a flujos de trabajo comunes con la anotación vinculada a entidad, que se basa en ObjectID como clave principal. El flujo de trabajo más común implica crear una entidad junto con su anotación vinculada como parte de la misma sesión de edición. Una vez que se crea una anotación para una entidad, su relación con esa entidad no se modifica en ediciones posteriores. No todos los flujos de trabajo relacionados con la anotación vinculada a entidad son compatibles. Por ejemplo, no se permite crear un nuevo elemento de anotación relacionada para una entidad en una generación que no implica la creación de la entidad. Los flujos de trabajo compatibles se basan en ArcGIS 9.2 Service Pack 5.

Causa

En algunos casos de uso (consulte la sección Descripción anterior), es posible que las ediciones que involucran relaciones se sincronicen de forma incorrecta con replicación bidireccional y unidireccional cuando la clave principal para la relación está basada en una columna ObjectID (OID).

Solución o solución alternativa

Este problema se ha solucionado en ArcGIS 9.2 Service Pack 6 y ArcGIS 9.3. También se ha solucionado un caso adicional en el siguiente parche de ArcGIS 9.2 Service Pack 6, así como en ArcGIS 9.3 Service Pack 1.

Además, este problema no se encuentra al editar y sincronizar relaciones con réplicas bidireccionales y unidireccionales utilizando columnas GlobalID o claves principales definidas por el cliente, como IdEquipo, que son únicas en todas las bases de datos, como las claves principales de la relación.

En el ejemplo anterior donde las ediciones están sincronizadas de manera incorrecta, la clase de relación podría haberse definido con la columna GlobalID de los postes como clave principal y una columna GUID de los transformadores como clave externa. Las clases de relación que utilizan un GlobalID como clave principal requieren una columna GUID como clave externa. En este caso de uso, la relación se habría sincronizado correctamente, ya que los valores GlobalID y GUID son los mismos en todas las réplicas.

Id. de artículo:000009966

Obtener ayuda de expertos en ArcGIS

Contactar con soporte técnico

Descargar la aplicación de soporte de Esri

Ir a las opciones de descarga

Información relacionada

Descubrir más sobre este tema