Change in 8.1.13 for writing to Dataset Tag types with writeBlocking

I’ve just updated to 8.1.13 and it seems to handle writing to Dataset tag types differently than previously and I am wondering if its a bug or perhaps me utilizing a bad practice.

Previously I created a dataset in a script by using system.dataset.toDataSet(headers,data) and then I could use writeBlocking to set that value into a Dataset tag. Now, however, I get the following error: Error_TypeConversion(“class java.util.UUID: Invalid DataType for Dataset.”).

I also tried converting it to a PyDataset as well, but got the same error. What has changed?

Writing datasets that contained non-serializable data, such as a UUID in your case, caused errors in tags on subsequent restarts. There’s now a check to prevent anything but a small whitelist of safe classes that can be serialized from being stored into a tag.

What would the best practice be then? Read from a dataset tag, modify and then write using that modified dataset?

The problem isn’t the method you’re using to do it, it’s that the data you’re trying to store isn’t allowed.

How or you creating/getting data for the dataset that has a java.util.UUID in it?

Ahh, got it thanks!

Hi Kevin,

that leads to the question:
Ist the list of allowed classes available somewhere?

I want to save the users modifications to a powertable configuration in a tag.
I tried to do itby writing the columnAttributesData into a dataset, which does not work…

Sincerely Alexej

This is the list, which for the most part just reflects the classes that back tag datatypes:

        public static final Set<Class<?>> STORABLE_TYPES = Set.of(
            Date.class,
            String.class,
            Integer.class,
            int.class,
            Long.class,
            long.class,
            Short.class,
            short.class,
            Float.class,
            float.class,
            Double.class,
            double.class,
            Boolean.class,
            boolean.class,
            Color.class,
            Timestamp.class,
            Byte.class,
            byte.class,
            Character.class,
            char.class
        );

Hmm,

thanks for the quick reply.

From what I can detect immediately, there is nothing in my dataset not fitting.

headers:
name, dateFormat, editable, filterable, hidden, horizontalAlignment, label, locale, numberFormat, prefix, sortable, suffix, treatAsBoolean, verticalAlignment, wrapText,

Column data:
Kst., dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , True, , False, 0, False,
Art, dd.MM.yyyy HH:mm, False, False, True, -9, , en, 0, , True, , False, 0, False,
Start, dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , True, , False, 0, False,
Mode, dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , True, , False, 0, False,
Dauer, dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , False, , False, 0, False,
Auftrag, dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , True, , False, 0, False,
ID, dd.MM.yyyy HH:mm, False, False, True, -9, , None, 0, , True, , False, 0, False,
Ende, dd.MM.yyyy HH:mm, False, False, False, -9, , en, 0, , True, , False, 0, False,
sid, dd.MM.yyyy HH:mm, False, False, True, -9, , None, 0, , True, , False, 0, False,

STR , STR, BOOL, BOOL, BOOL, INT, STR, STR, STR, STR, BOOL, STR, BOOL, INT, BOOL

Is it possible to type-define the columns in the dataset?

Alexej

Is it a problem of some value in some cell or of the dataset as a whole?

CompletionException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: TagProviderRpc.write: Argument class not valid.
caused by GatewayException: TagProviderRpc.write: Argument class not valid.
caused by ClassNotFoundException: com.inductiveautomation.factorypmi.application.components.table.ColumnAttributesDataSet

Alexej

Seems to be the Locale …