# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** perspective, scripting, ignition83, vision, ignition81\
**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:** 20\
**Page:** 15

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [April 27, 2025, 11:57pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/282 "2025-04-27T23:57:57Z")

</div>

i assume there’s a perhaps over-optimistic check to prevent use of tags() in an iteration function (because attempting that gives the same results)

---

<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:** [April 28, 2025, 12:57am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/283 "2025-04-28T00:57:12Z")

</div>

> [@hunterdg](#):
>
> over-optimistic check to prevent use

Not a check, but simply not possible. `tags()` needs access to the context, and that has to be stripped for iteration.

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [April 28, 2025, 1:27am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/284 "2025-04-28T01:27:03Z")

</div>

should/does this implicitly apply to the `transformExpr` arg of `transform()`? (not technically “iteration”)

---

<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:** [April 28, 2025, 11:18am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/285 "2025-04-28T11:18:03Z")

</div>

> [@hunterdg](#):
>
> implicitly apply to the `transformExpr` arg

No, it doesn't.

---

<div class="post-metadata">

**Author:** ![hunterdg](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/hunterdg/32/67774_2.png) [@hunterdg](https://forum.inductiveautomation.com/u/hunterdg)\
**Post date:** [April 29, 2025, 3:16am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/286 "2025-04-29T03:16:03Z")

</div>

should this return null? (the equivalent nested transform binding doesn’t)

```javascript
transform(
	'',
	forEach( // <<< this breaks tags()
		asList(''),
		tags(asList(value()))[0][1]
	)
)

```

this works fine

```javascript
transform(
	'',
//	forEach(
// asList(''),
		tags(asList(value()))[0][1]
//	)
)

```

as does this:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/f/4f2c96ab436ea18bca021686a5560c8eb2437f97.png)

---

<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:** [April 29, 2025, 11:15am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/287 "2025-04-29T11:15:33Z")

</div>

> [@hunterdg](#):
>
> should this return null?

Yes, you have `tag()` in an iterator expression. No can do, as mentioned above.

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [May 22, 2025, 12:49am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/288 "2025-05-22T00:49:02Z")

</div>

Hey @pturmel, would you consider adding an expression function to this module to return a UUID string?

---

<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:** [May 22, 2025, 1:05pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/289 "2025-05-22T13:05:42Z")

</div>

Hmm. That's a good idea. I've put it on my to-do list.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [May 22, 2025, 1:18pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/290 "2025-05-22T13:18:34Z")

</div>

I added one to @paul-griffith’s `ignition-extensions` a while ago, but it hasn’t been published since it was added 😉

> <https://github.com/IgnitionModuleDevelopmentCommunity/ignition-extensions/blob/5aba12e3f5b891a4feca3fb311aa5840f40d76b9/common/src/main/kotlin/org/imdc/extensions/common/expressions/UUID4Function.kt>

---

<div class="post-metadata">

**Author:** ![Brian\_Seater](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/brian_seater/32/82110_2.png) [@Brian\_Seater](https://forum.inductiveautomation.com/u/Brian_Seater)\
**Post date:** [May 22, 2025, 2:06pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/291 "2025-05-22T14:06:21Z")

</div>

> [@pturmel](#):
>
> The **Bulk Script** action can replace most uses of the `queueUtil.py` script I introduced in this topic:

This is awesome Phil, thanks! I had setting up a long lived queue on my to do list, I'm glad I procrastinated!

One feature request if it's not too much to ask - additional parameters similar to the `initialChange` and `previousValue` on a normal tag change script. The thing I'm fighting now is a gateway restart or OPC connection restored being processed as a value change. Being able to filter out entries that are initialChange or have a Not-Good previous value would be great.

---

<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:** [May 22, 2025, 2:20pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/292 "2025-05-22T14:20:10Z")

</div>

> [@Brian\_Seater](#):
>
> not too much to ask

It is too much to ask. Those don't exist in the tag actor pipeline. If you need this, your bulk script must maintain a cache of tag paths & values it is told to handle, and treat cache misses as the "initial change" indicator.

---

<div class="post-metadata">

**Author:** ![Brian\_Seater](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/brian_seater/32/82110_2.png) [@Brian\_Seater](https://forum.inductiveautomation.com/u/Brian_Seater)\
**Post date:** [May 22, 2025, 2:42pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/293 "2025-05-22T14:42:48Z")

</div>

I figured it might be something that's a ton of work. I'll work out a way to track things myself.

Thanks Phil!

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [June 5, 2025, 6:20pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/294 "2025-06-05T18:20:32Z")

</div>

Hey Phil,

Have you considered adding a `slice()` expression that would allow for slicing a list similar to the python slicing operations?

I ask, because I think that:

`slice({path.to.list},startIndex,endIndex)`

would perhaps be a bit cleaner than:

`where( {path.to.list}, idx() >= startIndex, idx() < endIndex)`

---

<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:** [June 5, 2025, 6:23pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/295 "2025-06-05T18:23:42Z")

</div>

I don't know. One function call versus one function call. 🤷‍♂️  
Not going to be a high priority. I'm hoping Paul includes it in the `[]` operator....

---

<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:** [June 5, 2025, 6:34pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/296 "2025-06-05T18:34:55Z")

</div>

Slicing might be an issue with our parser, but I'm not against it in principle. No time soon.

---

<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:** [July 3, 2025, 11:39pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/297 "2025-07-03T23:39:51Z")

</div>

> [@pturmel](#):
>
> I _did_ make an ICC presentation pitch for Tag Actors

This went public today:

> **[ICC 2025 Speakers](https://icc.inductiveautomation.com/speakers)**
>
> Join Us for ICC® 2025 on September 16–18, 2025 in Sacramento, CA

🔥

Wednesday before lunch. 😁

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [July 17, 2025, 11:25pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/298 "2025-07-17T23:25:25Z")

</div>

The line in purple on Wednesday before lunch to Phil's stadium:

 ![Screenshot_20250718_085348_Maps](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/6/0621afe8ba6ed90df7dd2f2fb66556a5672ce5a6.jpeg)

---

<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:** [July 17, 2025, 11:44pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/299 "2025-07-17T23:44:08Z")

</div>

> [@nminchin](#):
>
> stadium

Ha! That might produce a heck of a horde of glazed-eyed zombies after this _ **advanced topic** _....

---

<div class="post-metadata">

**Author:** ![Samuel\_Sueur](https://avatars.discourse-cdn.com/v4/letter/s/e36b37/32.png) [@Samuel\_Sueur](https://forum.inductiveautomation.com/u/Samuel_Sueur)\
**Post date:** [August 13, 2025, 4:00pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/300 "2025-08-13T16:00:36Z")

</div>

Hi Phil,

Regarding your tag actor features, I have two questions :

- Is it possible to bind the value of the Item Path? We would like to use this in a UDT for instance but not being able to perform binding on this is a bit of a problem as we would have to specify the address manually everytime.

- Is it possible to target a tag created within Ignition when using the Republish Action rather than having to specify the device and the address of the tag within the device?

We did try to fiddle with it but it seems those two features are not available (or we just completely misunderstood everything).

To give a bit more context, we need to republish the value of a tag to another device’s tag. Unfortunately we have quite a big amount of republishing to do, and leveraging the possibilities of the UDTs would help us tremendously (parameters, InstanceName, etc).

Also being able to target a tag created in Ignition rather than directly targeting a tag in a device would add a layer of abstraction that could be great in a number of instances (let’s say you’re using Modbus and for some reason the company programming the PLC decides to offset all the addresses). We would only change the addresses of the tags in Ignition without having to change the address of the republishToItem. Or it could also be useful to forward the value to another tag provider for instance.

Apologies, perhaps those examples make no sense to you as this is something you would maybe never do, but it never hurts to ask!

Thanks in advance and as always thanks for your amazing work!

---

<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 13, 2025, 5:47pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/301 "2025-08-13T17:47:47Z")

</div>

Binding in UDTs should work just like it does for OPC Item Path... Use only UDT parameters and built-in parameters.

You cannot target a tag with the Republish Actor. I have no plans to add that. (I'd be concerned with checking circular definition corner cases... sounds too dangerous for me.)

Your examples sound useful, but it won't be me. Perhaps you should attend my ICC presentation where I will be showing how these work. 😁

[Previous page](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934.md?page=14)

[Next page](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934.md?page=16)
