# Filtering on Alarm status tables

**URL:** <https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326>\
**Category:** Ignition\
**Tags:** vision, ignition81\
**Created:** [March 4, 2026, 10:47pm UTC](https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326 "2026-03-04T22:47:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![tgish](https://avatars.discourse-cdn.com/v4/letter/t/34f0e0/32.png) [@tgish](https://forum.inductiveautomation.com/u/tgish)\
**Post date:** [March 4, 2026, 10:47pm UTC](https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326/1 "2026-03-04T22:47:01Z")

</div>

Hello,

I suspect the answer is that what I need isn’t possible based on my forum searches, but I’m trying to avoid making duplicate tags.

I have three gateways. All talking on gateway network and each has the other two set up as remote tag providers so that some data can be displayed on the other projects as there are some processes that crossover and information is needed by different operators.

I’m struggling with alarming though. On gateway A project I have an alarm status table filtered to its own Provider. But I want a few alarms from a gateway B to also appear. It looks like I can have both providers listed, but I don’t want all of them. And I can’t filter by display path to get the remote tags because that will get rid of the local alarms. I need some more sophisticated filter: “Provider = A OR (Provider = B and displayPath = “XXX”)”  
Am I stuck creating the tags I need on gateway A just to get them to show on the alarm table?

---

<div class="post-metadata">

**Author:** ![ryan.white](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan.white/32/73193_2.png) [@ryan.white](https://forum.inductiveautomation.com/u/ryan.white)\
**Post date:** [March 4, 2026, 11:08pm UTC](https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326/2 "2026-03-04T23:08:48Z")

</div>

Looking at the structure of the [`pyAlarmEvent`](https://www.docs.inductiveautomation.com/docs/8.1/appendix/reference-pages/scripting-object-reference#pyalarmevent) object provided to the table's `filterAlarm` method, I see there is a `sourcePath` which is a qualified path object. Based on the [Source Path filtering](https://www.docs.inductiveautomation.com/docs/8.1/appendix/components/vision-components/alarming/alarm-status-table#source-path-filtering) example in the docs, that qualified path should have the provider included in it.

Write a custom method in your library for filtering the alarm table and call it from the table's [`filterAlarm`](https://www.docs.inductiveautomation.com/docs/8.1/appendix/components/vision-components/alarming/alarm-status-table/alarm-status-table-scripting#filteralarm) method. In that project library method, inspect the `sourcePath` and `displayPath` as per your expected logic to filter accordingly.

> **[How to Filter by Associated Data on the Vision Alarm Status Table | Ignition...](https://www.docs.inductiveautomation.com/docs/8.1/appendix/components/vision-components/alarming/alarm-status-table/how-to-filter-by-associated-data)**
>
> Filtering on Associated Data

Something like

```python
def myCustomAlarmTableFilter(self, alarmEvent):
    """ """
	provider = alarmEvent.source.firstPathComponent
	displayPath = alarmEvent.displayPath
	if provider == "SOURCE A":
		return True
	
	if provider == "SOURCE B" and "x/y/z" in displayPath:
		return True
	
	return false

```

---

<div class="post-metadata">

**Author:** ![tgish](https://avatars.discourse-cdn.com/v4/letter/t/34f0e0/32.png) [@tgish](https://forum.inductiveautomation.com/u/tgish)\
**Post date:** [March 5, 2026, 12:18am UTC](https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326/3 "2026-03-05T00:18:32Z")

</div>

Thanks! I am so close to making it work. At first I was using alarmEvent.get(‘source’), but that seemed to return something that maybe wasn’t actually a string. but your “firstPathComponent': clue got that working. I had the same problem with .displayPath, but I got that one working by converting it to a string.

Is there a reason you recommend putting the method in a project library and not just putting these few lines on the table’s filterAlarm method directly?

---

<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:** [March 5, 2026, 12:50am UTC](https://forum.inductiveautomation.com/t/filtering-on-alarm-status-tables/114326/4 "2026-03-05T00:50:21Z")

</div>

> [@tgish](#):
>
> something that maybe wasn’t actually a string

It's going to be a [`QualifiedPath`](https://sdk.inductiveautomation.com/javadoc/ignition81/8.1.52/com/inductiveautomation/ignition/common/QualifiedPath.html) object, which you _can_ just turn into a string, or you can use some of the richer methods available on it.

> [@tgish](#):
>
> Is there a reason you recommend putting the method in a project library and not just putting these few lines on the table’s filterAlarm method directly?

It's not a big deal in this case, but if you ever want to re-use your filtering logic in another place, it's a lot easier if it's in the project library. If you go all the way down the rabbit hole, there's also ways to edit project library scripts in external editors and some other niceties. In general power users on the forum will advise you to put all non-trivial logic into the project library.
