Règles attributaires et classes de relations

Des règles attributaires peuvent être utilisées pour lire et mettre à jour des enregistrements associés de jeux de données qui participent à des classes de relations dans une géodatabase. Des règles peuvent être appliquées aux classes d’entités et tables qui participent à des classes de relations, qui incluent des pièces jointes et une annotation liée à une entité. Des règles attributaires peuvent également être utilisées pour intercepter des événements de mise à jour de mises à jour effectuées dans les classes d’origine et de destination d’une relation (à savoir, ajout, retrait ou suppression d’un enregistrement associé). Par exemple, une règle attributaire de calcul immédiat peut mettre à jour un champ attributaire lorsqu’une entité est ajoutée à une classe d’entités associée.

Événements de déclenchement avec des classes de relations

Les règles attributaires immédiates sont déclenchées sur des événements de mise à jour, comme des opérations d’insertion, de mise à jour et de suppression. Lorsque vous ajoutez un enregistrement associé à ArcGIS Pro à l’aide des options Add New To Relationship (Ajouter un nouvel élément à la relation) ou Add Selected To Relationship (Ajouter l’élément sélectionné à la relation) du menu contextuel, plusieurs événements de mise à jour sont déclenchés.

Si vous utilisez l’opération Add New To Relationship (Ajouter un nouvel élément à la relation) du menu contextuel, les événements suivants se produisent :

  • Une ligne vide est créée dans la table de destination de la classe de relations.
    • Insérez un déclencheur sur la ligne de destination.
  • La clé étrangère est définie sur la ligne de destination.
    • Mettez à jour le déclencheur sur la ligne de destination.
Lorsque vous ajoutez une règle attributaire sur la table de destination avec un événement de déclenchement de mise à jour, la règle capture la clé étrangère et interroge la ligne associée dans la table d’origine.

Les opérations Add Selected To Relationship (Ajouter l’élément sélectionné à la relation) et Remove From Relationship (Supprimer de la relation) du menu contextuel peuvent également être utilisées.

Le tableau ci-après répertorie les fonctions spécifiques qui peuvent être distinguées sur l’événement de mise à jour en comparant $originalFeature.key et $feature.key.

FonctionÉvénementExpression ArcGIS Arcade

Ajouter une entité à une relation

Mettre à jour

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

Ajouter les entités sélectionnées à une relation

Mettre à jour

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

Supprimer une entité d’une relation

Mettre à jour

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

Supprimer une opération effectuée sur un enregistrement associé

Supprimer

Lire les enregistrements associés

Si vous utilisez des classes de relations, vous pouvez lire les enregistrements associés à l’aide de fonctions Arcade qui renvoie les enregistrements associés des entités en entrée.

  • FeatureSetByRelationshipName : l’exécution est limitée au contexte du serveur. Si vous utilisez cette fonction pour les règles attributaires, vérifiez que l’option Exclude from application evaluation (Exclure de l’évaluation de l’application) est activée.
  • FeatureSetByRelationshipClass : prend en charge l’exécution à la fois côté serveur et côté client. Les règles qui utilisent cette fonction peuvent être exécutées en local dans l’application (par exemple, ArcGIS Pro et ArcGIS Maps SDKs for Native Apps) avant que la mise à jour ne soit envoyée à la source de données.

Vous pouvez également lire les enregistrements associés à l’aide de la fonction Arcade FeatureSetByName et les filtrer en fonction de la clé étrangère.

Lisez les enregistrements associés d’une classe de relations à l’aide de la fonction ArcadeFeatureSetByName.

Une règle de calcul est créée sur le champ InspectionCount dans la classe d’entités du poteau qui fait partie d’une classe de relations un vers plusieurs avec la table d’inspections. La fonction FeatureSetByName permet de lire directement la classe d’inspections et d’extraire les enregistrements associés lors de la mise à jour. L’utilisation de cette fonction Arcade nécessite de connaître le champ de la classe de relations. Pour cette classe de relations, la clé primaire d’origine est le champ globalID de la classe d’entités du poteau et la clé étrangère d’origine est le champ poleguid de la table autonome d’inspections.

//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)

Lisez un enregistrement associé d’une classe de relations à l’aide de la fonction ArcadeFeatureSetByRelationShipName.

Le même script permettant de lire les enregistrements associés d’une classe de relations peut être réécrit avec la fonction FeatureSetRelationshipName. Si vous utilisez cette fonction, vous n’avez pas besoin de connaître la clé étrangère, mais uniquement le nom de la relation, à savoir pole_inspection.

Attention :

Si vous utilisez cette fonction pour créer une règle attributaire, vérifiez que l’option Exclude from application evaluation (Exclure de l’évaluation de l’application) est activée.

//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)

Lisez un enregistrement associé d’une classe de relations à l’aide de la fonction ArcadeFeatureSetByRelationshipClass.

Le même script permettant de lire les enregistrements associés d’une classe de relations peut être réécrit avec la fonction FeatureSetByRelationshipClass. Si vous utilisez cette fonction, vous n’avez pas besoin de connaître la clé étrangère, mais uniquement le nom de la relation, à savoir pole_inspection. Cette fonction prenant en charge l’exécution à la fois côté serveur et client, les règles attributaires qui utilisent cette fonction peuvent être exécutées en local dans l’application.

//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)

Créer, mettre à jour et supprimer des enregistrements associés

Les enregistrements associés de classes de relations peuvent également être mis à jour à l’aide de règles de calcul en fonction du renvoi du dictionnaire.

Voici un exemple de création de règle de calcul qui crée un enregistrement associé. Lorsque le champ de commentaire d’un poteau est mis à jour par l’utilisateur, le mot-clé du dictionnaire edit est utilisé pour créer un enregistrement d’inspection. De même, vous pouvez mettre à jour ou supprimer des enregistrements associés. Pour en savoir plus, reportez-vous à la rubrique Mots-clés du dictionnaire de règles attributaires.

Ajoutez un nouvel enregistrement associé pour une classe de relations lors d’une mise à jour.

Une règle de calcul permet de créer un nouvel enregistrement associé lorsque le champ de commentaire d’un poteau est mis à jour par l’utilisateur. Dans cette expression, le mot-clé du dictionnaire edit est utilisé pour créer un nouvel enregistrement d’inspection si le champ des commentaires est modifié. De même, vous pouvez mettre à jour ou supprimer des enregistrements associés. Pour plus d’informations, reportez-vous à la rubrique Mots-clés du dictionnaire de règles attributaires.

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