TL;DR : Cette expression renvoie le résumé de la modification la plus récente sur plusieurs tables.<\/P>
var related_records = FeatureSetByRelationshipName($feature, "relationship_name")var sorted_records = OrderBy(related_records, 'last_edited_date DESC')var most_recent_record = First(sorted_records)<\/code><\/pre> <\/P>Fonctions personnalisées, combiner les fonctions<\/H4>Cela fait beaucoup de sorties intermédiaires inutiles qui seraient répétées pour chaque table. Chaque fois que possible, il est souhaitable de combiner les fonctions ensemble. Mais pas au point que votre code devienne difficile à comprendre.<\/P>Considérez :<\/P>First(OrderBy(FeatureSetByRelationshipName($feature, "EH_Complaints_violations"), 'last_edited_date DESC'))<\/PRE>C'est une expression valide, mais assez longue. N'hésitez pas à insérer des sauts de ligne si cela vous aide.<\/P>First( OrderBy( FeatureSetByRelationshipName( $feature, "EH_Complaints_violations"), 'last_edited_date DESC')) <\/PRE>Cependant, dans cet exemple, nous allons devoir taper beaucoup cela pour chaque <\/EM>table liée dans notre couche. Personnellement, j'aime utiliser des fonctions personnalisées pour ce genre de choses. Ici, j'utiliserai une fonction personnalisée MostRecent<\/STRONG> pour combiner les fonctions First<\/STRONG> et OrderBy<\/STRONG>. Je peux alors l'utiliser avec chaque table liée pour obtenir mes entités les plus récentes très succinctement.<\/P> <\/P>function MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}var violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")var most_recent_v = MostRecent(violations)var most_recent_n = MostRecent(narrative)<\/code><\/pre> <\/P>Comparaisons<\/H4>C'est bien beau tout ça, mais comment obtenir l'entité la plus récente parmi ces entités individuelles ? Je ne peux pas <\/EM>utiliser OrderBy<\/STRONG>, car ce sont des entités séparées, pas un FeatureSet. Il y a cependant la fonction Sort<\/STRONG><\/A>. Mais elle prend un tableau et une fonction de comparaison comme arguments, et il nous manque ceux-ci.<\/P>Aussi simple que pour le tableau. Il suffit d'entourer vos entités avec des crochets et des virgules !<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>La comparaison est simple. En prenant la last_edited_date <\/STRONG>de nos entités, on voit simplement laquelle est supérieure, c'est-à-dire la plus récente.<\/P> <\/P>function DateSort(a, b){ if (a['last_edited_date'] > b['last_edited_date']){ return -1 } else { return 1 }}var sorted = Sort([most_recent_v, most_recent_n, $feature], DateSort)var most_recent_feature = First(sorted)<\/code><\/pre> <\/P>Mantenant nous avons un tableau d'entités triées du plus récemment modifié au moins récemment modifié, et nous pouvons simplement prendre la valeur First<\/STRONG> de ce tableau.<\/P>Sauf... comment savons-nous d'où elle vient exactement ?<\/EM>
function MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}var violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")var most_recent_v = MostRecent(violations)var most_recent_n = MostRecent(narrative)<\/code><\/pre> <\/P>Comparaisons<\/H4>C'est bien beau tout ça, mais comment obtenir l'entité la plus récente parmi ces entités individuelles ? Je ne peux pas <\/EM>utiliser OrderBy<\/STRONG>, car ce sont des entités séparées, pas un FeatureSet. Il y a cependant la fonction Sort<\/STRONG><\/A>. Mais elle prend un tableau et une fonction de comparaison comme arguments, et il nous manque ceux-ci.<\/P>Aussi simple que pour le tableau. Il suffit d'entourer vos entités avec des crochets et des virgules !<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>La comparaison est simple. En prenant la last_edited_date <\/STRONG>de nos entités, on voit simplement laquelle est supérieure, c'est-à-dire la plus récente.<\/P> <\/P>function DateSort(a, b){ if (a['last_edited_date'] > b['last_edited_date']){ return -1 } else { return 1 }}var sorted = Sort([most_recent_v, most_recent_n, $feature], DateSort)var most_recent_feature = First(sorted)<\/code><\/pre> <\/P>Mantenant nous avons un tableau d'entités triées du plus récemment modifié au moins récemment modifié, et nous pouvons simplement prendre la valeur First<\/STRONG> de ce tableau.<\/P>Sauf... comment savons-nous d'où elle vient exactement ?<\/EM>
function DateSort(a, b){ if (a['last_edited_date'] > b['last_edited_date']){ return -1 } else { return 1 }}var sorted = Sort([most_recent_v, most_recent_n, $feature], DateSort)var most_recent_feature = First(sorted)<\/code><\/pre> <\/P>Mantenant nous avons un tableau d'entités triées du plus récemment modifié au moins récemment modifié, et nous pouvons simplement prendre la valeur First<\/STRONG> de ce tableau.<\/P>Sauf... comment savons-nous d'où elle vient exactement ?<\/EM>
[ {table: 'Détails de plainte', feat: $feature}, {table: 'Violations', feat: most_recent_v}, {table: 'Narrative', feat: most_recent_n}]<\/code><\/pre> PNotre fonction DateSort peut toujours fonctionner de la même manière, mais maintenant nous devons accéder à l'entité comme valeur du dictionnaire plus grand. C'est-à-dire,PRE>a['feat']['last_edited_date']Pet ainsi de suite. Maintenant nous avons notre entité unique avec sa table d'origine. Il ne reste plus qu'à construire une chaîne de sortie.P Preturn `${most_recent_feature['table']} layerédité ${most_recent_feature['feat']['last_edited_date']}`P PMais j'ai assez parlé et donné assez d'éléments pour l'expression. Finissons-en.PL'expression finalePVoici tout rassemblé. Avec quelques autres ajustements aussi, comme ajouter le nom complet de l'utilisateur.P P// Fonction personnalisée pour retourner l'entité la plus récentefunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets pour chaque table liéevar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Tableau des dictionnaires d'entités avec table d'originevar feats = [ {table: 'Détails de plainte', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Fonction de trifunction DateSort(a, b){ if (a['feat']['last_edited_date'] > b['feat']['last_edited_date']){ return -1 } else { return 1 }}var most_recent = First(Sort(feats, DateSort))// Lignes supplémentaires pour obtenir le nom complet d'un utilisateurvar portal = Portal('https:\/\/maps.co.kendall.il.us\/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Retourner une chaîne formatée basée sur l'entité la plus récentereturn `${most_recent['table']} tableédité ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}par ${editing_user}`P P Et après tout ça, voici le résultat :PPCela peut sembler un peu excessif pour trois lignes de texte, mais maintenant l'utilisateur qui supervise ce programme peut obtenir une information qu'il souhaite en un seul clic.
On a side note:(I do a similar thing to what @jcarlson mentions above, but I use SQL queries in Oracle, instead of Arcade.)One thing I find frustrating is that domains don't have a date column/property to track the last time the domain was modified.
Scenario — sync to external system:
I have a sidewalk FC that I sync as assets to a work order management system. The sync logic is based on a SYNC_NEEDED column in a spatial view on the FC. That SYNC_NEEDED column is based on the LAST_EDITED_DATE. But ideally, It would also account for changes to domains as well.
For example, the sidewalk FC has a MATERIAL column that uses a MATERIAL_SIDEWALK domain. If someone were to change a value in the domain from, say, CONCRETE to CONCRETE - CAST-IN-PLACE, then ideally, the affected features in the FC should be synced, so that the new material information would show up in the external system.
But since there's no way to query for domains that have changed, that doesn't seem to be possible. The only other option for capturing the domain changes would be to re-sync the entire FC on a schedule, which is problematic since the external system (IBM Maximo) is extremely slow at syncing records. The only realistic option is to sync changes-only, not sync all rows.
Related:
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.