Úvod
Tento příspěvek dokumentuje experimentální pracovní postup vyvinutý a testovaný v ArcGIS Online Experience Builder pro podmíněné vizuální formátování uvnitř widgetu Table. Tento přístup používá zdroj dat Arcade k vytvoření virtuálního FeatureSet obsahujícího vypočítaná textová pole. Tato pole mohou obsahovat Unicode symboly nebo HTML/CSS generované podle hodnot atributů.
Výsledný FeatureSet je pak použit jako zdroj standardního Experience Builder Table. V testovaném prostředí to umožnilo indikátory Unicode, podmíněně barevný text, barevné číselné hodnoty a experimentální barevný blok, který vizuálně přibližuje podmíněně formátovanou buňku tabulky. Původní zdrojová data nejsou upravena.
Poznámka k pokročilému formátování v Experience Builder. Experience Builder také podporuje dynamický obsah a stylování založené na Arcade v podporovaných kontextech widgetů. Zde popsaný pracovní postup řeší jiný případ: podmíněné vizuální formátování hodnot zobrazených ve standardním widgetu Table generováním formátovaného obsahu ve FeatureSet dat Arcade. Nemělo by být chápáno jako nativní podmíněné formátování na úrovni buněk poskytované widgetem Table.
1. Základní myšlenka
Pracovní postup:
Původní tabulka 192 Arcade Data 192 Virtuální FeatureSet 192 Widget Table
Pro obecný reprodukovatelný příklad předpokládejme, že zdrojová tabulka obsahuje OBJECTID, REACH_ID (unikátní společný klíč) a AREA (číselná hodnota). Demonstrativní pravidla jsou záměrně libovolná: AREA = -99999 znamená Žádná data; AREA < 100 znamená NÍZKÁ; AREA >= 100 znamená VYSOKÁ.
2. Vytvoření zdroje dat Arcade
V Experience Builder použijte Data 192 Přidat data 192 Arcade, poté načtěte zdrojovou tabulku pomocí FeatureSetByPortalItem().
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
Nahraďte YOURPORTAL, YOUR_ITEM_ID a ID tabulky/vrstvy vlastními hodnotami. Geometrie není pro tento příklad tabulky vyžadována, proto je includeGeometry nastaveno na false.
3. Kompletní příklad Arcade
Následující kompletní skript zachovává původní atributy a vytváří pět experimentálních polí, aby bylo možné výsledky porovnat vedle sebe.
// ============================================================
// 1. PŘIPOJENÍ K PORTÁLU
// ============================================================
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
// ============================================================
// 2. NAČTENÍ PŮVODNÍ TABULKY
// ============================================================
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
// ============================================================
// 3. DEFINOVÁNÍ VIRTUÁLNÍHO FEATURESETU
// ============================================================
var output = {
fields: [
{
name: "OBJECTID",
alias: "OBJECTID",
type: "esriFieldTypeOID"
},
{
name: "REACH_ID",
alias: "Reach ID",
type: "esriFieldTypeString",
length: 50
},
{
name: "AREA",
alias: "Area",
type: "esriFieldTypeDouble"
},
{
name: "TEST_UNICODE",
alias: "Unicode",
type: "esriFieldTypeString",
length: 50
},
{
name: "TEST_HTML",
alias: "HTML text",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_VALUE",
alias: "Unicode + value",
type: "esriFieldTypeString",
length: 50
},
{
name: "TEST_HTML_VALUE",
alias: "HTML value",
type: "esriFieldTypeString",
length: 150
},
{
name: "TEST_BACKGROUND",
alias: "Background test",
type: "esriFieldTypeString",
length: 300
}
],
geometryType: "",
features: []
};
// ============================================================
// 4. LOOP THROUGH SOURCE RECORDS
// ============================================================
for (var f in fs) {
var reachID = f.REACH_ID;
var area = f.AREA;
// TEST 1 - Unicode indicator
var unicodeResult = "";
if (area == -99999) {
unicodeResult = "⚪ ND";
}
else if (area < 100) {
unicodeResult = "🔴 LOW";
}
else {
unicodeResult = "🟢 HIGH";
}
// TEST 2 - HTML colored text
var htmlResult = "";
if (area == -99999) {
htmlResult = "<span style='color:gray'>ND</span>";
}
else if (area < 100) {
htmlResult = "<span style='color:red'>LOW</span>";
}
else {
htmlResult = "<span style='color:green'>HIGH</span>";
}
// TEST 3 - Unicode indicator + original value
var valueResult = "";
if (area == -99999) {
valueResult = "⚪ ND";
}
else if (area < 100) {
valueResult = "🔴 " + Text(area, "#,##0.00");
}
else {
valueResult = "🟢 " + Text(area, "#,##0.00");
}
// TEST 4 - Original value colored with HTML
var htmlValue = "";
if (area == -99999) {
htmlValue = "<span style='color:gray'>ND</span>";
}
else if (area < 100) {
htmlValue =
"<span style='color:red'>" +
Text(area, "#,##0.00") +
"</span>";
}
else {
htmlValue =
"<span style='color:green'>" +
Text(area, "#,##0.00") +
"</span>";
}
// TEST 5 - Experimental simulated cell background
// This styles a block inside the field; it does NOT
// modify the native Table cell itself.
var backgroundResult = "";
if (area == -99999) {
backgroundResult =
"<div style='" +
"background-color:gray;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>ND</div>";
}
else if (area < 100) {
backgroundResult =
"<div style='" +
"background-color:red;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>" +
Text(area, "#,##0.00") +
"</div>";
}
else {
backgroundResult =
"<div style='" +
"background-color:green;" +
"color:white;" +
"width:100%;" +
"padding:6px;" +
"text-align:center;" +
"font-weight:bold" +
"'>" +
Text(area, "#,##0.00") +
"</div>";
}
// BUILD OUTPUT RECORD
Push(
output.features,
{
attributes: {
OBJECTID: f.OBJECTID,
REACH_ID: reachID,
AREA: area,
TEST_UNICODE: unicodeResult,
TEST_HTML: htmlResult,
TEST_VALUE: valueResult,
TEST_HTML_VALUE: htmlValue,
TEST_BACKGROUND: backgroundResult
}
}
);
}
// ============================================================
// 5. RETURN THE VIRTUAL FEATURESET
// ============================================================
return FeatureSet(
Text(output)
);
4. Use the Arcade Data source in the Table widget
Run and apply the expression, then configure a Table widget to use the Arcade Data source. The output should expose OBJECTID, REACH_ID, AREA, TEST_UNICODE, TEST_HTML, TEST_VALUE, TEST_HTML_VALUE, and TEST_BACKGROUND.
Practical observation: after adding fields to the Arcade expression, the Table may continue to use the previous schema. If a new field appears in the Arcade output but not in the Table, make the Table re-read/refresh the Arcade Data source.
5. Filter the virtual table from a map selection
Retain the same common key in the source feature layer and in the virtual FeatureSet. Configure Map → Action → Record selection changes → Filter data.
Setting | Value |
|---|
Trigger data | Feature layer |
Trigger field | REACH_ID |
Action data | Arcade Data |
Action field | REACH_ID |
Mode | Default |
With a 1:1 relationship, selecting a map feature filters the virtual Table to the corresponding record.
6. Results verified in the tested environment
- Unicode indicators: worked.
- Unicode indicator + numeric value: worked.
- HTML text color using <span>: worked.
- HTML-colored numeric values: worked.
- Background-color block using <div>: worked experimentally.
Figure 1. Conditional visual formatting verified in the Experience Builder Table: Unicode indicator, HTML-colored text, Unicode indicator with numeric value, HTML-colored numeric value, and experimental simulated cell background.
7. Important distinction and limitations
This should not be described as native conditional formatting of the Table widget. A more accurate description is conditional visual formatting of the content of a virtual Arcade field displayed by the Table widget.
The background test does not style the native table cell. It renders an HTML block inside the field content and uses width, padding, background-color, text alignment, and font weight to visually approximate a colored cell.
The <div>-based background behavior should be treated as experimental. It was verified in the tested ArcGIS Online environment, but it should not be assumed to be a stable supported API contract. HTML/CSS sanitization or rendering behavior may change between updates or between ArcGIS Online and ArcGIS Enterprise. Keep production HTML simple and retest after updates.
Omezení počtu prvků a pozorované chování. Dokumentace Esri uvádí maximálně 50 000 prvků, když je FeatureSet použit k vytvoření kolekce prvků. Virtuální FeatureSets vytvořené v tomto příspěvku spadají do typu pracovního postupu, pro který je uvedené omezení relevantní. Nicméně další testy ve stejném prostředí ArcGIS Online úspěšně použily 50 001 a 100 000 generovaných záznamů v widgetu Table, včetně přímých dotazů na OBJECTID 50001 a 100000. Sekce 9 podrobně dokumentuje tento nesoulad. Pozorované chování je experimentální a nemělo by být považováno za podporovanou náhradu za dokumentované omezení Esri.
8. Další ověření: filtrování 1:N a virtuální transformace z širokého do dlouhého formátu
Byly provedeny dva další testy k ověření, že Arcade Data může podporovat pracovní postup 1:N řízený výběrem na mapě. Oba testy použily stejný společný identifikátor dosahu v mapové vrstvě i v tabulce nebo virtuálním FeatureSet.
Test 1 - Existující fyzická tabulka 1:N.Byl vytvořen zdroj Arcade Data z existující tabulky již uspořádané v dlouhém formátu, s více záznamy o průtoku a trvání pro každý dosah. Akce Map (Změny výběru záznamu 192 Filtrovat datové záznamy) spojila identifikátor dosahu ve vrstvě prvků se stejným identifikátorem ve zdroji Arcade Data. Výběr jednoho dosahu filtroval tabulku na všechny odpovídající záznamy, nikoli pouze jeden záznam. To potvrzuje, že virtuální zdroj Arcade Data může participovat v pracovním postupu filtrování 1:N.
Obrázek 2. Test 1: výběr dosahu Arno_3629 filtruje tabulku Arcade Data 1:N na více záznamů průtoku a trvání pro stejný dosah.
Test 2 - Virtuální transformace z širokého do dlouhého formátu.Zdrojová tabulka byla místo toho načtena ve své původní široké struktuře, kde jsou hodnoty průtoku pro různé délky uloženy v samostatných polích. Arcade dynamicky transformoval každý zdrojový záznam do více virtuálních záznamů obsahujících Reach ID, Discharge, Duration label a číselnou Duration. Výsledný virtuální FeatureSet 1:N byl poté připojen ke stejnému filtru výběru na mapě. Výběr stejného dosahu vrátil očekávané více záznamů a hodnoty průtoku odpovídaly odpovídající fyzické tabulce v dlouhém formátu, kromě zaokrouhlení při zobrazování.
Obrázek 3. Test 2: Arcade vytváří virtuální tabulku 1:N ze široké zdrojové tabulky a výsledek je úspěšně filtrován podle vybraného dosahu.
Tyto testy rozšiřují původní ověření 1:1. V testovaném prostředí ArcGIS Online Experience Builder byl Arcade Data schopen jak zpřístupnit existující strukturu 1:N, tak dynamicky vytvořit odvozenou strukturu 1:N bez úpravy zdrojové služby.
Pro větší datové sady by měl být výsledný počet virtuálních záznamů proto posuzován společně s výše uvedeným limitem kolekce prvků.
9. Další ověření: chování za hranicí dokumentovaného limitu 50 000 prvků
Dokumentace Esri uvádí, že když je výsledek Arcade Data použit k vytvoření kolekce prvků, FeatureSet použitý k vytvoření této kolekce může obsahovat maximálně 50 000 prvků. Protože příklady v tomto příspěvku vytvářejí nový FeatureSet pomocí FeatureSet(Text(output)), byl proveden další test, aby se zjistilo, co se stane, když je tento dokumentovaný práh překročen v aktuálním prostředí ArcGIS Online Experience Builder.
Byl vytvořen syntetický zdroj Arcade Data se dvěma poli (OBJECTID a TEST_VALUE) bez geometrie. Výraz generoval sekvenční záznamy v paměti a vracel je pomocí FeatureSet(Text(output)). Testy s 49 999 a 50 000 záznamy proběhly normálně. Výraz byl poté testován s 50 001 záznamy.
Při 50 001 záznamech editor Arcade stále úspěšně vyhodnotil výraz. Po přidání zdroje dat do Experience Builder standardní widget Table hlásil celkem 50 001 záznamů. Filtr tabulky používající OBJECTID = 50001 vrátil očekávaný záznam, což potvrzuje, že záznam nad dokumentovaným prahem 50 000 nebyl pouze zahrnut do zobrazovaného počtu, ale byl přímo dotazovatelný.
Test byl poté opakován s 100 000 generovanými záznamy. Widget Table přijal zdroj dat a filtr používající OBJECTID = 100000 vrátil očekávaný záznam a TEST_VALUE = 100000. V tomto testovaném prostředí tedy virtuální FeatureSet zůstal použitelný alespoň do počtu 100 000 záznamů.
Toto pozorování by nemělo být interpretováno jako překonání dokumentovaného limitu Esri na 50 000 prvků nebo jako podporovaná garance pro produkční aplikace. Dokumentuje pouze chování pozorované v ArcGIS Online Experience Builder v srpnu 2026. Skutečné chování může záviset na implementačních detailech a může se změnit s budoucími aktualizacemi ArcGIS Online nebo se lišit v ArcGIS Enterprise. Aplikace by měly být nadále navrhovány s ohledem na dokumentovaný limit, pokud Esri neupřesní nebo neaktualizuje specifikaci.
Praktický dopad pro transformace ze širokého do dlouhého formátu. Transformace může znásobit počet virtuálních záznamů vytvořených z každého zdrojového záznamu. Výše uvedené testy ukazují, že překročení počtu 50 000 nezpůsobilo okamžitý neúspěch v testovaném prostředí, ale toto pozorované chování by nemělo být použito jako důvod k navrhování neomezených transformací na straně klienta. Měla by být také zvážena výkonnost, využití paměti, zdroje prohlížeče a budoucí kompatibilita.
Obrázek 4. Experimentální ověření za hranicí dokumentovaného limitu 50 000 prvků. Virtuální Arcade FeatureSet obsahující 100 000 generovaných záznamů je použit widgetem Table Experience Builder. Filtrování podle OBJECTID = 100000 úspěšně vrací odpovídající záznam, což potvrzuje, že tento záznam je přímo dotazovatelný v testovaném prostředí ArcGIS Online (srpen 2026).
Výsledek uvedený na obrázku 4 je pozorované experimentální chování a neměl by být interpretován jako nahrazení dokumentovaného limitu Esri na počet prvků rovných 50 000.
10. Proč může být tato technika užitečná i mimo formátování
- Kombinovat vybrané atributy z více tabulek pomocí společného klíče.
- Vypočítat pole bez úpravy zdrojové služby.
- Nahradit sentinelové hodnoty jako -99999 hodnotou ND.
- Agregovat nebo shrnout záznamy ze vztahů typu 1:N.
- Vytvořit odvozené souhrnné tabulky.
- Zachovat klíč vztahu tak, aby výsledek reagoval na výběry na mapě.
- Prozkoumat odvozené FeatureSets zahrnující geometrii pro jiné pracovní postupy.
V tomto smyslu může Arcade Data fungovat jako lehká virtuální transformační vrstva mezi zdrojovými službami a widgety Experience Builder.
Závěr
Zdrojová data 192 Arcade Data 192 Virtuální FeatureSet 192 Vypočítaná HTML pole 192 Tabulka Experience Builder 192 Podmíněné vizuální formátování
Zdrojová tabulka zůstává nedotčena. Přístupy založené na Unicode a <span> jsou konzervativnější možnosti. Technika blokového pozadí je vizuálně silná, ale měla by být explicitně označena jako experimentální.
Poděkování a transparentnost
Tento pracovní postup byl vyvinut prostřednictvím iterativní série experimentů za pomoci ChatGPT (OpenAI) jako technického asistenta.
ChatGPT pomáhal prozkoumávat možné přístupy a generovat a upravovat kód Arcade, zatímco každé chování popsané v tomto příspěvku bylo testováno přímo v ArcGIS Online Experience Builder.
Experimentální ověření bylo důležité: některé počáteční předpoklady - včetně toho, že HTML formátování nebude vykreslováno widgetem Table - se ukázaly jako nesprávné při testování ve skutečném widgetu. Tato pozorování vedla k následným testům s barevnými číselnými hodnotami a blokem barvy pozadí.
Testovací prostředí: ArcGIS Online Experience Builder, srpen 2026.
Odkazy na dokumentaci
022 Esri, dokumentace ArcGIS Experience Builder, 22Vybrat data22 014 Přidat data pomocí Arcade; požadavky na návrat FeatureSet a dokumentovaný limit kolekce prvků o velikosti 50 000 prvků. Sekce 9 samostatně uvádí vyšší počty pozorované experimentálně v testovaném prostředí.
022 Esri, dokumentace ArcGIS Experience Builder, 22Pokročilé formátování22 014 Dynamický obsah založený na Arcade a stylování v podporovaných kontextech widgetů.