# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** ignition83, scripting, ignition81, perspective, vision\
**Created:** [June 13, 2023, 12:42am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934 "2023-06-13T00:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 63

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 16, 2023, 9:27pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/63 "2023-08-16T21:27:35Z")

</div>

_Annnnnnd..._ another new feature: the `tags()` expression function. Note the plural. It takes a list of tag paths, or a dataset with tag paths in the first column.

It defaults to operating in subscription mode, without an initial read, so the first execution will always yield nulls. Quickly replaced with proper values as the subscriptions report in. If the list changes between executions, only the changed tag paths will report a null at that point.

It can be set to **not** use subscriptions, in which case it is basically performing a `readBlocking()`.

For Ignition v8.1+: ~~v2.0.12.232282039~~

Documentation of the new `tags()` function is here:

[https://www.automation-pros.com/toolkit/doc/utility.html#tags](https://www.automation-pros.com/toolkit/doc/utility.html#tags)

---

_[View the full topic](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934)._
