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 Pro 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 Pro 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;