Experience Builder Tips and Tricks

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Latest Activity

(73 Posts)
JasonBOCQUET
Frequent Contributor

Hello everyone,

This post will follow on from the previous one I wrote. (https://community.esri.com/t5/experience-builder-tips-and-tricks/how-to-easily-connect-your-data-and...)

The aim is to be able to filter a first data source (transactions, for example) so that, thanks to a common identifier present in each of the tables, the other data sources (properties, offers, assignments) present in other widgets (Map, List, Table, Graph) are updated. All this without having to duplicate columns in each table concerned or select items on a map to bypass the system.

Last time, I mentioned the difficulty that ArcGIS Experience Builder had in offering dynamic rendering between several widgets with different data sources.
Indeed, if I want to filter my data according to criteria linked to transactions, and have a map rendering that shows me the buildings linked to these transactions, I must add the fields that I use to filter my transactions to my Building table.

In this way, the data I display in my application about buildings is updated according to the transactions I've filtered.
But this process isn't easy to set up and requires a lot of changes to be made to our databases that aren't normally necessary.

Since this post, there's been nothing new on the ESRI side, and no update along these lines, so I had to get my brain working at full speed to find a way of cobbling together something that would work.

So I concentrated on the way widgets currently work: it's possible to set actions on our data. For example, we can add an action when items are selected and only then can we give the order to filter the data records that have been selected. This filtering is done using action parameters, creating a link between two different data sources (one triggering, and one ‘undergoing’ the action) using a common identifier.
So let's suppose that we're filtering a ‘Transaction’ data layer according to the years in which the transactions were signed, and that I don't have a replica of the ‘Transaction year’ column in my ‘Building’ data layer. I want to see the transactions for 2021 and therefore the buildings associated with these transactions on a map.

 

If I'm doing things using a ‘Modification of record selection’ action and if you followed my first post, this means that once I've filtered my transactions, I have to make a selection on the map by hand in order to filter the buildings.
Otherwise, I need to have added the ‘Transaction Year’ column to my Building layer beforehand for the Group Filter to work, but this solution is not possible if we have an N-1 relationship between our data*.

*the Transaction-Building relationship is N-1, there are N transactions for 1 building, which means that if I add the ‘Transaction Year’ column to the Building table, I'll have to ‘clone’ each building for each transaction involving that building, otherwise I'll lose information. And clearly, cloning buildings sucks because in terms of cartographic rendering it means having N points superimposed...


With that in mind, I was left with only 2 solutions:

  • Pray that ESRI will finally develop an action parameter that is triggered not when you SELECT something, but rather when you FILTER something
  • Succeed in creating a SELECTION action, without the user having to do it himself.

 

As you can imagine, I had to focus on the second solution.

The idea was simple: what if I used the Selection tool to simulate a Selection action without the user realising?

So we're going to take a Selection Widget and choose ‘Select according to attributes’ as the source. Then click on ‘New data’. To follow my example, I'm going to choose my data source ‘Transactions’ (in my case it's a simple Table), thanks to the SQL expression generator, I'll be able to set up Filters that will be used to select the data according to attributes (I'm using several fields with the ‘AND’ condition).

Once that's done, all that's left is to set up actions when there's a Modification of record selections. This action is set up with ‘Structure’ as the target, then ‘Filter data records’ is selected and all that's left is to choose the Building source (or any other source) which has an identifier in common with the transactions (in my case we have an ID called ‘ID_LP’).

The final result is as follows:

JasonBOCQUET_0-1746607140587.png

As you can see, we ‘disguise’ this Selection widget as being a sort of Filter widget, and thanks to this, I can filter my transactions according to using fields that are not present in any other table or entity layer AND I manage to filter my other cascading data sources. Something that used to be impossible.
The other advantage is that, because we've set up our actions so that the data records are filtered, it doesn't show up, either on the map rendering or even in a Table or List Widget. There's no big highlight.


Of course, you have to bear in mind that this technique has its limits:

  • Even if there aren't any lines highlighted in blue or Highlight points in neon yellow, you're still selecting data, so if you make a selection by hand in addition, or click on an item, the widget can quickly find itself no longer knowing who the source of the selection is. For optimum use, remember to click on ‘Delete selection’ if you wish to make another type of selection, to avoid conflicts.

 

  • Let's say you want to offer a view of the contents of the Transactions table. You integrate a Table widget so that the user can see the contents of the table. Be very careful with this: if you don't set any filter actions, you will only select the transactions in the table that you have filtered (logically). But if you set up a filter action, you have to do so by setting the same source (i.e. transaction & transaction) as the action's trigger and target. Well, by doing this, you're going to bug the filters in the Selection widget, which will no longer be able to be modified without first deleting the current selection.
    Here's what I recommend to get round this little problem: if you want to display tables, maps or other widgets relating to the data source you've used in the Selection tool, duplicate this layer/table for the other widgets. By doing this, you're querying ANOTHER data source (which is actually the same one) and you can set up your filter action to filter the records without bugging the filters in the Selection tool.


I think I've come to the end of this tip, so I hope it's helped you. This solution is really in the ‘do-it-yourself’ category, but at least it has the merit of being able to resolve certain situations.
I'm still hoping that ESRI will one day come up with a solution for this, because I think it's a real shame that in such a powerful GIS tool you can't manage relationships between several data sources by simply using a common ID... something that's been done since the dawn of time in lots of other software.

 

Gone°

more
1 1 818
Laura
by MVP Regular Contributor
MVP Regular Contributor

In Experience Builder (ExB), the Dynamic Content feature within the text widget allows you to create data-driven, interactive content. While it's a powerful tool, it doesn’t yet offer the same ease and flexibility that ArcGIS Dashboards provides—especially for features like dropdown filters.

As someone who values visual impact and quick, insightful data for users, I’ve integrated indicators into many of my applications. Dashboards’ indicators are far more refined and user-friendly compared to ExB’s options. Esri has suggested that the dynamic content in ExB’s text widget could help replicate the functionality of Dashboards indicators. However, after experimenting, I realized the gap is much larger than I expected. A key limitation is the inability to easily filter Dynamic Content—for example, to only show incidents in “City A” or, in my case, monitor a specific tree species in my city.

To address this limitation, I found a simple workaround: build the indicators in Dashboards and embed them into Experience Builder. Below, I’ll share my process using a real-world example from my city’s Tree Viewer.

Our city is actively addressing challenges with Ash trees and wanted an easy way to track the number of Ash trees left in our inventory. My dataset has a field for species, containing hundreds of different tree types. When I tried to create an indicator in ExB to filter for Ash trees, I realized I couldn’t do it directly. Here's how I worked around this limitation.


Step 1: Create Your Indicator in Dashboards

  1. Open ArcGIS Dashboards and create a new indicator.
  2. Add a filter to isolate the data you want to track. In my case, I filtered for planted trees and every type of Ash tree in our inventory.
  3. Configure the indicator to show the count of Ash trees only.
    • Customize the appearance to highlight the key number in an impactful way.

The result? A perfect indicator showing just the data I needed. This was something I couldn’t achieve natively in ExB!

Here’s what my Dashboards indicator looked like:

Laura_4-1732050217838.png

 


Step 2: Embed Your Dashboards Indicator into Experience Builder

  1. Open your existing Experience Builder project (or create a new one).
  2. Add an Embed Widget to your layout.
  3. Use the URL option in the widget settings and paste the URL of the Dashboard containing your indicator.

Laura_5-1732050240549.png

 


Step 3: Check Sharing Settings

Before you publish your app, ensure your Dashboard’s sharing level matches the intended audience of your ExB app. For example:

  • If your ExB app is public, make sure the Dashboard is shared publicly.
  • If it’s for internal use, ensure both the app and the Dashboard are shared within your organization.

The Result

Now, my Ash tree indicator seamlessly appears in my Tree Viewer application! Users can see the current count of Ash trees at a glance, with the refined design and filtering functionality of Dashboards embedded directly into Experience Builder.

Laura_6-1732050325673.png

 

 

 

more
3 7 3,125
DavidDas__GISP
Frequent Contributor


This series of videos presented by GISman Lee will show how to develop a customised hierarchy-layer widgets in new ArcGIS Experience Builder with React.js, ArcGIS Javascript API & Reactstrap, as well as how to deploy Customised ArcGIS Experience Builder App on ArcGIS Enterprise.

Let's start moving from the old ArcGIS Webapp Builder to the new esri product. Initially 3 parts in total, maybe more in future.


https://www.youtube.com/watch?v=A-D0wAD1jUA

 

 

more
3 0 609
DavidDas__GISP
Frequent Contributor


This YouTube video tutorial by GISman Lee presents an easy way to implement the communication among multiple customized widgets in ArcGIS Experience Builder.

With this method, you don't have to follow the complex ways of doing so as written in the Esri ArcGIS Experience Builder official website.

The method here is to combine the in-built Redux of ArcGIS Experience Builder with the ReactJS Life Cycle Functions, to establish a "pulling" style of message transactions.


https://www.youtube.com/watch?v=gQAqoasLkgY

 

 

more
4 2 970
DavidDas__GISP
Frequent Contributor

 

Here is a comprehensive tutorial for absolute beginners on ArcGIS Experience Builder Developer Edition 1.12.


https://daviddas2.github.io/exb/


This app is mobile friendly. It collapses gracefully to fit a Tablet or Smartphone in portrait and landscape mode.

No programming is necessary. The two custom widgets for Google Earth and Pictometry come preconfigured.

The first 3 parts of this Tutorial can be done using the ArcGIS Online Edition of the Experience Builder.

 

more
7 0 2,166
211 Subscribers
Labels