TL;DR: Deze expressie geeft de meest recente bewerkingssamenvatting over meerdere tabellen terug.<\/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>Aangepaste Functies, Functies Combineren<\/H4>Dat is veel onnodige tussenresultaten die voor elke tabel herhaald zouden worden. Waar mogelijk is het wenselijk functies samen te voegen. Maar misschien niet zozeer dat je code moeilijk te begrijpen wordt.<\/P>Denk aan:<\/P>First(OrderBy(FeatureSetByRelationshipName($feature, "EH_Complaints_violations"), 'last_edited_date DESC'))<\/PRE>Dat is een geldige expressie, maar hij is vrij lang. Voel je vrij om wat regeleinden toe te voegen als dat helpt.<\/P>First( OrderBy( FeatureSetByRelationshipName( $feature, "EH_Complaints_violations"), 'last_edited_date DESC')) <\/PRE>In dit voorbeeld moeten we echter veel typen voor elke<\/EM> gerelateerde tabel in onze laag. Persoonlijk gebruik ik graag aangepaste functies voor dit soort dingen. Hier zal ik een aangepaste functie MostRecent<\/STRONG> gebruiken om de First<\/STRONG>- en OrderBy<\/STRONG>-functies te combineren. Ik kan die dan met elke gerelateerde tabel gebruiken om mijn meest recente objecten heel beknopt te krijgen.<\/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>Vergelijkingen<\/H4>Dit is allemaal prima, maar hoe krijg ik het meest recente object uit deze individuele objecten? Ik kan niet<\/EM> OrderBy<\/STRONG> gebruiken, omdat dit aparte objecten zijn, geen FeatureSet. Er is echter wel de functie Sort<\/STRONG><\/A>. Maar die neemt een array en een vergelijkingsfunctie als argumenten, en die missen we.<\/P>Makkelijk genoeg voor de array. Zet gewoon haken en komma's rond je objecten!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>De vergelijking is simpel. Door de last_edited_date<\/STRONG>-waarde van onze objecten te nemen zien we gewoon welke groter is, dat wil zeggen recenter.<\/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>Nu hebben we een array van objecten gesorteerd van meest naar minst recent bewerkt en kunnen we gewoon de Eerste<\/STRONG>-waarde van die array nemen.<\/P>Tenzij... hoe weten we welk tabel het kwam? <\EM>?<\ P >< H4 id = " toc - hId - - 1159785252 " > Terugspoelen en Tabel van Oorsprong Opnemen < / H4 >< P > Ergens eerder in onze expressie moeten we een tabelidentificatie koppelen aan de individuele objecten. De eenvoudigste manier om dit te doen is met een < STRONG > woordenboek < / STRONG > . Of liever gezegd, een array van woordenboeken. We formatteren het als volgt : < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: most_recent_v}, {table: 'Verhaal', feat: most_recent_n}] < / code >< / pre >< P >& nbsp ; < / P >< P > Onze DateSort-functie kan nog steeds op dezelfde manier werken , maar nu moeten we toegang krijgen tot het object als een waarde van het grotere woordenboek . Dat wil zeggen , < / P >< PRE > a['feat']['last_edited_date'] < / PRE >< P > enzovoort . Nu hebben we ons enkele object , samen met zijn tabel van oorsprong . Het enige wat overblijft is om een uitvoertekst op te bouwen . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > return `${most_recent_feature['table']} laagbewerkt ${most_recent_feature['feat']['last_edited_date']}` < / code >< / pre >< P >& nbsp ; < / P >< P > Maar ik ben al lang genoeg doorgegaan en heb genoeg stukjes van de expressie gegeven . Laten we dit afronden . < / P >< H3 id = " toc - hId - - 1170288356 " > De Definitieve Expressie < / H3 >< P > Hier is hij , allemaal samengevoegd . Met nog een paar andere aanpassingen , zoals het toevoegen van de volledige naam van de gebruiker . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > // Aangepaste functie om meest recent object terug te gevenfunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets voor elke gerelateerde tabelvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Array van feature woordenboeken met tabel van oorsprongvar feats = [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: MostRecent(violations)}, {table: 'Verhaal', feat: MostRecent(narrative)}]// Sorteerfunctiefunction 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))// Extra regels om volledige naam van gebruiker te krijgenvar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Retourneer een geformatteerde uitvoertekst gebaseerd op het meest recente objectreturn `${most_recent['table']} tabelbewerkt ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}door ${editing_user}` < / code >< / pre >< P >& nbsp ; < / P >< P >& nbsp ; En na dat alles , hier is de output : < / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " jcarlson_0-1643053434529.png " style = " width: 400px; " > < img src = " https://us.v-cdn.net/6038851/uploads/images/32141iDF779BCB4DA09050/jcarlson_0-1643053434529.png " role = " button " title = " jcarlson_0-1643053434529.png " alt = " jcarlson_0-1643053434529.png " /> </ span > </ P >< P > Het lijkt misschien wat veel voor drie regels tekst , maar nu kan de gebruiker die toezicht houdt op dit programma met één klik bij de hand krijgen wat hij wil weten . < / 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>Vergelijkingen<\/H4>Dit is allemaal prima, maar hoe krijg ik het meest recente object uit deze individuele objecten? Ik kan niet<\/EM> OrderBy<\/STRONG> gebruiken, omdat dit aparte objecten zijn, geen FeatureSet. Er is echter wel de functie Sort<\/STRONG><\/A>. Maar die neemt een array en een vergelijkingsfunctie als argumenten, en die missen we.<\/P>Makkelijk genoeg voor de array. Zet gewoon haken en komma's rond je objecten!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>De vergelijking is simpel. Door de last_edited_date<\/STRONG>-waarde van onze objecten te nemen zien we gewoon welke groter is, dat wil zeggen recenter.<\/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>Nu hebben we een array van objecten gesorteerd van meest naar minst recent bewerkt en kunnen we gewoon de Eerste<\/STRONG>-waarde van die array nemen.<\/P>Tenzij... hoe weten we welk tabel het kwam? <\EM>?<\ P >< H4 id = " toc - hId - - 1159785252 " > Terugspoelen en Tabel van Oorsprong Opnemen < / H4 >< P > Ergens eerder in onze expressie moeten we een tabelidentificatie koppelen aan de individuele objecten. De eenvoudigste manier om dit te doen is met een < STRONG > woordenboek < / STRONG > . Of liever gezegd, een array van woordenboeken. We formatteren het als volgt : < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: most_recent_v}, {table: 'Verhaal', feat: most_recent_n}] < / code >< / pre >< P >& nbsp ; < / P >< P > Onze DateSort-functie kan nog steeds op dezelfde manier werken , maar nu moeten we toegang krijgen tot het object als een waarde van het grotere woordenboek . Dat wil zeggen , < / P >< PRE > a['feat']['last_edited_date'] < / PRE >< P > enzovoort . Nu hebben we ons enkele object , samen met zijn tabel van oorsprong . Het enige wat overblijft is om een uitvoertekst op te bouwen . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > return `${most_recent_feature['table']} laagbewerkt ${most_recent_feature['feat']['last_edited_date']}` < / code >< / pre >< P >& nbsp ; < / P >< P > Maar ik ben al lang genoeg doorgegaan en heb genoeg stukjes van de expressie gegeven . Laten we dit afronden . < / P >< H3 id = " toc - hId - - 1170288356 " > De Definitieve Expressie < / H3 >< P > Hier is hij , allemaal samengevoegd . Met nog een paar andere aanpassingen , zoals het toevoegen van de volledige naam van de gebruiker . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > // Aangepaste functie om meest recent object terug te gevenfunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets voor elke gerelateerde tabelvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Array van feature woordenboeken met tabel van oorsprongvar feats = [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: MostRecent(violations)}, {table: 'Verhaal', feat: MostRecent(narrative)}]// Sorteerfunctiefunction 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))// Extra regels om volledige naam van gebruiker te krijgenvar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Retourneer een geformatteerde uitvoertekst gebaseerd op het meest recente objectreturn `${most_recent['table']} tabelbewerkt ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}door ${editing_user}` < / code >< / pre >< P >& nbsp ; < / P >< P >& nbsp ; En na dat alles , hier is de output : < / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " jcarlson_0-1643053434529.png " style = " width: 400px; " > < img src = " https://us.v-cdn.net/6038851/uploads/images/32141iDF779BCB4DA09050/jcarlson_0-1643053434529.png " role = " button " title = " jcarlson_0-1643053434529.png " alt = " jcarlson_0-1643053434529.png " /> </ span > </ P >< P > Het lijkt misschien wat veel voor drie regels tekst , maar nu kan de gebruiker die toezicht houdt op dit programma met één klik bij de hand krijgen wat hij wil weten . < / 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>Nu hebben we een array van objecten gesorteerd van meest naar minst recent bewerkt en kunnen we gewoon de Eerste<\/STRONG>-waarde van die array nemen.<\/P>Tenzij... hoe weten we welk tabel het kwam? <\EM>?<\ P >< H4 id = " toc - hId - - 1159785252 " > Terugspoelen en Tabel van Oorsprong Opnemen < / H4 >< P > Ergens eerder in onze expressie moeten we een tabelidentificatie koppelen aan de individuele objecten. De eenvoudigste manier om dit te doen is met een < STRONG > woordenboek < / STRONG > . Of liever gezegd, een array van woordenboeken. We formatteren het als volgt : < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: most_recent_v}, {table: 'Verhaal', feat: most_recent_n}] < / code >< / pre >< P >& nbsp ; < / P >< P > Onze DateSort-functie kan nog steeds op dezelfde manier werken , maar nu moeten we toegang krijgen tot het object als een waarde van het grotere woordenboek . Dat wil zeggen , < / P >< PRE > a['feat']['last_edited_date'] < / PRE >< P > enzovoort . Nu hebben we ons enkele object , samen met zijn tabel van oorsprong . Het enige wat overblijft is om een uitvoertekst op te bouwen . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > return `${most_recent_feature['table']} laagbewerkt ${most_recent_feature['feat']['last_edited_date']}` < / code >< / pre >< P >& nbsp ; < / P >< P > Maar ik ben al lang genoeg doorgegaan en heb genoeg stukjes van de expressie gegeven . Laten we dit afronden . < / P >< H3 id = " toc - hId - - 1170288356 " > De Definitieve Expressie < / H3 >< P > Hier is hij , allemaal samengevoegd . Met nog een paar andere aanpassingen , zoals het toevoegen van de volledige naam van de gebruiker . < / P >< P >& nbsp ; < / P >< pre class = " lia - code - sample language - javascript " >< code > // Aangepaste functie om meest recent object terug te gevenfunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets voor elke gerelateerde tabelvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Array van feature woordenboeken met tabel van oorsprongvar feats = [ {table: 'Details Klacht', feat: $feature}, {table: 'Overtredingen', feat: MostRecent(violations)}, {table: 'Verhaal', feat: MostRecent(narrative)}]// Sorteerfunctiefunction 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))// Extra regels om volledige naam van gebruiker te krijgenvar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Retourneer een geformatteerde uitvoertekst gebaseerd op het meest recente objectreturn `${most_recent['table']} tabelbewerkt ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}door ${editing_user}` < / code >< / pre >< P >& nbsp ; < / P >< P >& nbsp ; En na dat alles , hier is de output : < / P >< P >< span class = " lia-inline-image-display-wrapper lia-image-align-inline " image-alt = " jcarlson_0-1643053434529.png " style = " width: 400px; " > < img src = " https://us.v-cdn.net/6038851/uploads/images/32141iDF779BCB4DA09050/jcarlson_0-1643053434529.png " role = " button " title = " jcarlson_0-1643053434529.png " alt = " jcarlson_0-1643053434529.png " /> </ span > </ P >< P > Het lijkt misschien wat veel voor drie regels tekst , maar nu kan de gebruiker die toezicht houdt op dit programma met één klik bij de hand krijgen wat hij wil weten . < / P >
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:
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.