# Dataset memory tag UDT

**URL:** <https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929>\
**Category:** Ignition\
**Created:** [April 22, 2021, 8:17pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929 "2021-04-22T20:17:28Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 22, 2021, 8:17pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/1 "2021-04-22T20:17:28Z")

</div>

I have created dataset tag (memory) UDTs.  
I want to change dataset inside UDTs rather than instances.

Is there a way I can access this dataset UDT tags in table components.

---

<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:** [April 22, 2021, 8:20pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/2 "2021-04-22T20:20:54Z")

</div>

I don’t think so, but you could always try copying the tag path of the UDT definition tag and try binding that to the table data? I doubt it will work though

How often are you wanting to change the dataset data?

---

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 22, 2021, 8:24pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/3 "2021-04-22T20:24:33Z")

</div>

This dataset will have few information of the OPC tags under same UDT. (eg. min/max, units etc).  
I planning to have screen available for operator to change information, which will be applied to all it’s instances.

I tried to copy path of dataset to table, but instead of giving me whole table its kind of giving me a single value.

 ![Capture](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/0/c01b42259424db867e0e2ee8bba89fb26f6850b2.png)

---

<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:** [April 22, 2021, 8:31pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/4 "2021-04-22T20:31:33Z")

</div>

You’ll most likely need to use the `system.tag.configure` function to pull the info out and import it back in once the user changes the dataset. Although I admit I don’t think I’ve tried it for configuring udt definitions before

If it was me though, I would be using memory tags for each of your properties. They’re far simpler to work with and display, andcyou can configure min, max, display formats etc.

---

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 22, 2021, 10:11pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/5 "2021-04-22T22:11:47Z")

</div>

Thanks @nminchin , I succeeded getting data from UDT but for some reason I’m not able to write on UDT (even without doing changes in tag).  
Following is script I’m using.

import system  
tag = system.tag.getConfiguration(’[default]_types_/ABCD/abcd’,True)  
#tag[0][‘tags’][0][‘value’] = event.source.parent.getComponent(‘Power Table’).data  
collisionPolicy = “o”  
system.tag.configure("[default]_types_", tag,collisionPolicy)

if I change my UDT from Dataset to int, its working fine. But for dataset i’m getting an error.

17:08:17.475 [AWT-EventQueue-0] ERROR Scripting[util\_tag] - Error converting PyTagDictionary to tag edit:  
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: java.lang.Integer. Forgot to register a type adapter?  
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:73)  
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:69)  
at com.inductiveautomation.ignition.common.gson.TypeAdapter$1.write(TypeAdapter.java:191)  
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)  
at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)  
at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)  
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)  
at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)  
at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)  
at com.inductiveautomation.ignition.common.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107)  
at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)  
at com.inductiveautomation.ignition.common.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)  
at com.inductiveautomation.ignition.common.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)  
at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:704)  
at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:683)  
at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:638)  
at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:618)  
at com.inductiveautomation.ignition.common.config.PyTagDictionary.toTagConfiguration(PyTagDictionary.java:122)  
at com.inductiveautomation.ignition.common.config.PyTagDictionary.toTagConfiguration(PyTagDictionary.java:163)  
at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.dictToTagEdits(AbstractTagUtilities.java:191)  
at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.lambda$configure$0(AbstractTagUtilities.java:154)  
at java.base/java.util.stream.ReferencePipeline$7$1.accept(Unknown Source)  
at java.base/java.util.Iterator.forEachRemaining(Unknown Source)  
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)  
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)  
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)  
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)  
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)  
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)  
at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.configure(AbstractTagUtilities.java:154)  
at jdk.internal.reflect.GeneratedMethodAccessor361.invoke(Unknown Source)  
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
at java.base/java.lang.reflect.Method.invoke(Unknown Source)  
at org.python.core.PyReflectedFunction. **call** (PyReflectedFunction.java:188)  
at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. **call** (ScriptManager.java:538)  
at org.python.core.PyObject. **call** (PyObject.java:515)  
at org.python.core.PyObject. **call** (PyObject.java:519)  
at org.python.pycode.\_pyx448.f$0(event:mouseClicked:6)  
at org.python.pycode.\_pyx448.call\_function(event:mouseClicked)  
at org.python.core.PyTableCode.call(PyTableCode.java:171)  
at org.python.core.PyCode.call(PyCode.java:18)  
at org.python.core.Py.runCode(Py.java:1614)  
at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:796)  
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:206)  
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:297)  
at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:57)  
at com.sun.proxy.$Proxy60.mouseClicked(Unknown Source)  
at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)  
at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)  
at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)  
at java.desktop/java.awt.Component.processEvent(Unknown Source)  
at java.desktop/java.awt.Container.processEvent(Unknown Source)  
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)  
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)  
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)  
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)  
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)  
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)  
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)  
at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)  
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)  
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)  
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)  
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)  
at java.base/java.security.AccessController.doPrivileged(Native Method)  
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)  
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)  
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)  
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)  
at java.base/java.security.AccessController.doPrivileged(Native Method)  
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)  
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)  
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

---

<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:** [April 23, 2021, 12:47am UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/6 "2021-04-23T00:47:36Z")

</div>

Can you edit your post and put your code and the error in preformatted blocks? It’s impossible to read otherwise

---

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 23, 2021, 4:16pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/7 "2021-04-23T16:16:18Z")

</div>

```auto
import system
tag = system.tag.getConfiguration('[default]_types_/ABCD/abcd',True)
#tag[0]['tags'][0]['value'] = event.source.parent.getComponent('Power Table').data
collisionPolicy = "o"
system.tag.configure("[default]_types_", tag,collisionPolicy)

#Error 
11:15:49.059 [AWT-EventQueue-0] ERROR Scripting[util_tag] - Error converting PyTagDictionary to tag edit: 
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: java.lang.Integer. Forgot to register a type adapter?
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:73)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:69)
	at com.inductiveautomation.ignition.common.gson.TypeAdapter$1.write(TypeAdapter.java:191)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
	at com.inductiveautomation.ignition.common.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
	at com.inductiveautomation.ignition.common.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107)
	at com.inductiveautomation.ignition.common.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
	at com.inductiveautomation.ignition.common.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
	at com.inductiveautomation.ignition.common.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
	at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:704)
	at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:683)
	at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:638)
	at com.inductiveautomation.ignition.common.gson.Gson.toJson(Gson.java:618)
	at com.inductiveautomation.ignition.common.config.PyTagDictionary.toTagConfiguration(PyTagDictionary.java:122)
	at com.inductiveautomation.ignition.common.config.PyTagDictionary.toTagConfiguration(PyTagDictionary.java:163)
	at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.dictToTagEdits(AbstractTagUtilities.java:191)
	at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.lambda$configure$0(AbstractTagUtilities.java:154)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(Unknown Source)
	at java.base/java.util.Iterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.configure(AbstractTagUtilities.java:154)
	at jdk.internal.reflect.GeneratedMethodAccessor361.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:188)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:538)
	at org.python.core.PyObject. __call__ (PyObject.java:515)
	at org.python.core.PyObject. __call__ (PyObject.java:519)
	at org.python.pycode._pyx535.f$0(<event:mouseClicked>:5)
	at org.python.pycode._pyx535.call_function(<event:mouseClicked>)
	at org.python.core.PyTableCode.call(PyTableCode.java:171)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1614)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:796)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:206)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:297)
	at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:57)
	at com.sun.proxy.$Proxy60.mouseClicked(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

```

@nminchin

---

<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:** [April 23, 2021, 8:25pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/8 "2021-04-23T20:25:06Z")

</div>

Do you know if that error happens on the getConfiguration call or the configure call?  
I’m not at my laptop, but I would do a test to see if I can add a dataset tag manually as a standard tag by constructing it with system.dataset.toDataSet. I’d also check the type of that dataset and compare it to the type of the one in the main code that you’re trying to modify. If the new one works and the types are different, then it sounds like a bug

---

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 24, 2021, 7:02pm UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/9 "2021-04-24T19:02:00Z")

</div>

This error gets on system.tag.configure() script.

Initially, I edited a dataset came from system.tag.getConfiguraion() and write using system.tag.Configuration().

Becouse of the error, next time I tried to write a result without changing dataset, still I got same error.

---

<div class="post-metadata">

**Author:** ![kunal.ghule](https://avatars.discourse-cdn.com/v4/letter/k/5daacb/32.png) [@kunal.ghule](https://forum.inductiveautomation.com/u/kunal.ghule)\
**Post date:** [April 25, 2021, 6:49am UTC](https://forum.inductiveautomation.com/t/dataset-memory-tag-udt/45929/10 "2021-04-25T06:49:19Z")

</div>

Never mind @nminchin,  
With following code, i was able to get result.  
Thank you for help.

```auto
n = event.source.parent.getComponent('Power Table').data

baseTagPath = '[default]_types_/ZoneTypes/Type 1/Details'

tag = [{'tags':[{'dataType':'DataSet',"name":'Parameter' ,'value' : n}]}]

collisionPolicy = "m"
system.tag.configure(baseTagPath, tag, collisionPolicy)
print system.tag.getConfiguration('[default]New Instance',1)

```
