TL;DR: Esta expresión devuelve el resumen de edición más reciente a través de múltiples tablas.<\/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>Funciones Personalizadas, Combinando Funciones<\/H4>Eso es mucha salida intermedia innecesaria que se repetiría para cada tabla. Siempre que sea posible, es deseable combinar funciones juntas. Pero tal vez no tanto como para que tu código sea difícil de entender.<\/P>Considera:<\/P>First(OrderBy(FeatureSetByRelationshipName($feature, "EH_Complaints_violations"), 'last_edited_date DESC'))<\/PRE>Esa es una expresión válida, pero bastante larga. Siéntete libre de poner algunos saltos de línea si te ayuda.<\/P>First( OrderBy( FeatureSetByRelationshipName( $feature, "EH_Complaints_violations"), 'last_edited_date DESC')) <\/PRE>En este ejemplo, sin embargo, tendremos que escribir mucho de esto para cada <\/EM>tabla relacionada en nuestra capa. Personalmente, me gusta usar funciones personalizadas para cosas como esta. Aquí usaré una función personalizada MostRecent<\/STRONG> para combinar las funciones First<\/STRONG> y OrderBy<\/STRONG>. Luego puedo usar eso con cada tabla relacionada para obtener mis entidades más recientes muy concisamente.<\/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>Comparaciones<\/H4>Todo esto está bien y es bueno, pero ¿cómo obtengo la entidad más reciente entre estas entidades individuales? No puedo <\/EM>usar OrderBy<\/STRONG>, porque estas son entidades separadas, no un FeatureSet. Sin embargo, sí existe la función Sort<\/STRONG><\/A>. Pero toma un arreglo y una función de comparación como argumentos, y nos faltan esos.<\/P>Bastante fácil para el arreglo. ¡Solo pon corchetes y comas alrededor de tus entidades!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>La comparación es simple. Tomando el last_edited_date <\/STRONG>de nuestras entidades, simplemente vemos cuál es mayor, es decir, más reciente.<\/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>Ahora tenemos un arreglo de entidades ordenadas desde la más recientemente editada hasta la menos reciente, y podemos simplemente tomar el valor First<\/STRONG> de ese arreglo.<\/P>Sólo que... ¿cómo sabemos a qué tabla pertenece?<\/EM>?<\/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>Comparaciones<\/H4>Todo esto está bien y es bueno, pero ¿cómo obtengo la entidad más reciente entre estas entidades individuales? No puedo <\/EM>usar OrderBy<\/STRONG>, porque estas son entidades separadas, no un FeatureSet. Sin embargo, sí existe la función Sort<\/STRONG><\/A>. Pero toma un arreglo y una función de comparación como argumentos, y nos faltan esos.<\/P>Bastante fácil para el arreglo. ¡Solo pon corchetes y comas alrededor de tus entidades!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>La comparación es simple. Tomando el last_edited_date <\/STRONG>de nuestras entidades, simplemente vemos cuál es mayor, es decir, más reciente.<\/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>Ahora tenemos un arreglo de entidades ordenadas desde la más recientemente editada hasta la menos reciente, y podemos simplemente tomar el valor First<\/STRONG> de ese arreglo.<\/P>Sólo que... ¿cómo sabemos a qué tabla pertenece?<\/EM>?<\/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>Ahora tenemos un arreglo de entidades ordenadas desde la más recientemente editada hasta la menos reciente, y podemos simplemente tomar el valor First<\/STRONG> de ese arreglo.<\/P>Sólo que... ¿cómo sabemos a qué tabla pertenece?<\/EM>?<\/P>
[ {table: 'Detalles de Queja', feat: $feature}, {table: 'Violations', feat: most_recent_v}, {table: 'Narrative', feat: most_recent_n}]<\/code><\/pre> <\/P>Nuestra función DateSort aún puede funcionar igual, pero ahora necesitaremos acceder a la entidad como un valor del diccionario mayor. Es decir,<\/P>a['feat']['last_edited_date']<\/PRE>y así sucesivamente. Ahora tenemos nuestra única entidad junto con su tabla de origen. Solo queda construir una cadena de salida.<\/P> <\/P>return `${most_recent_feature['table']} layereditado ${most_recent_feature['feat']['last_edited_date']}`<\/code><\/pre> <\/P>Pero ya he hablado suficiente y dado suficientes piezas de la expresión. Vamos a concluir.<\/P>La Expresión Final<\/H3>Aquí está todo junto. Con un par de ajustes adicionales también, como agregar el nombre completo del usuario.<\/P> <\/P>// Función personalizada para devolver la entidad más recientefunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets para cada tabla relacionadavar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Arreglo de diccionarios con tabla de origenvar feats = [ {table: 'Detalles de Queja', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Función para ordenarfunction 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))// Líneas extra para obtener el nombre completo del usuariovar portal = Portal('https:\/\/maps.co.kendall.il.us\/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Devuelve una cadena formateada basada en la entidad más recientereturn `${most_recent['table']} tableeditado ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}por ${editing_user}`<\/code><\/pre> <\/P> Y después de todo eso, aquí está el resultado:<\/P>Parece mucho para tres líneas de texto, pero ahora el usuario que supervisa este programa puede obtener una pieza de información que desea con un solo clic.
return `${most_recent_feature['table']} layereditado ${most_recent_feature['feat']['last_edited_date']}`<\/code><\/pre> <\/P>Pero ya he hablado suficiente y dado suficientes piezas de la expresión. Vamos a concluir.<\/P>La Expresión Final<\/H3>Aquí está todo junto. Con un par de ajustes adicionales también, como agregar el nombre completo del usuario.<\/P> <\/P>// Función personalizada para devolver la entidad más recientefunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets para cada tabla relacionadavar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Arreglo de diccionarios con tabla de origenvar feats = [ {table: 'Detalles de Queja', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Función para ordenarfunction 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))// Líneas extra para obtener el nombre completo del usuariovar portal = Portal('https:\/\/maps.co.kendall.il.us\/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Devuelve una cadena formateada basada en la entidad más recientereturn `${most_recent['table']} tableeditado ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}por ${editing_user}`<\/code><\/pre> <\/P> Y después de todo eso, aquí está el resultado:<\/P>Parece mucho para tres líneas de texto, pero ahora el usuario que supervisa este programa puede obtener una pieza de información que desea con un solo clic.
// Función personalizada para devolver la entidad más recientefunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets para cada tabla relacionadavar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Arreglo de diccionarios con tabla de origenvar feats = [ {table: 'Detalles de Queja', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Función para ordenarfunction 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))// Líneas extra para obtener el nombre completo del usuariovar portal = Portal('https:\/\/maps.co.kendall.il.us\/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Devuelve una cadena formateada basada en la entidad más recientereturn `${most_recent['table']} tableeditado ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}por ${editing_user}`<\/code><\/pre> <\/P> Y después de todo eso, aquí está el resultado:<\/P>Parece mucho para tres líneas de texto, pero ahora el usuario que supervisa este programa puede obtener una pieza de información que desea con un solo 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:
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.