Reglas de atributos y clases de relación

Las reglas de atributos pueden usarse para leer y editar registros relacionados para datasets que participan en clases de relación en una geodatabase. Las reglas pueden aplicarse en clases de entidades y tablas que participan en clases de relación, que incluyen archivos adjuntos y anotaciones vinculadas a entidad. Las reglas de atributos pueden usarse también para interceptar eventos de edición desde las actualizaciones realizadas en las clases de origen y destino en una relación, esto es, agregar, quitar o eliminar un registro relacionado. Por ejemplo, una regla de atributos de cálculo inmediata puede actualizar un campo de atributo cuando se agrega una entidad a una clase de entidades relacionada.

Eventos desencadenadores con clases de relación

Las reglas de atributo inmediato se desencadenan con los eventos de edición como insertar, actualizar y eliminar. Al añadir un registro relacionado con ArcGIS AllSource mediante las opciones del menú contextual Agregar nuevos a la relación o Agregar seleccionados a la relación, se desencadenan múltiples eventos de edición.

Al usar la opción del menú contextual Agregar nuevos a la relación, ocurre lo siguiente:

  • Se crea una fila vacía en la tabla de destino de la clase de relación.
    • Inserte el desencadenador en la fila de destino.
  • La clave externa se establece en la fila de destino.
    • Actualice el desencadenador en la fila de destino.
Al añadir una regla de atributo a la tabla de destino con un evento desencadenador de actualización, la regla capturará la clave externa y buscará la fila asociada en la tabla de origen.

Las opciones del menú contextual Agregar nuevos a la relación y Eliminar de la relación pueden usarse también.

La siguiente tabla enumera las funciones específicas que pueden distinguirse en el evento de actualización comparando $originalFeature.key y $feature.key.

FunciónEventoExpresión de ArcGIS Arcade

Agregar una entidad a una relación

Actualizar

Isempty($originalfeature.key) == true And isempty($feature.key) == false

Agregar a una relación las entidades seleccionadas

Actualizar

Isempty($originalfeature.key) == true And isempty($feature.key) == false

Eliminar una entidad desde una relación

Actualizar

Isempty($originalfeature.key) == false And isempty($feature.key) == true

Eliminar la operación realizada en un registro relacionado

Eliminar

Leer registros relacionados

Al trabajar con clases de relación, puede leer los registros relacionados mediante las funciones Arcade que toman las características de entrada y devuelven los registros relacionados.

  • FeatureSetByRelationshipName: la ejecución se limita al contexto del servidor. Al utilizar esta función para las reglas de atributos, asegúrese de que la opción Excluir de la evaluación de la aplicación esté configurada como true.
  • FeatureSetByRelationshipClass: permite la ejecución tanto en el lado cliente como en el servidor. Las reglas que usan esta función pueden ejecutarse en local en la aplicación (por ejemplo, ArcGIS AllSource y ArcGIS Maps SDKs for Native Apps) antes de que la edición se envíe al origen de datos.

También puede leer registros relacionados mediante la función FeatureSetByName Arcade y filtrar por clave externa.

Lea los registros relacionados de una clase de relación utilizando la función FeatureSetByName de Arcade.

Se crea una regla de cálculo en el campo InspectionCount en la clase de entidad de poste que participa en una clase de relación de uno a muchos con la tabla de inspección. La función FeatureSetByName puede utilizarse para leer la clase de inspección directamente y recuperar los registros relacionados al actualizar. El uso de la función Arcade exige conocer el campo de clase de relación. Para esta clase de relación, la clave principal de origen es el campo globalID de la clase de entidad de poste y la clave externa de origen es el poleguid de la tabla independiente de inspección.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature. 

Var fs = FeatureSetByName($datastore, “Inspection”, [“comments”], false)
Var poleGuid = $feature.poleguid 
Var fsinspected = Filter(fs, “POLEGUID= @poleguid”);
Return count(fsinspected)

Lea un registro relacionado de una clase de relación utilizando la función FeatureSetByRelationShipName de Arcade.

Con la función FeatureSetRelationshipName se puede reescribir la misma secuencia de comandos para leer registros relacionados correspondientes a una clase de relación. Con esta función no necesita conocer la clave externa, solo el nombre de relación: pole_inspection.

Precaución:

Al utilizar esta función para crear una regla de atributo, asegúrese de que la opción Excluir de la evaluación de la aplicación esté configurada como true.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature.

Var fsinspected = FeatureSetByRelationshipName($feature, “pole_inspection”, [“comments”], false)
Return count(fsinspected)

Lea un registro relacionado de una clase de relación utilizando la función FeatureSetByRelationshipClass de Arcade.

Con la función FeatureSetByRelationshipClass se puede reescribir la misma secuencia de comandos para leer registros relacionados de una clase de relación. Con esta función no necesita conocer la clave externa, solo el nombre de relación: pole_inspection. Esta función es compatible con la ejecución tanto del lado cliente como del lado servidor, por lo que las reglas de atributo que utilizan esta función pueden ejecutarse localmente en la aplicación.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature.

Var fsinspected = FeatureSetByRelationshipClass ($feature, “pole_inspection”, [“comments”], false)
Return count(fsinspected)

Crear, actualizar y eliminar registros relacionados

Los registros relacionados de las clases de relación también se pueden editar mediante reglas de cálculo basadas en el retorno de diccionario.

Aquí se ilustra un ejemplo de cómo crear una regla de cálculo que genera un registro relacionado. Cuando el usuario actualiza un campo de comentario de poste, la palabra clave del diccionario edit se usa para crear un registro de inspección. De manera similar, puede actualizar o eliminar registros relacionados. Para más información, consulte Palabras clave del diccionario de reglas de atributos.

Agregue un registro relacionado nuevo correspondiente a una clase de relación en una edición de actualización.

Se utiliza una regla de cálculo para crear un nuevo registro relacionado cuando el usuario actualiza un campo de comentario de poste. En esta expresión, la palabra clave del diccionario editar se utiliza para crear un nuevo registro de inspección si el campo de comentarios cambia. De manera similar, puede actualizar o eliminar registros relacionados. Consulte Palabras clave de diccionario de reglas de atributos para obtener más información.

//A calculation rule that triggers on an update event when the pole comment field is edited. 
//The expression first checks if the comment field changed and creates a new related record.

If ($originalfeature.comment != $feature.comment)
{ 
    Return {
                 “edit”: [{
   “className”: “inspection”,
   “adds”: [{ “attributes”: { “comments”: $feature.comment } }] 
}] 

}
Return;

Validar y evaluar las reglas de clase de relación

Se pueden crear y aplicar las reglas de atributos validación o restricción para hacer cumplir las reglas de clase de relación.

Por ejemplo, tiene configurada una clase de relación entre la clase de entidad de postes (origen) y la tabla de inspecciones (destino). Cada poste debe tener al menos una o más inspecciones registradas.

Para ello, puede crear una regla de clase de relación de uno a uno (1:1) o de uno a muchos (1:M) entre estos datos relacionados. Una vez creada la regla de clase de relación, puede utilizar el siguiente script para escribir una regla de atributo de validación que se aplicaría a la clase de entidad de postes (origen) para forzar que cada poste deba pasar una o más inspecciones:

//A validation rule that ensures each pole passes one or more inspections.

var fsInspections = FeatureSetByRelationshipClass($feature, "poles");
if (count(fsInspections) == 0) return false;
return true;

Después de agregar a los datos esta regla de atributos de validación, el proceso de evaluación revisa las reglas de los datos para garantizar que se sigan las reglas. El método de evaluación utilizado depende del tipo y propiedades de la regla.

Las reglas de validación se evalúan en un momento especificado por el usuario mediante la vista del Inspector de errores o la herramienta Evaluar reglas. Durante la evaluación, una regla de validación crea entidades de error que resaltan las entidades que violan las reglas. Las entidades de error de estas reglas se pueden revisar con el Inspector de errores.

Nota:

Puede crear estas reglas utilizando la función FeatureSetByRelationshipName o FeatureSetByRelationshipClass Arcade. FeatureSetByRelationshipClass le permite evaluar reglas a través de un servicio en el lado del cliente y requerirá ArcGIS Pro 3.2 o posterior y se explica en la sección Leer registros relacionados anterior.

Para modificar esta regla de atributos con el fin de imponer que un poste solo deba tener una inspección o ninguna, puede reescribir el script de la siguiente manera:

//A validation rule that ensures each pole has one or fewer inspections.

var fsInspections = FeatureSetByRelationshipClass($feature, "poles");
if (count(fsInspections) > 1 ) return false;
return true;

También puede crear y aplicar a los datos una regla de atributos de restricción. Las reglas de restricción especifican las configuraciones de atributos y las relaciones generales permitidas en una entidad. A diferencia de las reglas de cálculo, las reglas de restricción no se utilizan para rellenar atributos; se emplean para garantizar que se cumplen unas condiciones específicas en una entidad y también pueden impedir la edición si no se cumple una condición.

Las reglas de restricción se evalúan durante las operaciones de edición para desencadenar eventos como la inserción, la actualización y la eliminación, y devolverán un resultado verdadero o falso que representa si se satisface una regla, como se indica a continuación:

  • Verdadero: se cumple la expresión de script proporcionada y se creará la entidad.
  • Falso: no se cumple la expresión de script proporcionada y no se creará la entidad.

Al crear y aplicar reglas de atributos de restricción, preste mucha atención al orden del desencadenador de edición.

Por ejemplo, se crea una regla de atributo de restricción y se aplica a la clase de entidad de postes para imponer que deba existir al menos un evento de inspección para cada poste de la clase de entidad de postes. Si la regla de atributo de restricción está configurada para desencadenarse en una inserción, como cuando se agrega un nuevo poste, el poste no se creará. En este escenario, se recomienda crear la regla de atributo de restricción para que se desencadene en una actualización en lugar de en una inserción.

Nota:

El botón Reglas listas para usar Reglas listas para usar proporciona acceso a una galería de comprobaciones configurables que admiten la creación de reglas de restricción y validación. Se encuentra disponible con cualquier licencia de ArcGIS Data Reviewer.

Más información sobre cómo crear reglas de atributos con ArcGIS Data Reviewer

Más información sobre la creación y administración de reglas de atributos