Inleiding
Dit bericht documenteert een experimentele workflow ontwikkeld en getest in ArcGIS Online Experience Builder voor voorwaardelijke visuele opmaak binnen de Table-widget. De aanpak gebruikt een Arcade Data-bron om een virtuele FeatureSet te genereren met berekende tekenreeksvelden. Die velden kunnen Unicode-symbolen of HTML/CSS bevatten die worden gegenereerd op basis van attribuutwaarden.
De resulterende FeatureSet wordt vervolgens gebruikt als bron van een standaard Experience Builder-tabel. In de geteste omgeving maakte dit het mogelijk om Unicode-indicatoren, conditioneel gekleurde tekst, gekleurde numerieke waarden en een experimenteel gekleurd blok te tonen dat visueel een voorwaardelijk opgemaakte tabelcel benadert. De oorspronkelijke brongegevens worden niet gewijzigd.
Opmerking over geavanceerde opmaak in Experience Builder. Experience Builder ondersteunt ook Arcade-gebaseerde dynamische inhoud en styling in ondersteunde widget-contexten. De hier beschreven workflow behandelt een ander geval: conditionele visuele opmaak van waarden die worden weergegeven binnen de standaard Table-widget door geformatteerde inhoud te genereren in een Arcade Data FeatureSet. Dit moet niet worden geïnterpreteerd als native cel-niveau voorwaardelijke opmaak die door de Table-widget wordt geleverd.
1. Basisidee
Workflow:
Originele tabel 192 Arcade Data 192 Virtuele FeatureSet 192 Table-widget
Voor een generiek reproduceerbaar voorbeeld, ga ervan uit dat de brontabel OBJECTID, REACH_ID (een unieke gemeenschappelijke sleutel) en AREA (een numerieke waarde) bevat. De demonstratieregels zijn bewust willekeurig: AREA = -99999 betekent Geen Gegevens; AREA < 100 betekent LAAG; AREA >= 100 betekent HOOG.
2. Maak de Arcade Data-bron aan
Gebruik in Experience Builder Data 192 Gegevens toevoegen 192 Arcade, en lees vervolgens de brontabel met FeatureSetByPortalItem().
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
Vervang YOURPORTAL, YOUR_ITEM_ID en de tabel\/laag-ID door uw eigen waarden. Geometrie is niet vereist voor dit tabelvoorbeeld, dus includeGeometry is false.
3. Volledig Arcade-voorbeeld
Het volgende volledige script behoudt de originele attributen en maakt vijf experimentele velden zodat de resultaten naast elkaar kunnen worden vergeleken.
// ============================================================
// 1. PORTAALVERBINDING
// ============================================================
var p = Portal("https:\/\/YOURPORTAL.maps.arcgis.com");
// ============================================================
// 2. LEES DE ORIGINELE TABEL
// ============================================================
var fs = FeatureSetByPortalItem(
p,
"YOUR_ITEM_ID",
2,
["OBJECTID", "REACH_ID", "AREA"],
false
);
// ============================================================
// 3. DEFINIEER DE VIRTUELE FEATURESET
// ============================================================
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.
Beperking van het aantal features en waargenomen gedrag. De Esri-documentatie vermeldt een maximum van 50.000 features wanneer een FeatureSet wordt gebruikt om een feature-collectie te construeren. De virtuele FeatureSets die in dit bericht zijn geconstrueerd vallen binnen het type workflow waarvoor die gedocumenteerde limiet relevant is. Echter, aanvullende tests in dezelfde ArcGIS Online-omgeving gebruikten met succes 50.001 en 100.000 gegenereerde records in de Table-widget, inclusief directe queries van OBJECTID 50001 en 100000. Sectie 9 documenteert deze discrepantie in detail. Het waargenomen gedrag is experimenteel en mag niet worden beschouwd als een ondersteunde vervanging voor de door Esri gedocumenteerde limiet.
8. Aanvullende validatie: 1:N filtering en virtuele wide-to-long transformatie
Er werden twee aanvullende tests uitgevoerd om te verifiëren dat Arcade Data een 1:N workflow kan ondersteunen die wordt aangestuurd door een kaartselectie. Beide tests gebruikten dezelfde gemeenschappelijke reach-identificatie in de kaartlaag en in de tabel of virtuele FeatureSet.
Test 1 - Bestaande fysieke 1:N tabel. Er werd een Arcade Data-bron gemaakt van een bestaande tabel die al was georganiseerd in lange vorm, met meerdere ontladings-duur records voor elke reach. Een Map-actie (Record selectie verandert 192 Filter data records) verbond de reach-identificatie in de feature-laag met dezelfde identificatie in de Arcade Data-bron. Het selecteren van één reach filterde de Tabel naar alle overeenkomende records, niet slechts één record. Dit bevestigt dat een virtuele Arcade Data-bron kan deelnemen aan een 1:N filterworkflow.
Figuur 2. Test 1: het selecteren van reach Arno_3629 filtert de 1:N Arcade Data-tabel naar meerdere ontladings-duur records voor dezelfde reach.
Test 2 - Virtuele wide-to-long transformatie. De brontabel werd in plaats daarvan gelezen in zijn oorspronkelijke brede structuur, waarbij ontladingswaarden voor verschillende duur worden opgeslagen in afzonderlijke velden. Arcade transformeerde dynamisch elk bronrecord in meerdere virtuele records met Reach ID, Ontlading, Duur-label en numerieke Duur. De resulterende virtuele 1:N FeatureSet werd vervolgens verbonden met dezelfde kaartselectiefilter. Het selecteren van dezelfde reach gaf de verwachte meerdere records terug en de ontladingswaarden kwamen overeen met de overeenkomstige fysieke lange-vorm tabel, afgezien van afronding bij weergave.
Figuur 3. Test 2: Arcade maakt een virtuele 1:N tabel van een brede brontabel en het resultaat wordt succesvol gefilterd door de geselecteerde reach.
Deze tests breiden de oorspronkelijke 1:1 validatie uit. In de geteste ArcGIS Online Experience Builder-omgeving kon Arcade Data zowel een bestaande 1:N structuur blootleggen als dynamisch een afgeleide 1:N structuur creëren zonder de bronservice te wijzigen.
Voor grotere datasets moet het resulterende aantal virtuele records daarom samen met de hierboven genoemde limiet voor feature-collecties worden beschouwd.
9. Aanvullende validatie: gedrag voorbij de gedocumenteerde limiet van 50.000 features
De Esri-documentatie vermeldt dat wanneer een Arcade Data-resultaat wordt gebruikt om een feature-collectie te construeren, de FeatureSet die wordt gebruikt om die collectie te construeren maximaal 50.000 features kan bevatten. Omdat de voorbeelden in dit bericht een nieuwe FeatureSet construeren met FeatureSet(Text(output)), werd een aanvullende test uitgevoerd om te observeren wat er gebeurt wanneer die gedocumenteerde drempel wordt overschreden in de huidige ArcGIS Online Experience Builder-omgeving.
Er werd een synthetische Arcade Data-bron gemaakt met twee velden (OBJECTID en TEST_VALUE) en zonder geometrie. De expressie genereerde opeenvolgende records in het geheugen en retourneerde ze met FeatureSet(Text(output)). Tests bij 49.999 en 50.000 records werden normaal uitgevoerd. De expressie werd vervolgens getest bij 50.001 records.
Bij 50.001 records evalueerde de Arcade-editor de expressie nog steeds succesvol. Nadat de gegevensbron was toegevoegd aan Experience Builder, rapporteerde de standaard Table-widget een totaal van 50.001 records. Een Table-filter met OBJECTID = 50001 retourneerde het verwachte record, wat bevestigt dat het record voorbij de gedocumenteerde drempel van 50.000 niet alleen was opgenomen in het weergegeven aantal maar direct bevraagd kon worden.
De test werd vervolgens herhaald met 100.000 gegenereerde records. De Table-widget accepteerde de gegevensbron, en een filter met OBJECTID = 100000 retourneerde het verwachte record en TEST_VALUE = 100000. In deze geteste omgeving bleef de virtuele FeatureSet dus bruikbaar tot ten minste 100.000 records.
Deze observatie mag niet worden geïnterpreteerd als het negeren van Esri's gedocumenteerde limiet van 50.000 features of als een ondersteunde garantie voor productieapplicaties. Het documenteert alleen het gedrag dat is waargenomen in ArcGIS Online Experience Builder in augustus 2026. Het effectieve gedrag kan afhangen van implementatiedetails en kan veranderen met toekomstige ArcGIS Online-updates of verschillen in ArcGIS Enterprise. Applicaties moeten blijven worden ontworpen met de gedocumenteerde limiet in gedachten tenzij Esri de specificatie verduidelijkt of bijwerkt.
Praktische implicatie voor wide-to-long transformaties. Een transformatie kan het aantal virtuele records dat uit elk bronrecord wordt geproduceerd vermenigvuldigen. De bovenstaande tests tonen aan dat het overschrijden van 50.000 niet onmiddellijk faalde in de geteste omgeving, maar dit waargenomen gedrag mag niet worden gebruikt als reden om onbeperkte client-side transformaties te ontwerpen. Prestaties, geheugengebruik, browserbronnen en toekomstige compatibiliteit moeten ook worden overwogen.
Figuur 4. Experimentele validatie voorbij de gedocumenteerde drempel van 50.000 features. Een virtuele Arcade FeatureSet met 100.000 gegenereerde records wordt gebruikt door de Experience Builder Table-widget. Filteren op OBJECTID = 100000 retourneert succesvol het overeenkomstige record, wat bevestigt dat het record direct bevraagd kan worden in de geteste ArcGIS Online-omgeving (augustus 2026).
Het resultaat getoond in Figuur 4 is een waargenomen experimenteel gedrag en mag niet worden geïnterpreteerd als het vervangen van Esri's gedocumenteerde limiet van 50.000 features.
10. Waarom deze techniek nuttig kan zijn buiten formattering
- Combineer geselecteerde attributen uit meerdere tabellen met behulp van een gemeenschappelijke sleutel.
- Bereken velden zonder de bronservice te wijzigen.
- Vervang sentinelwaarden zoals -99999 door ND.
- Aggregeer of vat records samen uit 1:N-relaties.
- Maak afgeleide samenvattingstabellen.
- Behoud een relatie-sleutel zodat het resultaat reageert op kaartselecties.
- Verken afgeleide FeatureSets die geometrie bevatten voor andere workflows.
In die zin kan Arcade Data fungeren als een lichte virtuele transformatielaag tussen bronservices en Experience Builder-widgets.
Conclusie
Brongegevens 192 Arcade Data 192 Virtuele FeatureSet 192 Berekende HTML-velden 192 Experience Builder Table 192 Voorwaardelijke visuele opmaak
De brontabel blijft onaangeroerd. De Unicode- en <span>-gebaseerde benaderingen zijn de meer conservatieve opties. De block-background-techniek is visueel krachtig maar moet expliciet als experimenteel worden geïdentificeerd.
Dankbetuigingen en transparantie
Deze workflow is ontwikkeld via een iteratieve reeks experimenten waarbij ChatGPT (OpenAI) als technische assistent werd gebruikt.
ChatGPT hielp mogelijke benaderingen te verkennen en genereerde en verfijnde de Arcade-code, terwijl elk gedrag beschreven in dit bericht direct werd getest in ArcGIS Online Experience Builder.
De experimentele validatie was belangrijk: sommige initiële aannames - waaronder dat HTML-opmaak niet zou worden weergegeven door de Table-widget - bleken onjuist toen getest in de daadwerkelijke widget. Die observaties leidden tot daaropvolgende tests met gekleurde numerieke waarden en het achtergrondkleurblok.
Testomgeving: ArcGIS Online Experience Builder, augustus 2026.
Documentatiereferenties
022 Esri, ArcGIS Experience Builder-documentatie, 2Select data22 Voeg data toe met Arcade; vereisten voor FeatureSet-return en de gedocumenteerde limiet van 50.000 features voor feature-collecties.2 Sectie 9 rapporteert apart over hogere aantallen die experimenteel zijn waargenomen in de geteste omgeving.
022 Esri, ArcGIS Experience Builder-documentatie, 2Advanced formatting22 Dynamische inhoud en styling op basis van Arcade in ondersteunde widget-contexten.2