# System.tag.configure() issues

**URL:** <https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167>\
**Category:** Ignition\
**Tags:** ignition81, scripting\
**Created:** [January 8, 2026, 9:00pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167 "2026-01-08T21:00:39Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [January 8, 2026, 9:00pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/1 "2026-01-08T21:00:39Z")

</div>

I am attempting to write a script that can programmatically change the parameters of a folder full of UDT instances. I am running into an issue where the `system.tag.configure()` call is failing silently. Can someone with better knowledge of the internals help me fix the script?

```python
devicesBase = "[049_Production]test/Devices"

browseResults = system.tag.browse(
path=devicesBase,
filter={"tagType": "Folder"}
)

folders = [str(r["fullPath"]) for r in browseResults.getResults()]
print "Found", len(folders), "device subfolders"

totalUpdated = 0

for folderPath in folders:

# Get configs for THIS subfolder (recursive works here)
nodes = system.tag.getConfiguration(folderPath, True)

updated = 0

for item in nodes:
    for key, value in item.iteritems():
        if key != "tags":
            continue
        for udtConfig in value:
            if str(udtConfig['tagType']) != 'UdtInstance':
                continue
            # -----------------------------
            # PARAMETER UPDATE
            # -----------------------------
            if 'parameters' not in udtConfig:
                continue
            params = udtConfig['parameters']
            if 'PLCDevice' not in params:
                continue
            # Read current value safely
            if str(params['PLCDevice'].value) != 'Receiving':
                continue
            # parameter replacement
            params['PLCDevice'] = {
                'dataType': 'String',        
                'value': 'SPBG_049REC'
            }
            print "Updating PLCDevice for", udtConfig['name'], "to SPBG_049REC"
            updated += 1
            totalUpdated += 1

# Write once per folder if needed
if updated > 0:
    system.tag.configure(folderPath, nodes, "m")
    print "Updated", updated, "instances in", folderPath

print "TOTAL PLCDevice updates:", totalUpdated

```

---

<div class="post-metadata">

**Author:** ![David\_Stone](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/david_stone/32/79749_2.png) [@David\_Stone](https://forum.inductiveautomation.com/u/David_Stone)\
**Post date:** [January 9, 2026, 3:09am UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/2 "2026-01-09T03:09:55Z")

</div>

What is the error you get from the console/gateway logs?

---

<div class="post-metadata">

**Author:** ![drewdin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/drewdin/32/3363_2.png) [@drewdin](https://forum.inductiveautomation.com/u/drewdin)\
**Post date:** [January 9, 2026, 4:03am UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/3 "2026-01-09T04:03:22Z")

</div>

add more print statements to the log and watch its progress. Like David mentioned, are there any errors in the gateway logs?

---

<div class="post-metadata">

**Author:** ![tgarrison](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tgarrison/32/80965_2.png) [@tgarrison](https://forum.inductiveautomation.com/u/tgarrison)\
**Post date:** [January 9, 2026, 12:50pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/4 "2026-01-09T12:50:21Z")

</div>

Agreed. Add more print statements. Are you SURE it's getting into the if updated \> 0: condition?

---

<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 9, 2026, 1:26pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/5 "2026-01-09T13:26:04Z")

</div>

Avoid `print`. Use a logger. In gateway scope, `print` doesn't go to the logs visible from the gateway Web UI, but only to the wrapper log text file.

---

<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:** [January 9, 2026, 1:59pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/6 "2026-01-09T13:59:31Z")

</div>

Plus you can name your logger, do different levels like info/error/debug, and filter on both of these items.

---

<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:** [January 9, 2026, 5:19pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/7 "2026-01-09T17:19:57Z")

</div>

> [@Porter\_Ellis](#):
>
> `system.tag.configure()` call is failing silently

You're not checking its return either. I'd start with that.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [January 9, 2026, 10:12pm UTC](https://forum.inductiveautomation.com/t/system-tag-configure-issues/113167/8 "2026-01-09T22:12:51Z")

</div>

I found the solution. I wasn’t setting the `udtConfig['parameters'] = params` after changing the internals of the dictionary. The examples from the website and help from a coworker got me the answer. On a sidenote to this, does `system.tag.getConfiguration()` get a revamp in Ignition 8.3?

# 

```python
--------------------------------------

CONFIG

--------------------------------------

devicesBase = "[049_Production]test/Devices"

--------------------------------------

BROWSE DEVICE SUBFOLDERS (ONCE)

--------------------------------------

browseResults = system.tag.browse(
path=devicesBase,
filter={"tagType": "Folder"}
)

folders = [str(r["fullPath"]) for r in browseResults.getResults()]
print "Found", len(folders), "device subfolders"

--------------------------------------

PROCESS EACH SUBFOLDER

--------------------------------------

totalUpdated = 0

for folderPath in folders:

# Get configs for THIS subfolder (recursive works here)
nodes = system.tag.getConfiguration(folderPath, True)

updated = 0

# IA-style traversal
for item in nodes:
    for key, value in item.iteritems():
        if key != "tags":
            continue
        for udtConfig in value:
            if str(udtConfig['tagType']) != 'UdtInstance':
                continue
            # -----------------------------
            # PARAMETER UPDATE
            # -----------------------------
            if 'parameters' not in udtConfig:
                continue
            params = udtConfig['parameters']
            if 'PLCDevice' not in params:
                continue
            # Read current value safely
            if str(params['PLCDevice'].value) != 'CIP':
                continue
            # 🔑 CORRECT parameter replacement
            DeviceID = str(params['DeviceID'].value)
            params = {
       "DeviceID": {
         "dataType": "String",
         "value": DeviceID
       },
       "PLCDevice": {
         "dataType": "String",
         "value": 'SPBG_049CIP'
       }
     }
            udtConfig['parameters'] = params
            updated += 1
            totalUpdated += 1

# Write once per folder if needed
if updated > 0:
    system.tag.configure(devicesBase, nodes, "m") # ✅ FIXED
    print "Updated", updated, "instances in", folderPath

print "TOTAL PLCDevice updates:", totalUpdated

```
