Actualmente estamos intentando validar mediante programación las características con respecto a las reglas definidas en la base de datos geográfica. Esto incluye reglas de atributos, así como reglas de conectividad y relación.
Hemos consultado la documentación de IValidar , IValidación y el Validación de características artículo en EDN para saber cómo se hace.
Tras establecer las reglas de conectividad adecuadas, la invocación del Validar características en ArcMap arroja correctamente el número de características no válidas en una selección. Si selecciono una sola característica, la invocación de este comando muestra correctamente lo que está mal en esa característica particular en un cuadro de mensaje.
Ahora, llamando a IValidate.Validate en esa función también funciona. Su valor de retorno indica que la característica es efectivamente inválida, y el mensaje de error es idéntico al que muestra el comando Validar Características en ArcMap. Sin embargo, llamar a este método tiene dos desventajas que son problemáticas para nuestros propósitos:
- Realiza la validación en cortocircuito. En cuanto una de las reglas asignadas no es válida, deja de evaluar las reglas restantes. Necesitamos evaluar todas las reglas para poder mostrar las infracciones a la vez.
- Proporciona la información del error como una cadena. Para nuestros propósitos, lo ideal sería examinar la información de una manera más estructurada, lo que significa que tenemos que acceder al Regla s que resultaron ser inválidos.
Por lo tanto, aquí es donde IValidate.GetInvalidRules entra en juego. La documentación de este método dice:
El método GetInvalidRules devuelve un enumerador de reglas que actualmente son violadas por la fila.
que es exactamente lo que buscamos. Sin embargo, la enumeración devuelta por este método no parece contener nunca nada. Lo que es particularmente extraño es que:
- Llamando a
IValidate.Validate
en una característica produce el mensaje de error de validación apropiado como se esperaba. - Llamando a
IValidate.GetInvalidRules
en la misma característica siempre devuelve una enumeración vacía como si no hubiera reglas de conectividad o relación inválidas. (No importa si la llamada se realiza dentro de una sesión de edición o no).
¿Cómo puedo validar una fila con todas las reglas de la base de datos geográfica asignadas a la vez? ¿Alguien ha utilizado IValidate.GetInvalidRules
¿con éxito?
UPDATE : IValidate.GetInvalidRules
parece devolver reglas inválidas que pertenecen a atributos. Sin embargo, este método nunca devuelve reglas de conectividad de red no válidas.