# \[FEATURE\]Vision Template Expose Read-Only Custom Internal Properties (Outputs)

**URL:** <https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [March 26, 2024, 1:30pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896 "2024-03-26T13:30:00Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [March 26, 2024, 1:30pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/1 "2024-03-26T13:30:00Z")

</div>

It would be great if I could essentially create a Custom Property Template so I could reuse the same custom props/customizer all over the place.

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

> **[Vision Template Expose Read-Only Custom (Internal) Properties | Ignition...](https://ideas.inductiveautomation.com/ignition-features-and-ideas/p/vision-template-expose-read-only-custom-properties)**
>
> It would be extremely useful to be able to expose some internal properties of a vision template for use in whatever container may hold an instance of that

---

<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:** [March 26, 2024, 1:34pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/2 "2024-03-26T13:34:37Z")

</div>

Why can you not use a normal template property? Those are specifically for exposure to containers. 🤷‍♂️

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [March 26, 2024, 1:36pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/3 "2024-03-26T13:36:37Z")

</div>

What do you mean? The options for a custom template property are `template parameter` or `internal property`.

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/3/93b1693888dae34d63f6ec0a0e37bfa6768ff51b.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:** [March 26, 2024, 1:38pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/4 "2024-03-26T13:38:00Z")

</div>

Sorry, parameter == property in practice. What is it about template parameters that doesn't suit your purpose? That they aren't bindable within the template? (They _ **are** _ _writable_ within the template.)

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [March 26, 2024, 1:40pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/5 "2024-03-26T13:40:57Z")

</div>

I guess not being able to bind the parameters to other properties is essentially the issue. I can script it with property change to update the parameter's value, but that ends up being too many scripts when there's multiple properties and animation involved.

---

<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:** [March 26, 2024, 1:44pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/6 "2024-03-26T13:44:51Z")

</div>

It has to be that way in order for parameters to be bindable on the outside. Perhaps you should rephrase your feature request to have explicit _ **output parameters** _. Bindable only on the inside, exposed to the container. The existing template parameters are functionally "In/Out", quite deliberately so. Writes from inside the template can drive a **bidirectional** binding on the outside. And bidirectional bindings to template properties inside the template can drive values back to the container.

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [March 26, 2024, 1:47pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/7 "2024-03-26T13:47:16Z")

</div>

That makes sense. Yes, output parameters/properties is essentially what I'm looking for I just didn't call it that.

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [March 26, 2024, 1:51pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/8 "2024-03-26T13:51:49Z")

</div>

I think I had made a request like this before, I do see this one but it seems like they only care to do it for perspective now - ["template parameters" - Implement INPUTS and OUTPUTS | Voters | Inductive Automation](https://ideas.inductiveautomation.com/ignition-features-and-ideas/p/template-parameters-implement-inputs-and-outputs)

However this did lead to a old post from @pturmel I would imagine this is still a relevant solution [Template output parameters](https://forum.inductiveautomation.com/t/template-output-parameters/10601)

---

<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:** [March 26, 2024, 2:00pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/9 "2024-03-26T14:00:31Z")

</div>

> [@bkarabinchak.psi](#):
>
> still a relevant solution

Yes, though I often open-code it like so, on an internal property:

```python
objectScript(
	"args[0]\nbinding.target.someParameterName = args[0]",
	..someNestedExpression..
)

```

Both the internal property and the template parameter get the value of the nested expression.

The [docs for objectScript()](https://www.automation-pros.com/toolkit/doc/scripting.html#objectscript) mention using additional code in `expr`.

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [March 26, 2024, 2:33pm UTC](https://forum.inductiveautomation.com/t/feature-vision-template-expose-read-only-custom-internal-properties-outputs/87896/10 "2024-03-26T14:33:45Z")

</div>

Yes, still a relevant solution, but that's alot of extra scripts running. Also, somewhat complex and confuses me a little bit... but that's more a _me_ issue.

Also the comment from mkarnick on your original feature post is still relevant.

> [@](#):
>
> I couldn't agree more. The templates are otherwise perfect other than the fact that the internal properties cannot be accessed externally, nor can they be bound to the 'template properties'. The requirement of scripting kills my confidence in the template being robust. Don't get me wrong, Jython is great, but I prefer to not rely on a script to replicate the functionality of a binding.
