# Client tags not shown when working in the Project Library

**URL:** <https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [June 4, 2025, 9:08pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059 "2025-06-04T21:08:00Z")\
**Posts on this page:** 11\
**Page:** 2

<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:** [June 6, 2025, 9:19pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/21 "2025-06-06T21:19:53Z")

</div>

yeah, pass that dict as a single payload (ideally, as an object, so you can validate it)

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [June 6, 2025, 9:20pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/22 "2025-06-06T21:20:36Z")

</div>

May I ask why you're storing things in tags ? Is that data used somewhere else ?  
It looks kinda funky to pull data from a database in to tags, to then use these tags to send the data to an API.  
What happens if another user runs the same process while the first one is still picking his 4 tags ?

---

<div class="post-metadata">

**Author:** ![Check](https://avatars.discourse-cdn.com/v4/letter/c/e19adc/32.png) [@Check](https://forum.inductiveautomation.com/u/Check)\
**Post date:** [June 6, 2025, 9:33pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/23 "2025-06-06T21:33:43Z")

</div>

They are all client tags, so there's only one user per client session, and each user is working on one order at a time. I use tags to store the values because the screen includes labels that give the user visibility into the order details. The labels are bound to the tags, so when the user enters an order and the tags are updated, the labels update automatically.

Technically, I could just set the label values directly without using tags, but I remember reading in the forum that using client tags for this kind of temporary UI data is considered good practice.

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [June 6, 2025, 9:59pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/24 "2025-06-06T21:59:45Z")

</div>

I've read this forum a lot and i've never seen this advised. Sounds like over complication to me...  
I'd pull everything in a dataset, bind a table ti it to display what's been retrieved from the db, add the 4 additional rows to it with `system.db.addRows`, then pass the dataset to the function that builds the dict.

---

<div class="post-metadata">

**Author:** ![Check](https://avatars.discourse-cdn.com/v4/letter/c/e19adc/32.png) [@Check](https://forum.inductiveautomation.com/u/Check)\
**Post date:** [June 6, 2025, 10:15pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/25 "2025-06-06T22:15:18Z")

</div>

Displaying a table to the user isn't consistent with how our applications are designed. We present data in individual labels, sometimes using different formats; for example, we show the number of completed serial numbers on a large LED display. I understand that loading everything into a dataset would be simpler from a development perspective, but we're aiming for interfaces that are user-friendly and tailored to the operator.

I think I’ll start a new thread to ask what the best practice is for this kind of application.

---

<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 6, 2025, 10:19pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/26 "2025-06-06T22:19:07Z")

</div>

Using client tags in this fashion is a perfectly appropriate UI choice in Vision. Particularly if the flow of the UI opens a series of main windows that reference partial results. Exactly the same way one would use Perspective session properties to hold state in a multi-step UI.

I think you are just fine, Check.

---

<div class="post-metadata">

**Author:** ![Check](https://avatars.discourse-cdn.com/v4/letter/c/e19adc/32.png) [@Check](https://forum.inductiveautomation.com/u/Check)\
**Post date:** [June 6, 2025, 10:43pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/27 "2025-06-06T22:43:11Z")

</div>

Thank you, @pturmel! Here is the general approach. Please let me know if anything is missing or could be improved:

1. The user scans the order number.
2. Ignition retrieves order details from the database.
3. The order details are loaded in client tags which are bound to different components on the screen.
4. The user sees the order details because the components were updated through the bindings.
5. The user makes a few selections, wich are stored in other client tags.
6. When done, the user clicks on a button to complete the transaction.
7. The button reads the tag paths and sends them as a list to a function in the project library.
8. The function reads the tags, builds a dictionary, and sends it as the payload to the API.

---

<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 6, 2025, 10:46pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/28 "2025-06-06T22:46:43Z")

</div>

All reasonable. If it all one window, you could probably do the whole thing in window custom properties, which would allow a single user to work on more than one of those at a time.

But your architecture allows you to split the one window into multiple steps, each of which references the client tags it needs. Then the final save gets everything from those client tags.

I'd keep it as is.

---

<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 6, 2025, 10:53pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/29 "2025-06-06T22:53:04Z")

</div>

> [@Check](#):
>
> Displaying a table to the user isn't consistent with how our applications are designed. We present data in individual labels, sometimes using different formats; for example, we show the number of completed serial numbers on a large LED display. I understand that loading everything into a dataset would be simpler from a development perspective, but we're aiming for interfaces that are user-friendly and tailored to the operator.

It's a digression, but just for the sake of it - just because the data is in a dataset doesn't mean you have to display it in a table. You can bind your labels to a dataset just as well as you can to a tag.

In very recent versions of 8.1 you can also have a custom property of "document" type, which is effectively a JSON object.

My personal preference, with the **hefty** disclaimer that I've never had to maintain a Vision project professionally, would be to keep data to the minimum "scope" possible. That is, to prefer custom properties (in whatever form) in this case over client tags, just to minimize the chance of something else down the road interfering with (or subtly relying on) your client tags, _until/unless_ you need the flexibility of a multi-window approach and need to share the data. But I _would_ agree with Phil that if you've already got something working/close to working, it's not worth the effort to "refactor" it eagerly unless you've got an abundance of free time 😃

---

<div class="post-metadata">

**Author:** ![Check](https://avatars.discourse-cdn.com/v4/letter/c/e19adc/32.png) [@Check](https://forum.inductiveautomation.com/u/Check)\
**Post date:** [June 6, 2025, 11:23pm UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/30 "2025-06-06T23:23:17Z")

</div>

The current version of our application reads from the database and loads the values directly into the components on screen without using tags. In the new revision, I'm adding an API call. Would it be considered "correct" to continue keeping the values in the components without using client tags or custom properties? We don't need multi-windows because the operation is straightforward: the user scans and order, sees the details, makes a few selections, and completes the transaction. We do have multiple clients, but each client handles only one order at a time.

---

<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 7, 2025, 2:45am UTC](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059/31 "2025-06-07T02:45:43Z")

</div>

Client tags are not needed here. They are really used if you need user specific values to be saved across windows. Since your application is simple enough that isn’t needed, I would do everything I could to minimize my data footprint while keeping the processing as simple as possible.

In other words, don’t waste the time/effort to move the data to and from tags, when you can just as effectively keep it as is.

[Previous page](https://forum.inductiveautomation.com/t/client-tags-not-shown-when-working-in-the-project-library/107059.md?page=1)
