# Call System functions within custom module?

**URL:** <https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227>\
**Category:** Module Development\
**Created:** [May 3, 2023, 10:21pm UTC](https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227 "2023-05-03T22:21:54Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![j.israelsen](https://avatars.discourse-cdn.com/v4/letter/j/ad7895/32.png) [@j.israelsen](https://forum.inductiveautomation.com/u/j.israelsen)\
**Post date:** [May 3, 2023, 10:21pm UTC](https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227/1 "2023-05-03T22:21:54Z")

</div>

First, is there a way to utilize system functions in a 3rd party module? For example:

- system.util.getEdition
- system.util.getSystemFlags
- system.alarm.queryStatus

Second, is there a method to check for trial mode?

---

<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:** [May 3, 2023, 10:29pm UTC](https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227/2 "2023-05-03T22:29:50Z")

</div>

Assuming you're in the scope of a Vision client, because that's where these functions will work from, you need to pivot from an instance of `FPMIApp` to [`getSystemUtil()`](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/factorypmi/application/FPMIApp.html#getSystemUtil()) and then you can call the various methods on [`ClientSystemUtilities`](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/factorypmi/application/script/builtin/ClientSystemUtilities.html).

If you're in some other scope, querying the license to determine the _Vision edition_ would be possible. If you wanted the _platform_ edition (Edge, Maker, Standard) you want [`PlatformEdition.get()`](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/ignition/common/model/PlatformEdition.html#get()) .

Depending on what you want from the system flags, you may also just be able to interrogate [`FPMISystem.getMode()`](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/factorypmi/application/FPMISystem.html#getMode()).

How you query for alarm status is going to depend entirely on what scope you're trying to invoke from.

You _probably_ don't want to care about trial mode by querying the system for it. Instead, rely on your module's scope hook having it's `notifyActivationStateChanged(LicenseState)` method called by the platform.

---

<div class="post-metadata">

**Author:** ![j.israelsen](https://avatars.discourse-cdn.com/v4/letter/j/ad7895/32.png) [@j.israelsen](https://forum.inductiveautomation.com/u/j.israelsen)\
**Post date:** [May 4, 2023, 1:47pm UTC](https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227/3 "2023-05-04T13:47:54Z")

</div>

@paul-griffith, this is very helpful. Thank you for the direction.

Following up with the querying alarm status (system.alarm.queryStatus):  
If my scope were to be from the Gateway, how would we go about calling that method?

---

<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:** [May 4, 2023, 4:29pm UTC](https://forum.inductiveautomation.com/t/call-system-functions-within-custom-module/73227/4 "2023-05-04T16:29:27Z")

</div>

1. Construct an AlarmFilter: [AlarmFilterBuilder](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/ignition/common/alarming/AlarmFilterBuilder.html)
2. Get the alarm manager from the GatewayContext you get during your hook's setup method: [GatewayContext](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/ignition/gateway/model/GatewayContext.html#getAlarmManager())
3. Query status by passing your AlarmFilter to the AlarmManager: [AlarmManager](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.27/com/inductiveautomation/ignition/gateway/alarming/AlarmManager.html#queryStatus(com.inductiveautomation.ignition.common.alarming.AlarmFilter))
