# Adding a default setting to an OPCUA device setting with ' results in crash on module import

**URL:** <https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155>\
**Category:** Module Development\
**Created:** [November 4, 2022, 10:46pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155 "2022-11-04T22:46:53Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Matthew\_Plumb](https://avatars.discourse-cdn.com/v4/letter/m/aca169/32.png) [@Matthew\_Plumb](https://forum.inductiveautomation.com/u/Matthew_Plumb)\
**Post date:** [November 4, 2022, 10:46pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/1 "2022-11-04T22:46:53Z")

</div>

Hello,

I am creating a new OPCUA device module using the SDK. I would like to add a device setting which is the default datetime format to use when parsing timestamps.

Within the DeviceSettings class that extends PersistentRecord I have the following code:

static {  
EVENT\_TIME\_FIELD\_FORMAT.setDefault("yyyy-MM-dd'T'HH:mm:ss.SSSSSSX");  
}

This corresponds to the required string that the DateTimeFormatter in Java needs to represent a literal T in the middle of the string.

Unfortunately this causes a crash on module load due to SQLite not being able to parse and store this.

I can change ' to '' but this has the effect as appearing as '' in my default within configuration page.

Is there anyway around this? Error seen on gateway on import of module is shown below.

Thanks!!

Matt

org.sqlite.SQLiteException: [SQLITE\_ERROR] SQL error or missing database (near "T": syntax error)  
at org.sqlite.core.DB.newSQLException(DB.java:909)  
at org.sqlite.core.DB.newSQLException(DB.java:921)  
at org.sqlite.core.DB.throwex(DB.java:886)  
at org.sqlite.core.NativeDB.\_exec\_utf8(Native Method)  
at org.sqlite.core.NativeDB.\_exec(NativeDB.java:87)  
at org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116)  
at com.inductiveautomation.ignition.gateway.localdb.DelegatingDataSource$DelegatingConnection$DelegatingStatement.executeUpdate(DelegatingDataSource.java:421)  
at com.inductiveautomation.ignition.gateway.localdb.AbstractDBInterface.runUpdateQuery(AbstractDBInterface.java:222)  
at com.inductiveautomation.ignition.gateway.localdb.LocalDBManagerImpl$SingleConnectionDBInterface.runUpdateQuery(LocalDBManagerImpl.java:748)  
at com.inductiveautomation.ignition.gateway.localdb.LocalDBManagerImpl.updatePersistentRecords(LocalDBManagerImpl.java:549)  
at com.inductiveautomation.ignition.gateway.localdb.LocalDBManagerImpl.updatePersistentRecords(LocalDBManagerImpl.java:466)  
at com.inductiveautomation.ignition.gateway.localdb.LocalDBManagerImpl.updatePersistentRecords(LocalDBManagerImpl.java:455)  
at com.inductiveautomation.ignition.gateway.opcua.server.DeviceManager.registerDeviceType(DeviceManager.kt:146)  
at com.inductiveautomation.ignition.gateway.opcua.OpcUaExtensionManager.registerDeviceType(OpcUaExtensionManager.kt:35)  
at com.inductiveautomation.ignition.gateway.opcua.server.api.AbstractDeviceModuleHook.serviceReady(AbstractDeviceModuleHook.kt:50)  
at com.inductiveautomation.ignition.gateway.services.ModuleServicesManagerImpl.subscribe(ModuleServicesManagerImpl.java:96)  
at com.inductiveautomation.ignition.gateway.opcua.server.api.AbstractDeviceModuleHook.startup(AbstractDeviceModuleHook.kt:37)  
at com.accenture.kafka\_opcua\_device.ModuleHook.startup(ModuleHook.java:50)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$LoadedModule.startup(ModuleManagerImpl.java:2433)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startupModule(ModuleManagerImpl.java:1226)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$2.call(ModuleManagerImpl.java:771)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.executeModuleOperation(ModuleManagerImpl.java:947)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.installModuleInternal(ModuleManagerImpl.java:737)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$InstallCommand.execute(ModuleManagerImpl.java:1903)  
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$Receiver.receiveCall(ModuleManagerImpl.java:1856)  
at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)  
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:930)  
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1005)  
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:538)  
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)  
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)  
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)  
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)  
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)  
at java.base/java.lang.Thread.run(Unknown Source)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 4, 2022, 10:58pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/2 "2022-11-04T22:58:40Z")

</div>

> [@Matthew\_Plumb](#):
>
> EVENT\_TIME\_FIELD\_FORMAT

What type of field is this? I can't make any sense of this error alone, need more details about what's going on here.

---

<div class="post-metadata">

**Author:** ![Matthew\_Plumb](https://avatars.discourse-cdn.com/v4/letter/m/aca169/32.png) [@Matthew\_Plumb](https://forum.inductiveautomation.com/u/Matthew_Plumb)\
**Post date:** [November 4, 2022, 11:02pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/3 "2022-11-04T23:02:19Z")

</div>

Right. Sorry about that.  
/\*\*  
Event Time Field Format is a date time formatting string of how it is expected the timestamp will appear in the messages.  
\*/  
public static final StringField EVENT\_TIME\_FIELD\_FORMAT = new StringField(META, "EventTimeFieldFormat");

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

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 4, 2022, 11:06pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/4 "2022-11-04T23:06:23Z")

</div>

Huh. This just looks like a bug in the simple ORM system behind the settings records... it's just not sanitizing that String before running the query.

---

<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:** [November 4, 2022, 11:07pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/5 "2022-11-04T23:07:53Z")

</div>

Yeah... you might be able to hand-escape it? Maybe wrap the whole thing in `'`? Or add (doubled?) backslashes before your single quotes?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [November 4, 2022, 11:08pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/6 "2022-11-04T23:08:04Z")

</div>

I think this might work?

```auto
EVENT_TIME_FIELD_FORMAT.setDefault("yyyy-MM-dd''T''HH:mm:ss.SSSSSSX");

```

edit: meh, no, that shows up on the page and in the field value... try one of Paul's.

---

<div class="post-metadata">

**Author:** ![Matthew\_Plumb](https://avatars.discourse-cdn.com/v4/letter/m/aca169/32.png) [@Matthew\_Plumb](https://forum.inductiveautomation.com/u/Matthew_Plumb)\
**Post date:** [November 4, 2022, 11:10pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/7 "2022-11-04T23:10:30Z")

</div>

Using ''T'' results in

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/0/90383ec08d610b607317b5f06f683716b1cf16e1.png)

---

<div class="post-metadata">

**Author:** ![Matthew\_Plumb](https://avatars.discourse-cdn.com/v4/letter/m/aca169/32.png) [@Matthew\_Plumb](https://forum.inductiveautomation.com/u/Matthew_Plumb)\
**Post date:** [November 4, 2022, 11:18pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/8 "2022-11-04T23:18:10Z")

</div>

Using \\'T\\' results in

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

---

<div class="post-metadata">

**Author:** ![Matthew\_Plumb](https://avatars.discourse-cdn.com/v4/letter/m/aca169/32.png) [@Matthew\_Plumb](https://forum.inductiveautomation.com/u/Matthew_Plumb)\
**Post date:** [November 4, 2022, 11:22pm UTC](https://forum.inductiveautomation.com/t/adding-a-default-setting-to-an-opcua-device-setting-with-results-in-crash-on-module-import/66155/9 "2022-11-04T23:22:19Z")

</div>

Looks like this is the one:  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/5/85f180082793a32848e99a73b87ab8bc34971bcd.png)

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

Appreciate everyone's help!!
