TL;DR: Tento výraz vrací shrnutí nejnovější úpravy napříč více tabulkami.<\/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>Vlastní funkce, kombinování funkcí<\/H4>To je spousta zbytečných mezivýstupů, které by se opakovaly pro každou tabulku. Kdykoli je to možné, je žádoucí funkce kombinovat dohromady. Ale možná ne natolik, aby váš kód byl těžko pochopitelný.<\/P>Zvažte:<\/P>First(OrderBy(FeatureSetByRelationshipName($feature, "EH_Complaints_violations"), 'last_edited_date DESC'))<\/PRE>Toto je platný výraz, ale docela dlouhý. Klidně přidejte zalomení řádků, pokud vám to pomůže.<\/P>First( OrderBy( FeatureSetByRelationshipName( $feature, "EH_Complaints_violations"), 'last_edited_date DESC')) <\/PRE>V tomto příkladu však budeme muset hodně psát pro každou<\/EM> související tabulku ve vrstvě. Osobně rád používám vlastní funkce pro takové věci. Zde použiji vlastní funkci MostRecent<\/STRONG>, která kombinuje funkce First<\/STRONG> a OrderBy<\/STRONG>. Tu pak mohu použít u každé související tabulky a velmi stručně získat své nejnovější prvky.<\/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>Porovnání<\/H4>Toto je všechno pěkné a dobré, ale jak získám nejnovější prvek z těchto jednotlivých prvků? Nemohu použít OrderBy<\/STRONG>, protože se jedná o samostatné prvky, nikoli FeatureSet. Existuje však funkce Sort<\/STRONG><\/A>. Ale ta bere pole a porovnávací funkci jako argumenty a ty nám chybí.<\/P>Dost snadné pro pole. Stačí dát hranaté závorky a čárky kolem vašich prvků!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>Srovnání je jednoduché. Porovnáním hodnoty last_edited_date<\/STRONG> našich prvků zjistíme, která je větší, tedy novější.<\/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>Nyní máme pole prvků seřazených od nejnovějších po nejstarší a můžeme jednoduše vzít první hodnotu tohoto pole.<\/P>Ale... jak víme, z které tabulky pochází?<\/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>Porovnání<\/H4>Toto je všechno pěkné a dobré, ale jak získám nejnovější prvek z těchto jednotlivých prvků? Nemohu použít OrderBy<\/STRONG>, protože se jedná o samostatné prvky, nikoli FeatureSet. Existuje však funkce Sort<\/STRONG><\/A>. Ale ta bere pole a porovnávací funkci jako argumenty a ty nám chybí.<\/P>Dost snadné pro pole. Stačí dát hranaté závorky a čárky kolem vašich prvků!<\/P>[most_recent_v, most_recent_n, $feature]<\/PRE>Srovnání je jednoduché. Porovnáním hodnoty last_edited_date<\/STRONG> našich prvků zjistíme, která je větší, tedy novější.<\/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>Nyní máme pole prvků seřazených od nejnovějších po nejstarší a můžeme jednoduše vzít první hodnotu tohoto pole.<\/P>Ale... jak víme, z které tabulky pochází?<\/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>Nyní máme pole prvků seřazených od nejnovějších po nejstarší a můžeme jednoduše vzít první hodnotu tohoto pole.<\/P>Ale... jak víme, z které tabulky pochází?<\/EM>?<\/P>
[ {table: 'Complaint Details', feat: $feature}, {table: 'Violations', feat: most_recent_v}, {table: 'Narrative', feat: most_recent_n}]<\/code><\/pre> <\/P>Naše funkce DateSort může stále fungovat stejně, ale nyní budeme muset přistupovat k prvku jako k hodnotě většího slovníku. Tedy,<\/P>a['feat']['last_edited_date']<\/PRE>a tak dále. Nyní máme náš jediný prvek spolu s jeho tabulkou původu. Zbývá jen vytvořit výstupní řetězec.<\/P> <\/P>return `${most_recent_feature['table']} vrstvaupraveno ${most_recent_feature['feat']['last_edited_date']}`<\/code><\/pre> <\/P>Ale už jsem toho řekl dost a dal dost částí výrazu. Pojďme to shrnout.<\/P>Konečný výraz<\/H3>Zde je celý složený dohromady. S několika dalšími úpravami také jako přidání plného jména uživatele.<\/P> <\/P>// Vlastní funkce pro vrácení nejnovějšího prvkufunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets pro každou související tabulkuvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Pole slovníků prvků s tabulkou původuvar feats = [ {table: 'Complaint Details', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Funkce tříděnífunction 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))// Další řádky pro získání plného jména uživatelevar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Vrátit formátovaný výstupní řetězec založený na nejnovějším prvkureturn `${most_recent['table']} tabulkaupraveno ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}autorem ${editing_user}`<\/code><\/pre> <\/P> A po tom všem zde je výstup:<\/P>Může se to zdát trochu moc na tři řádky textu, ale nyní uživatel dohlížející na tento program může získat požadovanou informaci jediným kliknutím.<\/p>
return `${most_recent_feature['table']} vrstvaupraveno ${most_recent_feature['feat']['last_edited_date']}`<\/code><\/pre> <\/P>Ale už jsem toho řekl dost a dal dost částí výrazu. Pojďme to shrnout.<\/P>Konečný výraz<\/H3>Zde je celý složený dohromady. S několika dalšími úpravami také jako přidání plného jména uživatele.<\/P> <\/P>// Vlastní funkce pro vrácení nejnovějšího prvkufunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets pro každou související tabulkuvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Pole slovníků prvků s tabulkou původuvar feats = [ {table: 'Complaint Details', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Funkce tříděnífunction 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))// Další řádky pro získání plného jména uživatelevar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Vrátit formátovaný výstupní řetězec založený na nejnovějším prvkureturn `${most_recent['table']} tabulkaupraveno ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}autorem ${editing_user}`<\/code><\/pre> <\/P> A po tom všem zde je výstup:<\/P>Může se to zdát trochu moc na tři řádky textu, ale nyní uživatel dohlížející na tento program může získat požadovanou informaci jediným kliknutím.<\/p>
// Vlastní funkce pro vrácení nejnovějšího prvkufunction MostRecent(lyr){ return First(OrderBy(lyr, 'last_edited_date'))}// FeatureSets pro každou související tabulkuvar violations = FeatureSetByRelationshipName($feature, "EH_Complaints_violations")var narrative = FeatureSetByRelationshipName($feature, "EH_Complaints_narrative")// Pole slovníků prvků s tabulkou původuvar feats = [ {table: 'Complaint Details', feat: $feature}, {table: 'Violations', feat: MostRecent(violations)}, {table: 'Narrative', feat: MostRecent(narrative)}]// Funkce tříděnífunction 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))// Další řádky pro získání plného jména uživatelevar portal = Portal('https://maps.co.kendall.il.us/portal')var editing_user = GetUser(portal, most_recent['feat']['last_edited_user'])// Vrátit formátovaný výstupní řetězec založený na nejnovějším prvkureturn `${most_recent['table']} tabulkaupraveno ${Text(most_recent['feat']['last_edited_date'], 'DD-MMM-YYYY')}autorem ${editing_user}`<\/code><\/pre> <\/P> A po tom všem zde je výstup:<\/P>Může se to zdát trochu moc na tři řádky textu, ale nyní uživatel dohlížející na tento program může získat požadovanou informaci jediným kliknutím.<\/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:
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Nový zde? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.