# Vision client tools for bult Indirect-ification of controls

**URL:** <https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [April 23, 2025, 9:12pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484 "2025-04-23T21:12:03Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 23, 2025, 9:12pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/1 "2025-04-23T21:12:03Z")

</div>

I am finding that when I first designed an interface with hardcoded, yet well structured paths, the amount of work it takes to do the exact same procedure to "indirect-ify" all of these components is quite frustrating, especially as they are all exactly the same procedure to fix. Is there a form of a tool that would allow me to do something along the lines of modify **all** Tag Bindings into Indirect Tag Bindings -- the equivalent of the _intent_ from this search and replace? I am currently selecting the bindings one at a time, copying the path, replacing "tb1" with {1} and filling {1} with "Root Container.project". The search and replace is very close but how do I indicate a change from Tag Binding to Indirect Tag Binding?

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/3/63dd78a716e708e8db79dafa2e1e864bf2eb66b4.png)

---

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 23, 2025, 9:23pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/2 "2025-04-23T21:23:33Z")

</div>

If Tag Bindings would just accept {Root Container.myProperty} and auto-cast as indirect tags, that would work perfectly fine as well.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [April 24, 2025, 4:30am UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/3 "2025-04-24T04:30:16Z")

</div>

This is in Vision, not Perspective?

EDIT: I might be able to come up with a script that does this, I'll take a look. Warning that it will involve direct manipulation of project XML so use at own risk

---

<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:** [April 25, 2025, 10:39am UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/4 "2025-04-25T10:39:37Z")

</div>

> [@sherman](#):
>
> The search and replace is very close but how do I indicate a change from Tag Binding to Indirect Tag Binding?

Without modifying the window’s file on disk, this is not possible. That is not exactly a trivial problem to solve.

---

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 25, 2025, 6:22pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/5 "2025-04-25T18:22:13Z")

</div>

I'm trying to solve this one without dipping into raw XML but thank you

---

<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:** [April 25, 2025, 6:25pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/6 "2025-04-25T18:25:21Z")

</div>

You can right click in the property editor to copy/paste bindings (and then find/replace afterwards, if needed), but there's no programmatic or bulk swap binding type operation, unfortunately.

---

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 25, 2025, 6:26pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/7 "2025-04-25T18:26:52Z")

</div>

This sort of blows my mind because from a frontend handling side I can't really believe it is impossible to parse the tag paths with the basic "if { or } in path do\_indirect else do\_direct". The format of `[TAGS]{1}/{2}/{3}.myproperty` with {1} = Root Container.prop1, {2} = Root Container.prop2, {3} = Root Container.prop3 should be trivially different from `[TAGS]{Root Container.prop1}/{Root Container.prop2}/{Root Container.prop3}.myproperty`, and if these strings were handled through a uniform parser you should then naturally be able to do a text replace to add the indirect bindings inside the current Find/Replace interface

---

<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:** [April 25, 2025, 6:33pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/8 "2025-04-25T18:33:32Z")

</div>

> [@sherman](#):
>
> should be trivially different

Sure, but you're not just "parsing tag paths". You need to modify a binding type, which fundamentally means you need to deconstruct the tag path from a standard tag binding and the reconstruct it with the users intended purpose as an indirect tag binding.

I'm not saying it isn't possible to write a program that will do that, I'm saying it doesn't exist in the current environment, and that it isn't a trivial problem to solve.

---

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 25, 2025, 7:23pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/9 "2025-04-25T19:23:52Z")

</div>

Sorry, I meant in the first place not as a modifier for what is already the engine functionality

---

<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:** [April 25, 2025, 7:29pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/10 "2025-04-25T19:29:28Z")

</div>

In Vision's defense, a lot of the fundamental technical decisions were made 15+ years ago.

In Perspective, for example, "under the hood" there's only really one tag binding type, and the other bindings just create instances of that underlying type ad-hoc.

---

<div class="post-metadata">

**Author:** ![sherman](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@sherman](https://forum.inductiveautomation.com/u/sherman)\
**Post date:** [April 25, 2025, 7:43pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/11 "2025-04-25T19:43:13Z")

</div>

I understand that, but without knowing in explicit detail how the parser for the tag binding menu works I think it is very likely that relatively small adjustments could be made to have the "Tag Binding" menu auto-fill the Indirect Tag Binding menu with parsed strings like my example above. It seems to already auto-fill if you highlight the tag paths and switch from Tag Binding to Indirect Tag Binding. It's sooooo close

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [April 25, 2025, 8:01pm UTC](https://forum.inductiveautomation.com/t/vision-client-tools-for-bult-indirect-ification-of-controls/105484/12 "2025-04-25T20:01:49Z")

</div>

this explains a number of (nice) things about perspective's jsons 🙂
