# "IsLoading" indicator

**URL:** <https://forum.inductiveautomation.com/t/isloading-indicator/32313>\
**Category:** Ignition Early Access\
**Created:** [February 16, 2020, 6:06pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313 "2020-02-16T18:06:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![smiano](https://avatars.discourse-cdn.com/v4/letter/s/b2d939/32.png) [@smiano](https://forum.inductiveautomation.com/u/smiano)\
**Post date:** [February 16, 2020, 6:06pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/1 "2020-02-16T18:06:00Z")

</div>

For a Perspective page- I want to put up a watermarked indicator over the entire window or just some components when a SQL query/data processing script is currently running, so that the user knows the data is still loading.

I vaguely recall an “IsLoading” property on some Vision components. Is there a similar mechanism in Perspective? If not, has anyone achieved this by alternative means?

Thanks

---

<div class="post-metadata">

**Author:** ![sydney.bergeron](https://avatars.discourse-cdn.com/v4/letter/s/779978/32.png) [@sydney.bergeron](https://forum.inductiveautomation.com/u/sydney.bergeron)\
**Post date:** [October 30, 2020, 1:10pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/2 "2020-10-30T13:10:50Z")

</div>

Any update on this? I would also like to know if there is any kind of “isLoading” property for tables and graphs with lots of data. There can be a significant lag with no user feedback while they wait.

---

<div class="post-metadata">

**Author:** ![smiano](https://avatars.discourse-cdn.com/v4/letter/s/b2d939/32.png) [@smiano](https://forum.inductiveautomation.com/u/smiano)\
**Post date:** [November 5, 2020, 7:44pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/3 "2020-11-05T19:44:10Z")

</div>

bump

---

<div class="post-metadata">

**Author:** ![smiano](https://avatars.discourse-cdn.com/v4/letter/s/b2d939/32.png) [@smiano](https://forum.inductiveautomation.com/u/smiano)\
**Post date:** [January 29, 2021, 8:25pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/4 "2021-01-29T20:25:25Z")

</div>

Can someone from Inductive Automation weigh in on this?  
I imagine this exists as a feature…

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 29, 2021, 8:27pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/5 "2021-01-29T20:27:12Z")

</div>

This gets discussed somewhat frequently here but it’s a much more difficult problem to solve than it sounds like.

---

<div class="post-metadata">

**Author:** ![Carl.Gould](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/carl.gould/32/7262_2.png) [@Carl.Gould](https://forum.inductiveautomation.com/u/Carl.Gould)\
**Post date:** [January 29, 2021, 8:38pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/6 "2021-01-29T20:38:37Z")

</div>

There are really two things that might come into play here:

**1. Loading indicator for bindings.**  
Bindings produce values in an async way. Imagine you have a polling-off query binding. The view will start up, your property value will initially be whatever default it was set to in the designer or simply missing if set to non-persistent as the query executes. The query may take some significant amount of time to produce a result. During this time, the view and component are loaded and visible, but the binding is “loading”, and this is useful information that you might want to act upon. This is something we will be adding, and it is easy for us to do. It will be in the form of a new property on component meta like `meta.loading` which will be a count of bindings that are currently loading. You could use this to come up with some sort of “please be patient” UI of your own.

**2. Loading UI indication for the loading of views, including embedded sub-views.**  
Imagine you navigate to a page configuration, and that it has some embedded sub-views. Then, those sub-views have more sub-views embedded in them, and on down the line. There could easily be hundreds of sub-views that get loaded in the process of loading that page configuration. Currently, each individual view gets its own, independent loading UI. This can look busy / messy for highly complex nested view configurations as all the views pop into place. It also causes some browser layout thrash along the way as the layout needs to be recomputed often as views load and learn of their true size. To make matters even more complicated, some embedded view configurations like view repeaters typically only know what sub-views will be in them when their bindings (which are async, remember) provide their data.

We’re working on some solutions to improve the look of this sort of loading scenario so that the whole page has a more pleasant / less thrash-ey “page is loading” look. This one is proving tricky to solve, however, because of the async/unknown nature of exactly how many views are going to be loaded before a page is considered “finished” loading.

We’re also working to simple improve the time it takes to load views, and we have made significant progress on this front steadily since 8.0.13, but there is still room to improve.

---

<div class="post-metadata">

**Author:** ![smiano](https://avatars.discourse-cdn.com/v4/letter/s/b2d939/32.png) [@smiano](https://forum.inductiveautomation.com/u/smiano)\
**Post date:** [January 30, 2021, 7:04pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/7 "2021-01-30T19:04:56Z")

</div>

Thanks Carl,

So I should be expecting to see a new component property called “meta.Loading” in a future release, but not a general view-level property for loading, correct?

---

<div class="post-metadata">

**Author:** ![rbachman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rbachman/32/43718_2.png) [@rbachman](https://forum.inductiveautomation.com/u/rbachman)\
**Post date:** [June 22, 2021, 5:44pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/8 "2021-06-22T17:44:59Z")

</div>

Is the `meta.loading` feature available yet? If so, in what version?

I could really use this; I have a very large query that returns JSON to a table. I use a “Searching…” popup when the query is actually running, but I have to close the popup before the data is actually returned to the table. The query will finish running, close the popup, and then the table is empty for several seconds after the “Searching…” popup closes.

---

<div class="post-metadata">

**Author:** ![ryanjmclaughlin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryanjmclaughlin/32/4318_2.png) [@ryanjmclaughlin](https://forum.inductiveautomation.com/u/ryanjmclaughlin)\
**Post date:** [June 23, 2021, 12:31am UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/9 "2021-06-23T00:31:14Z")

</div>

We use a binding and a transform script on the data prop. We call the “loading” indicator at the start of the transform, and the last thing before returning the data is to close the loading. Its seamless and there is no gap between the table populating and the loading indicator closing.

Obviously, the meta.loading will be better in the long run, but you should be able to simulate similar behavior now.

---

<div class="post-metadata">

**Author:** ![rbachman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rbachman/32/43718_2.png) [@rbachman](https://forum.inductiveautomation.com/u/rbachman)\
**Post date:** [June 23, 2021, 4:57pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/10 "2021-06-23T16:57:31Z")

</div>

Thanks @ryanjmclaughlin. We are basically doing the same thing, but our issue is that the dataset is so large that there is a significant delay _ **after** _ returning the data in the transform statement. We have the “loading” animation when the query is actually running, but there are still several seconds between when the “loading” animation closes and when the table on the view actually displays the records.

For now, I have fixed this by only showing the first 500 records on the table as a “Preview” of the dataset. The main goal for this particular view is to export the data to Excel. I don’t have the problem with the loading animation when producing the Excel file because I can call the `system.dataset.toExcel` function before I close the loading animation. In fact, after we retrieve the data from the query, I update my “loading” animation with the number of records found while Ignition continues to generate the Excel file in the background.

![2021-06-23 11_55_00-Home - Perspective - Brave](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/1/f1e71822fe8cb42657df591d32afd9653952a7a6.png)

---

<div class="post-metadata">

**Author:** ![swolnisty](https://avatars.discourse-cdn.com/v4/letter/s/7bcc69/32.png) [@swolnisty](https://forum.inductiveautomation.com/u/swolnisty)\
**Post date:** [June 23, 2021, 5:00pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/11 "2021-06-23T17:00:56Z")

</div>

I do pretty much exactly what @ryanjmclaughlin stated, but depending on what version of Ignition you’re running, the table may have an emptyMessage property. I don’t know the exact version this property was added, but I’m running 8.1.4 and it’s present on the table component. I just write "loading . . . " to the table’s props.emptyMessage.noData.text. It has the added benefit of letting you check the length of your list of json objects being written to the data property after your script has run and if it’s 0 you can write a nice no data message back to that same property so users aren’t left guessing whether the data has finished loading or not.

---

<div class="post-metadata">

**Author:** ![rbachman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rbachman/32/43718_2.png) [@rbachman](https://forum.inductiveautomation.com/u/rbachman)\
**Post date:** [June 23, 2021, 5:08pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/12 "2021-06-23T17:08:37Z")

</div>

That’s a great idea. Thanks for sharing!

---

<div class="post-metadata">

**Author:** ![dmachuca](https://avatars.discourse-cdn.com/v4/letter/d/a8b319/32.png) [@dmachuca](https://forum.inductiveautomation.com/u/dmachuca)\
**Post date:** [June 23, 2021, 5:21pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/13 "2021-06-23T17:21:21Z")

</div>

Thank you for sharing 🙂

---

<div class="post-metadata">

**Author:** ![ryanjmclaughlin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryanjmclaughlin/32/4318_2.png) [@ryanjmclaughlin](https://forum.inductiveautomation.com/u/ryanjmclaughlin)\
**Post date:** [January 24, 2022, 5:15pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/14 "2022-01-24T17:15:00Z")

</div>

Did the `meta.loading` ever gain traction as a feature?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [January 24, 2022, 5:19pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/15 "2022-01-24T17:19:57Z")

</div>

It’s marked as ‘incubating’ in our backlog, meaning we want to do it, but either we’re not sure how to do it, or we’re not sure in which way to do it, or we’re waiting on a major version to do it.

In this case it looks like ‘we’re not sure in which way to do it’.

---

<div class="post-metadata">

**Author:** ![Stephen\_Clark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/stephen_clark/32/43319_2.png) [@Stephen\_Clark](https://forum.inductiveautomation.com/u/Stephen_Clark)\
**Post date:** [January 31, 2023, 9:19pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/16 "2023-01-31T21:19:21Z")

</div>

How about now?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [January 31, 2023, 10:03pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/17 "2023-01-31T22:03:02Z")

</div>

We're pretty sure we know how to do it, but no one's actually started working on it yet. Known unknowns. No idea on a timeline.

---

<div class="post-metadata">

**Author:** ![ChassisGuy](https://avatars.discourse-cdn.com/v4/letter/c/ce73a5/32.png) [@ChassisGuy](https://forum.inductiveautomation.com/u/ChassisGuy)\
**Post date:** [January 4, 2024, 4:51pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/18 "2024-01-04T16:51:33Z")

</div>

Are we there yet? This would come in handy for a hefty SQL procedure I'm calling.  
Thanks!

---

<div class="post-metadata">

**Author:** ![R\_S](https://avatars.discourse-cdn.com/v4/letter/r/a88e57/32.png) [@R\_S](https://forum.inductiveautomation.com/u/R_S)\
**Post date:** [February 26, 2024, 1:36am UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/19 "2024-02-26T01:36:48Z")

</div>

Hey all,

Thought I'd share my workaround if anyone's still looking for a solution. Add a script transform after your query:

```auto
# show if no results were found
if type(value) == list and value == []:
	self.props.emptyMessage.noData.text = "No Data"
elif str(type(value)) == "<type 'com.inductiveautomation.ignition.common.BasicDataset'>" and value.getRowCount() == 0:
	self.props.emptyMessage.noData.text = "No Data"
else:
	self.props.emptyMessage.noData.text = "Loading Results..."
return value

```

This will set noData.text so that if no results are found (for either a list or dataset value result) to `"No Data"`, otherwise if results are loaded it'll set it to `"Loading Results..."` which won't display until next time the query runs with no data present in the table.  
This fixes the issue with the significant delay after returning the data, regardless of if subsequent transforms are used. You can also adapt this to update the message between long running transforms such as changing the message to "Formatting Results" or something to let your users know things are still happening.

---

<div class="post-metadata">

**Author:** ![Jose\_Hervas\_Chico](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jose_hervas_chico/32/69260_2.png) [@Jose\_Hervas\_Chico](https://forum.inductiveautomation.com/u/Jose_Hervas_Chico)\
**Post date:** [November 6, 2025, 2:35pm UTC](https://forum.inductiveautomation.com/t/isloading-indicator/32313/20 "2025-11-06T14:35:41Z")

</div>

And what about now? Is there any native way to know when the query is being executed?

thanks
