# Automation Professionals' Integration Toolkit Module

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

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

</div>

Awesome, we’ll try binding things then, I have to admit we didn’t really try as there wasn’t the binding icon.

I would love to but unfortunately a flight from France to Sacramento might be too much to ask for to my employer ahah !

Thanks!

---

<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, 6:23pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/303 "2025-08-13T18:23:44Z")

</div>

There's a livestream option for ICC, too.

---

<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:** [September 17, 2025, 8:58pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/304 "2025-09-17T20:58:46Z")

</div>

My presentation is done. The source code I mentioned is available here:

[https://www.automation-pros.com/toolkit/actors.zip](https://www.automation-pros.com/toolkit/actors.zip)

Do note this discussion when implementing your own actors:

> [@Bad\_NotFound in tag properties](https://forum.inductiveautomation.com/t/bad-notfound-in-tag-properties/116626):
>
> Ignition 8.3.8 , docker environment Hi everyone, When adding any tag from the Siemens S7-1500 PLC field, whether in an OPC-UA connection with a Siemens server or with the new Siemens Enhanced driver, the tag is connected correctly. I read the correct value, but if I expand the tag and view the internal properties, these tags are in Bad\_NotFound. I haven't found anything regarding the functionality. I've tested various tag types, including DTL float arrays, and I get the same error. I repeat, i…

---

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

</div>

Automation Professionals is pleased to announce the production release of this module for Ignition v8.3: [v2.1.1.252721938](https://www.automation-pros.com/ignition/Integration%20Toolkit-2.1.1.252721938-v83.modl)

As usual, refer to the Module Sales page linked in the OP to keep up with the latest production releases.

---

<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:** [December 15, 2025, 12:20am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/306 "2025-12-15T00:20:39Z")

</div>

Hey @pturmel , with the Bulk Action, can we use relative tagpaths in the called script that are relative to the tagpath that triggered it?

e.g. if I’m calling this function:

```python
def doThisLongThing(values):
   # read udt param
   deviceName = system.tag.readBlocking('[.]../Parameters.DeviceName')[0].value

```

---

<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:** [December 15, 2025, 12:29am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/307 "2025-12-15T00:29:43Z")

</div>

No, but each item delivered includes the `.source` as a `TagPath` object, which can efficiently compute relative paths with the `parentPath` property and the `.getChildPath(...)` method.

Keep in mind that the function gets a **list** of items, that do not have to have the same source at all. Only if a function was set up to take just one item at a time could you apply relative paths automatically. And then, you just have the standard `valueChange` event. 🤷‍♂️

Also be aware that each function called, while not blocking the tag subsystem, relies on the gateway context's Execution Manager to run each delivery asynchronously. If you expect to run many long processes, consider handing off to a custom thread pool execution manager with the desired level of parallelism. If each potential item has its own long process, you may want to parallelize them individually.

---

<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:** [December 15, 2025, 12:51am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/308 "2025-12-15T00:51:12Z")

</div>

> [@pturmel](#):
>
> Only if a function was set up to take just one item at a time could you apply relative paths automatically.

Ah, derr, that makes sense. Monday brain still kicking in… Good note about the TagPath object though, that is handy to know.

---

<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:** [December 15, 2025, 12:52am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/309 "2025-12-15T00:52:41Z")

</div>

> [@nminchin](#):
>
> handy to know.

> **[Bulk Item Objects - Tag Actors - Integration Toolkit for Ignition](https://www.automation-pros.com/toolkit/doc/actors.html#bulk-item-objects)**
>
> The following features are exposed in the Designer’s Tag Browser, and supplement or alter the data flow for the tags to which they are applied. | A variety of expression functions and scripting functions generally useful in Ignition.

---

<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:** [February 3, 2026, 5:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/310 "2026-02-03T17:26:45Z")

</div>

Hey Phil,

I'm trying to use `@system.util.runInGateway` and am encountering an error.

### `toolkitTest`

```python
logger = system.util.getLogger(system.util.getProjectName() + '.' + system.reflect.getModulePath())

@system.util.runInGateway
def gwLogInfof(*args):
    logger.infof(*args)

```

### Script Console

```python
toolkitTest.gwLogInfof('Test Message')

```

## Result

```python
Java Traceback:
Traceback (most recent call last):
  File "<input>", line 1, in <module>
java.util.NoSuchElementException: No value present

	at java.util.Optional.orElseThrow(:0)

	at com.automation_pros.simaids.gateway.ToolkitRPCImpl.runInGateway(ToolkitRPCImpl.java:77)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(:0)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(:0)

	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(:0)

	at java.lang.reflect.Method.invoke(:0)

	at com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:275)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:225)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:152)

	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)

	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)

	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)

	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Server.handle(Server.java:182)

	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)

	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)

	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

	at java.lang.Thread.run(:0)

java.util.NoSuchElementException: java.util.NoSuchElementException: No value present

	at org.python.core.Py.JavaError(Py.java:545)

	at org.python.core.PyTableCode.call(PyTableCode.java:182)

	at org.python.core.PyCode.call(PyCode.java:18)

	at org.python.core.Py.runCode(Py.java:1703)

	at org.python.core.Py.exec(Py.java:1747)

	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)

	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:639)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:627)

	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)

	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

	at java.base/java.lang.Thread.run(Unknown Source)

Caused by: java.util.NoSuchElementException: No value present

	at java.util.Optional.orElseThrow(:0)

	at com.automation_pros.simaids.gateway.ToolkitRPCImpl.runInGateway(ToolkitRPCImpl.java:77)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(:0)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(:0)

	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(:0)

	at java.lang.reflect.Method.invoke(:0)

	at com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:275)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:225)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:152)

	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)

	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)

	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)

	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Server.handle(Server.java:182)

	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)

	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)

	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

	at java.lang.Thread.run(:0)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
java.util.NoSuchElementException: No value present

	at java.util.Optional.orElseThrow(:0)

	at com.automation_pros.simaids.gateway.ToolkitRPCImpl.runInGateway(ToolkitRPCImpl.java:77)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(:0)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(:0)

	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(:0)

	at java.lang.reflect.Method.invoke(:0)

	at com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:275)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:225)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:209)

	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:152)

	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)

	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)

	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)

	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Server.handle(Server.java:182)

	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)

	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)

	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

	at java.lang.Thread.run(:0)

java.util.NoSuchElementException: java.util.NoSuchElementException: No value present

```

Thoughts

Gateway: `8.3.4-SNAPSHOT (b2026010816)`  
Toolkit: `2.1.1 (b252721938)`

---

<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:** [February 3, 2026, 5:35pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/311 "2026-02-03T17:35:19Z")

</div>

Did you remember to save the project? Gateway scope cannot run unsaved content from the designer.

---

<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:** [February 3, 2026, 5:38pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/312 "2026-02-03T17:38:54Z")

</div>

> [@pturmel](#):
>
> Did you remember to save the project?

Yup, the project is saved. I also tried restarting the designer without any change.

---

<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:** [February 3, 2026, 5:59pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/313 "2026-02-03T17:59:42Z")

</div>

Hmmm. This is the relevant code:

```python
            if (ClientReqSession.exists()) {
                project = (String) ClientReqSession.get().getAttribute(ClientReqSession.SESSION_PROJECT_NAME);
            } else {
                project = ScriptContext.getDefaultProject().orElseThrow();
            }

```

This might be an unexpected dependency on Vision. I'll have to dig into this and figure out the corresponding Perspective-only project reference. If you would, add Vision and try again--I suspect that it will suddenly work.

---

<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:** [February 3, 2026, 6:05pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/314 "2026-02-03T18:05:57Z")

</div>

Even weirder then, I already have Vision installed.

---

<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:** [February 3, 2026, 6:06pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/315 "2026-02-03T18:06:50Z")

</div>

Hmm. Is this an inheritable project?

---

<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:** [February 3, 2026, 6:12pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/316 "2026-02-03T18:12:29Z")

</div>

Nope, not inheritable.

This is on a development gateway, I can try anything you’d find useful.

---

<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:** [February 3, 2026, 6:15pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/317 "2026-02-03T18:15:01Z")

</div>

Did you get a gateway log entry, too?

---

<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:** [February 3, 2026, 6:21pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/318 "2026-02-03T18:21:20Z")

</div>

Nah, I don’t see any gateway log messages coming from the Toolkit module.

My dev gateway regularly throws ClockDriftDetector messages, but I doubt that’s relevant 🤷🏻‍♂️

---

<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:** [February 3, 2026, 6:24pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/319 "2026-02-03T18:24:12Z")

</div>

Oops, debug level for ToolkitRPCImpl. Should provide a more specific line number--77 is the beginning of the `try`.

---

<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:** [February 3, 2026, 6:27pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/320 "2026-02-03T18:27:33Z")

</div>

I think I may have to pass the project name as an actual argument, since I can't seem to rely on `ClientReqSession` or `ScriptContext`.

---

<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:** [February 3, 2026, 6:51pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/321 "2026-02-03T18:51:46Z")

</div>

If you're using the standard machinery/happy path/`RpcDelegate`, you can use the static utility on `RpcDelegate`:  
`com.inductiveautomation.ignition.gateway.rpc.RpcDelegate.projectName()`

But internally this is just reporting from the `RpcContext`, which is backed by the `ClientReqSession`:

```python
String projectName = (String) session.getAttribute(ClientReqSession.SESSION_PROJECT_NAME);

```

So no idea why it wouldn't be working.

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

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