# Automation Professionals' Integration Toolkit Module

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

<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:** [October 31, 2024, 1:41pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/181 "2024-10-31T13:41:40Z")

</div>

Phil, thanks for all the work you put into this module! I don't know how many times I've thought I will have to write a new utility function only to find that you already have!

One request on the documentation, can you add something indicating which version a function was added in? I keep finding myself a few versions behind and wondering why something isn't working only to discover I need to update.  
Thanks again!

---

<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:** [October 31, 2024, 4:44pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/182 "2024-10-31T16:44:20Z")

</div>

> [@Brian\_Seater](#):
>
> which version a function was added in?

Yeah, but maybe only going forward. (The version the docs correspond to is shown on the main page.)

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [November 20, 2024, 2:03pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/183 "2024-11-20T14:03:42Z")

</div>

~~OK I've got something I'm trying to do, and for the life of me, I can't get it to work even in the simplest form. Note... this is in Vision~~

 

I have an indirect binding on the template that will bring an integer from a tag based on a tag path passed. I'm trying to generate a list of tags that would be related according to the indirect number.

However, it seems that when the number is being provided to the template via indirect binding, things don't work as expected. If I remove the binding and just give it a static number then the dataset is created.

This is the expression that I'm using:

> **Expression**
>
> ```python
> unionAll(
> asMap('baseTag','str','index','i'),
> forEach(
> {New Template.totalInstances},
> asList(concat('tagPathHere ',idx()),idx())
> )
> )
> 
> ```

When given a static number rather than indirect binding, this is what I get (expected)

> **Expected and Working result**
>
> ```python
> "#NAMES"
> "baseTag","index"
> "#TYPES"
> "str","I"
> "#ROWS","2"
> "tagPathHere 0","0"
> "tagPathHere 1","1"
> 
> ```

however, when changing the `{New Template.totalInstances}` property to an indirect binding, I get an exception:

> **Exception**
>
> ```python
> java.lang.Exception: Error executing expression binding on
> New Template.New Template.tagDataSet
> at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.runExpression(ExpressionPropertyAdapter.java:92)
> at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter$1.run(ExpressionPropertyAdapter.java:59)
> at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)
> at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
> at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> at java.base/java.security.AccessController.doPrivileged(Unknown Source)
> at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
> Caused by: java.lang.RuntimeException: Unable to handle rowSource #1
> at com.automation_pros.simaids.common.expressions.UnionAll.execute(UnionAll.java:121)
> at com.inductiveautomation.ignition.client.expressions.ClientDynamicDispatchFunction.execute(ClientDynamicDispatchFunction.java:43)
> at com.inductiveautomation.ignition.common.expressions.FunctionExpression.execute(FunctionExpression.java:69)
> at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.runExpression(ExpressionPropertyAdapter.java:83)
> ... 15 more
> Caused by: java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "value" is null
> at com.automation_pros.simaids.common.expressions.UnionAll.buildWith(UnionAll.java:174)
> at com.automation_pros.simaids.common.expressions.UnionAll.execute(UnionAll.java:117)
> ... 18 more
> 
> Ignition v8.1.38 (b2024030513)
> Java: Azul Systems, Inc. 17.0.9
> 
> ```

~~Any ideas? I'm probably missing something fairly basic on this...~~

Need more coffee. PLC was offline... sigh.

---

<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:** [November 20, 2024, 3:07pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/184 "2024-11-20T15:07:42Z")

</div>

> [@bschroeder](#):
>
> PLC was offline... sigh.

The number of times.....

You are not alone friend.

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [November 20, 2024, 3:08pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/185 "2024-11-20T15:08:47Z")

</div>

The embarrassing part, is that it is our internal development PLC. And it is sitting on my desk... right next to me.

---

<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:** [November 20, 2024, 6:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/186 "2024-11-20T18:52:25Z")

</div>

Heh. Get busy with something, come back to the forum, and questions for me solve _ **themselves** _. 😁

---

<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:** [January 13, 2025, 10:02pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/187 "2025-01-13T22:02:19Z")

</div>

Phil,

I'm back with another similar issue. I can not figure out why this expression is returning `<No Data>`. I've been staring at it for a couple of hours trying to get it to work with no success so, time to ask for another more knowledgeable set of eyes.

I have some custom properties on a power table in Vision, their current status looks like this:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/1/d10437f8b23cf9064918c24767dc16300bfe1d3c.png)

This is the binding on summedData:

> **summedData binding**
>
> ```python
> orderBy(
> selectStar(
> {Root Container.Processing Group.processingMinsTable.pivotedData},
> asMap('Last 8','D','Last 24', 'D'),
> asMap(
> transform(
> groupBy(
> {Root Container.Processing Group.processingMinsTable.last8HistoricalData},
> split(it()['path'],'_')[0]
> ),
> forEach(
> value(),
> asList(
> case(
> it()[0],
> 'productlevel','No Product',
> 'caps','No Caps',
> 'empty','No Bottles',
> 'Packaging'
> ),
> round(sum(it()[1],'value') / 60.0, 1)
> )
> )
> )
> )[it()['Occurrence']],
> asMap(
> transform(
> groupBy(
> {Root Container.Processing Group.processingMinsTable.historicalData},
> split(it()['path'],'_')[0]
> ),
> forEach(
> value(),
> asList(
> case(
> it()[0],
> 'productlevel','No Product',
> 'caps','No Caps',
> 'empty','No Bottles',
> 'Packaging'
> ),
> round(sum(it()[1],'value') / 60.0, 1)
> )
> )
> )
> )[it()['Occurrence']],
> asMap(
> 'No Bottles', 6,
> 'No Caps', 4,
> 'No Product', 1,
> 'Packaging', 5
> )[it()['Occurrence']]
> ),
> it()['Occurrence']
> )
> 
> ```

Here is sample data that can be used for the other three properties:

> **historicalData**
>
> ```python
> "#NAMES"
> "path","value","quality","timestamp"
> "#TYPES"
> "str","L","I","date"
> "#ROWS","120"
> "productlevel_at_sp","3600","192","2025-01-12 15:00:00.000"
> "cap_supply","3600","192","2025-01-12 15:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 15:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 15:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 15:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 16:00:00.000"
> "cap_supply","3600","192","2025-01-12 16:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 16:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 16:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 16:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 17:00:00.000"
> "cap_supply","3600","192","2025-01-12 17:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 17:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 17:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 17:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 18:00:00.000"
> "cap_supply","3600","192","2025-01-12 18:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 18:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 18:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 18:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 19:00:00.000"
> "cap_supply","3600","192","2025-01-12 19:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 19:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 19:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 19:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 20:00:00.000"
> "cap_supply","3600","192","2025-01-12 20:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 20:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 20:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 20:00:00.000"
> "productlevel_at_sp","3600","192","2025-01-12 21:00:00.000"
> "cap_supply","3600","192","2025-01-12 21:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 21:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 21:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 21:00:00.000"
> "productlevel_at_sp","3132","192","2025-01-12 22:00:00.000"
> "cap_supply","3600","192","2025-01-12 22:00:00.000"
> "downstream_stop_request","3600","192","2025-01-12 22:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 22:00:00.000"
> "empty_bottles_primied","0","192","2025-01-12 22:00:00.000"
> "productlevel_at_sp","282","192","2025-01-12 23:00:00.000"
> "cap_supply","889","192","2025-01-12 23:00:00.000"
> "downstream_stop_request","1384","192","2025-01-12 23:00:00.000"
> "empty_bottles_present","0","200","2025-01-12 23:00:00.000"
> "empty_bottles_primied","180","192","2025-01-12 23:00:00.000"
> "productlevel_at_sp","605","192","2025-01-13 00:00:00.000"
> "cap_supply","0","192","2025-01-13 00:00:00.000"
> "downstream_stop_request","1372","192","2025-01-13 00:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 00:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 00:00:00.000"
> "productlevel_at_sp","304","192","2025-01-13 01:00:00.000"
> "cap_supply","7","192","2025-01-13 01:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 01:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 01:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 01:00:00.000"
> "productlevel_at_sp","0","192","2025-01-13 02:00:00.000"
> "cap_supply","0","192","2025-01-13 02:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 02:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 02:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 02:00:00.000"
> "productlevel_at_sp","0","192","2025-01-13 03:00:00.000"
> "cap_supply","0","192","2025-01-13 03:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 03:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 03:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 03:00:00.000"
> "productlevel_at_sp","0","192","2025-01-13 04:00:00.000"
> "cap_supply","0","192","2025-01-13 04:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 04:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 04:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 04:00:00.000"
> "productlevel_at_sp","1141","192","2025-01-13 05:00:00.000"
> "cap_supply","0","192","2025-01-13 05:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 05:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 05:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 05:00:00.000"
> "productlevel_at_sp","3280","192","2025-01-13 06:00:00.000"
> "cap_supply","0","192","2025-01-13 06:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 06:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 06:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 06:00:00.000"
> "productlevel_at_sp","3464","192","2025-01-13 07:00:00.000"
> "cap_supply","0","192","2025-01-13 07:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 07:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 07:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 07:00:00.000"
> "productlevel_at_sp","1640","192","2025-01-13 08:00:00.000"
> "cap_supply","0","192","2025-01-13 08:00:00.000"
> "downstream_stop_request","565","192","2025-01-13 08:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 08:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 08:00:00.000"
> "productlevel_at_sp","229","200","2025-01-13 09:00:00.000"
> "cap_supply","0","192","2025-01-13 09:00:00.000"
> "downstream_stop_request","907","192","2025-01-13 09:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 09:00:00.000"
> "empty_bottles_primied","348","192","2025-01-13 09:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 10:00:00.000"
> "cap_supply","761","200","2025-01-13 10:00:00.000"
> "downstream_stop_request","611","192","2025-01-13 10:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 10:00:00.000"
> "empty_bottles_primied","58","192","2025-01-13 10:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 11:00:00.000"
> "cap_supply","0","200","2025-01-13 11:00:00.000"
> "downstream_stop_request","468","192","2025-01-13 11:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 11:00:00.000"
> "empty_bottles_primied","155","192","2025-01-13 11:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 12:00:00.000"
> "cap_supply","0","200","2025-01-13 12:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 12:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 12:00:00.000"
> "empty_bottles_primied","101","192","2025-01-13 12:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 13:00:00.000"
> "cap_supply","0","200","2025-01-13 13:00:00.000"
> "downstream_stop_request","515","200","2025-01-13 13:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 13:00:00.000"
> "empty_bottles_primied","151","200","2025-01-13 13:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 14:00:00.000"
> "cap_supply","0","200","2025-01-13 14:00:00.000"
> "downstream_stop_request","0","200","2025-01-13 14:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 14:00:00.000"
> "empty_bottles_primied","0","200","2025-01-13 14:00:00.000"
> 
> ```

> **last8historicalData**
>
> ```python
> "#NAMES"
> "path","value","quality","timestamp"
> "#TYPES"
> "str","L","I","date"
> "#ROWS","40"
> "productlevel_at_sp","3464","192","2025-01-13 07:00:00.000"
> "cap_supply","0","192","2025-01-13 07:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 07:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 07:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 07:00:00.000"
> "productlevel_at_sp","1640","192","2025-01-13 08:00:00.000"
> "cap_supply","0","192","2025-01-13 08:00:00.000"
> "downstream_stop_request","565","192","2025-01-13 08:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 08:00:00.000"
> "empty_bottles_primied","0","192","2025-01-13 08:00:00.000"
> "productlevel_at_sp","229","200","2025-01-13 09:00:00.000"
> "cap_supply","0","192","2025-01-13 09:00:00.000"
> "downstream_stop_request","907","192","2025-01-13 09:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 09:00:00.000"
> "empty_bottles_primied","348","192","2025-01-13 09:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 10:00:00.000"
> "cap_supply","761","200","2025-01-13 10:00:00.000"
> "downstream_stop_request","611","192","2025-01-13 10:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 10:00:00.000"
> "empty_bottles_primied","58","192","2025-01-13 10:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 11:00:00.000"
> "cap_supply","0","200","2025-01-13 11:00:00.000"
> "downstream_stop_request","468","192","2025-01-13 11:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 11:00:00.000"
> "empty_bottles_primied","155","192","2025-01-13 11:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 12:00:00.000"
> "cap_supply","0","200","2025-01-13 12:00:00.000"
> "downstream_stop_request","0","192","2025-01-13 12:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 12:00:00.000"
> "empty_bottles_primied","101","192","2025-01-13 12:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 13:00:00.000"
> "cap_supply","0","200","2025-01-13 13:00:00.000"
> "downstream_stop_request","515","200","2025-01-13 13:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 13:00:00.000"
> "empty_bottles_primied","151","200","2025-01-13 13:00:00.000"
> "productlevel_at_sp","0","200","2025-01-13 14:00:00.000"
> "cap_supply","0","200","2025-01-13 14:00:00.000"
> "downstream_stop_request","0","200","2025-01-13 14:00:00.000"
> "empty_bottles_present","0","200","2025-01-13 14:00:00.000"
> "empty_bottles_primied","0","200","2025-01-13 14:00:00.000"
> 
> ```

> **pivotedData**
>
> ```python
> "#NAMES"
> "Occurrence","_7A","_8A","_9A","_10A","_11A","_12P","_1P","_2P","_3P","_4P","_5P","_6P","_7P","_8P","_9P","_10P","_11P","_12A","_1A","_2A","_3A","_4A","_5A","_6A"
> "#TYPES"
> "str","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I","I"
> "#ROWS","4"
> "No Product","0","0","0","0","7","0","0","0","0","0","0","0","0","0","45","42","43","4","0","0","0","0","0","0"
> "Packaging","6","10","14","6","1","6","12","0","0","0","0","0","0","0","0","0","0","0","11","17","13","20","22","9"
> "No Bottles","0","0","4","0","0","0","1","0","0","0","0","0","0","0","45","41","0","0","0","0","0","0","0","0"
> "No Caps","2","1","0","2","0","0","1","60","60","60","60","60","60","60","60","60","60","11","0","0","0","0","0","2"
> 
> ```

I have a nearly identical binding working on another table on the same window. The only differences being that there are only two columns added, they're of type double, and the sum is not divided by 60.0 to convert to mins

The only error I get is from a binding, where a `columnsOf()` expression is complaining that this dataset is null, which of course it is, for whatever reason.

Any assistance is appreciated.

---

<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:** [January 13, 2025, 10:20pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/188 "2025-01-13T22:20:05Z")

</div>

Consider moving the two transforms into a single transform before the `orderBy()`, yielding `value()[0]` and `value()[1]`, so that the grouping hard work only occurs once. Perhaps add a Document property to the window so that you can see those intermediate values.

{ I don't immediately see the problem, and cannot spend much time on this at the moment. }

---

<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:** [January 16, 2025, 3:07pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/189 "2025-01-16T15:07:19Z")

</div>

Phil,

I started this over again today, and for whatever reason, it decided it was going to work.

I believe there is some minor bug that has to do with Vision, but I am having trouble making something that reliably replicates the issue.

If I manage to figure out what is happening I'll be sure to let you know my finding.

Thanks for your help.

---

<div class="post-metadata">

**Author:** ![mdemaris](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mdemaris/32/54639_2.png) [@mdemaris](https://forum.inductiveautomation.com/u/mdemaris)\
**Post date:** [January 24, 2025, 8:16pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/190 "2025-01-24T20:16:35Z")

</div>

Hey Phil,

How do I use `view()`, or any of your custom tools?

---

<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:** [January 24, 2025, 8:19pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/191 "2025-01-24T20:19:09Z")

</div>

Have you looked at the documents:

> [@pturmel](#):
>
> [latest content](https://www.automation-pros.com/toolkit/doc/).

---

<div class="post-metadata">

**Author:** ![mdemaris](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mdemaris/32/54639_2.png) [@mdemaris](https://forum.inductiveautomation.com/u/mdemaris)\
**Post date:** [January 24, 2025, 8:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/192 "2025-01-24T20:26:22Z")

</div>

Yes... I tried `system.dataset.view()` and `view()`. I checked `system.db` as well.

---

<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:** [January 24, 2025, 8:33pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/193 "2025-01-24T20:33:21Z")

</div>

Are you able to post your code or attempts at code, along with example data and what you want your data to look like? What error(s) are you getting?

---

<div class="post-metadata">

**Author:** ![mdemaris](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mdemaris/32/54639_2.png) [@mdemaris](https://forum.inductiveautomation.com/u/mdemaris)\
**Post date:** [January 24, 2025, 8:41pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/194 "2025-01-24T20:41:41Z")

</div>

Dataset from Query:

```python
"#NAMES"
"MenuID","MenuName","DisplayName","DisplayOrder","ParentMenu","MenuNumber"
"#TYPES"
"I","str","str","I","I","I"
"#ROWS","3"
"1","Dashboards","Dashboards","1","0","1"
"2","PartsInventory","Parts Inventory","2","0","2"
"3","Ordering","Ordering","3","0","3"

```

Transform on query binding:

```python
def transform(self, value, quality, timestamp):
	output = view('Select min(MenuID) As FirstMenu',value)
	return output

```

Error: `global name 'view' is not defined`

`output = system.dataset.view('Select min(MenuID) As FirstMenu',value)`  
Error: `object has no attribute 'view'`

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [January 24, 2025, 8:48pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/195 "2025-01-24T20:48:33Z")

</div>

`view()` is for an expression not scripting. Change the transform to an expression type.

---

<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:** [January 24, 2025, 8:49pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/196 "2025-01-24T20:49:42Z")

</div>

~~@dkhayes117 They also tried `system.dataset.view` and got an error.~~

 

~~@mdemaris  
Double check the status of the module on the gateway page. Did you restart the gateway after installing the module? If you did not, it might need a restart.~~

Edit: only `view` exists, `system.dataset.view` does not.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [January 24, 2025, 8:50pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/197 "2025-01-24T20:50:02Z")

</div>

however, you don't need the `view()` expression, you can just use the `min()` expression.  
[min | Ignition User Manual](https://docs.inductiveautomation.com/docs/8.1/appendix/expression-functions/aggregates/min)

---

<div class="post-metadata">

**Author:** ![mdemaris](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mdemaris/32/54639_2.png) [@mdemaris](https://forum.inductiveautomation.com/u/mdemaris)\
**Post date:** [January 24, 2025, 8:57pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/198 "2025-01-24T20:57:32Z")

</div>

🤦‍♂️

---

<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:** [January 24, 2025, 9:10pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/199 "2025-01-24T21:10:47Z")

</div>

It is also worth noting that everything that `view()` can do (except pivots) can now be done more efficiently with combinations of `unionAll()`, `selectStar()`, `where()`, `orderBy()`, and `groupBy()`. They run a lot faster because they do not rely on jython under the hood.

---

<div class="post-metadata">

**Author:** ![eli.w](https://avatars.discourse-cdn.com/v4/letter/e/c5a1d2/32.png) [@eli.w](https://forum.inductiveautomation.com/u/eli.w)\
**Post date:** [March 19, 2025, 2:28pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/200 "2025-03-19T14:28:10Z")

</div>

On Ignition 8.1.24, we recently upgraded Simulation Aids to Integration toolkit and lost some window functionality in Vision (both in Designer and in clients). There have been no changes made to these Vision components, neither before or after the module upgrade.  
The errors seem related to the [Transient Dataset function](https://www.automation-pros.com/toolkit/doc/datasets.html#totransient), and I cannot find a way to edit the windows that won't launch because they, well...won't launch. I've traced through some of our designer scripts (both shared and project), but haven't found the link yet to this Transient Dataset function, so my impression is that the scripting issue is within the window itself and not a project script. Other Vision windows launch just fine within the same projects.  
Is this something we'd need to roll back to some prior version of SimAids, edit, and then roll forward into Integration Toolkit to fix?

> **Error**
>
> ```python
> com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Unexpected parsing error during binary deserialization.
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:367)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:268)
> at com.inductiveautomation.factorypmi.application.model.WindowCache._deserializeWindow(WindowCache.java:382)
> at com.inductiveautomation.factorypmi.application.model.WindowCache._loadWindow(WindowCache.java:325)
> at com.inductiveautomation.factorypmi.application.model.WindowCache.openWindow(WindowCache.java:299)
> at com.inductiveautomation.factorypmi.designer.workspace.WindowWorkspace$DesigntimeWindowOpener.openWindow(WindowWorkspace.java:3778)
> at com.inductiveautomation.factorypmi.designer.workspace.WindowWorkspace.openWindow(WindowWorkspace.java:1520)
> at com.inductiveautomation.factorypmi.designer.model.navtree.WindowNode.open(WindowNode.java:260)
> at com.inductiveautomation.ignition.designer.navtree.model.AbstractResourceNavTreeNode.onDoubleClick(AbstractResourceNavTreeNode.java:407)
> at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$MouseListener.lambda$mousePressed$0(NavTreePanel.java:698)
> at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
> at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
> at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
> at java.base/java.security.AccessController.doPrivileged(Native Method)
> at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
> at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
> Caused by: org.apache.commons.io.IOExceptionWithCause: java.lang.ClassNotFoundException: com.automation_pros.simaids.TransientDataset
> at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.getClassForName(Decoders.java:386)
> at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.binaryToObject(Decoders.java:400)
> at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.binaryToObject(Decoders.java:359)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readAttributes(BinaryParser.java:179)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:148)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
> at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:358)
> ... 22 more
> Caused by: java.lang.ClassNotFoundException: com.automation_pros.simaids.TransientDataset
> at java.base/java.net.URLClassLoader.findClass(Unknown Source)
> at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
> at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
> at java.base/java.lang.Class.forName0(Native Method)
> at java.base/java.lang.Class.forName(Unknown Source)
> at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForNameImpl(ClassNameResolver.java:196)
> at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForName(ClassNameResolver.java:169)
> at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.getClassForName(Decoders.java:376)
> ... 39 more
> 
> Ignition v8.1.24 (b2023011208)
> Java: Azul Systems, Inc. 11.0.16.1
> 
> ```

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

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