# Tags related changes from Ignition 7.9 to 8.1

**URL:** <https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587>\
**Category:** Module Development\
**Tags:** ignition79, ignition80, ignition81\
**Created:** [February 1, 2022, 7:35am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587 "2022-02-01T07:35:41Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hello\_world007](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@Hello\_world007](https://forum.inductiveautomation.com/u/Hello_world007)\
**Post date:** [February 1, 2022, 7:35am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/1 "2022-02-01T07:35:41Z")

</div>

Hi Team,

We have few custom modules in Ignition 7.9. We are working on migrating those to Ignition 8.1. In our modules we are using couple of tags related interfaces and classes such as,

com.inductiveautomation.ignition.gateway.sqltags.SQLTagsManager  
com.inductiveautomation.ignition.gateway.sqltags.TagProvider  
com.inductiveautomation.ignition.gateway.sqltags.simple.SimpleTagProvider  
com.inductiveautomation.ignition.gateway.sqltags.simple.WriteHandler

I don’t see these classes/interfaces in Ignition 8.1. Could you please help me with guiding how we can migrate these to 8.1. Also could you please guide me with some documentations available (if any) related to the changes, so that I getter a better understanding about it as I’m pretty new to Ignition as well.

---

<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:** [February 1, 2022, 4:49pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/2 "2022-02-01T16:49:07Z")

</div>

(I’m not an expert in either the old or the new tag system)

You will hopefully be able to switch to the new `ManagedTagProvider` concept; it’s a simpler scaffolding that helps with setting up the basic idea of “Java code that provides Ignition tags”.

I’d start from the SDK example and work from there:

> **[ignition-sdk-examples/managed-tag-provider at master ·...](https://github.com/inductiveautomation/ignition-sdk-examples/tree/master/managed-tag-provider)**
>
> master/managed-tag-provider

As a general rule: Anything under the `sqltags` package is deprecated or outright removed.

---

<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:** [February 1, 2022, 4:53pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/3 "2022-02-01T16:53:06Z")

</div>

> [@paul-griffith](#):
>
> As a general rule: Anything under the `sqltags` package is deprecated or outright removed.

Look to the `tags` package for replacements. The `sqltags` package hangs around for weird backwards-compat reasons.

---

<div class="post-metadata">

**Author:** ![Hello\_world007](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@Hello\_world007](https://forum.inductiveautomation.com/u/Hello_world007)\
**Post date:** [February 8, 2022, 6:57am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/4 "2022-02-08T06:57:37Z")

</div>

Thanks for your reply @paul-griffith and @Kevin.Herron. I have gone through the sdk-example shared above. Although some of my queries got resolved, there are still couple of them. So wanted to check if there are any documentation/release notes around how the functionalities provided in 7.9 could be achieved in 8.0/8.1 ?

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [February 8, 2022, 10:28am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/5 "2022-02-08T10:28:15Z")

</div>

Subscription related classes and interfaces are also missing in 8.1 which are present in 7.9 sdk  
Can anyone help me finding the alternatives/ upgraded classes for below.

com.inductiveautomation.ignition.gateway.opc.Subscription  
com.inductiveautomation.ignition.gateway.opc.SubscriptionChangeEvent  
com.inductiveautomation.ignition.gateway.opc.SubscriptionChangeListener  
com.inductiveautomation.ignition.gateway.opc.SubscriptionModel

Thanks

---

<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:** [February 8, 2022, 1:16pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/6 "2022-02-08T13:16:20Z")

</div>

For my Modbus module’s abstract driver, the v7.9 imports look like this:

```auto
import com.codahale.metrics.Snapshot;
import com.codahale.metrics.UniformSnapshot;
import com.inductiveautomation.ignition.common.execution.TPC;
import com.inductiveautomation.ignition.common.logging.MDCUtils;
import com.inductiveautomation.ignition.common.util.LogUtil;
import com.inductiveautomation.ignition.common.util.LoggerEx;
import com.inductiveautomation.opcua.nodes.Node;
import com.inductiveautomation.opcua.nodes.NodeManager;
import com.inductiveautomation.opcua.nodes.builders.NodeBuilderFactory;
import com.inductiveautomation.opcua.types.AccessLevel;
import com.inductiveautomation.opcua.types.DataType;
import com.inductiveautomation.opcua.types.DataValue;
import com.inductiveautomation.opcua.types.Guid;
import com.inductiveautomation.opcua.types.LocalizedText;
import com.inductiveautomation.opcua.types.NodeId;
import com.inductiveautomation.opcua.types.QualifiedName;
import com.inductiveautomation.opcua.types.StatusCode;
import com.inductiveautomation.opcua.types.UByte;
import com.inductiveautomation.opcua.types.UInt16;
import com.inductiveautomation.opcua.types.UInt32;
import com.inductiveautomation.opcua.types.Variant;
import com.inductiveautomation.opcua.util.NodeIds;
import com.inductiveautomation.xopc.driver.api.BrowseOperation;
import com.inductiveautomation.xopc.driver.api.Driver;
import com.inductiveautomation.xopc.driver.api.DriverContext;
import com.inductiveautomation.xopc.driver.api.DriverMetrics;
import com.inductiveautomation.xopc.driver.api.DriverMetrics.AggregateStats;
import com.inductiveautomation.xopc.driver.api.DriverMetrics.RateStats;
import com.inductiveautomation.xopc.driver.api.DriverSubscriptionModel;
import com.inductiveautomation.xopc.driver.api.DriverSubscriptionModel.ModelChangeListener;
import com.inductiveautomation.xopc.driver.api.items.ReadItem;
import com.inductiveautomation.xopc.driver.api.items.SubscriptionItem;
import com.inductiveautomation.xopc.driver.api.items.WriteItem;

```

That driver’s conversion to v8.1 has these imports:

```auto
import com.codahale.metrics.Snapshot;
import com.codahale.metrics.UniformSnapshot;
import com.inductiveautomation.ignition.common.execution.TPC;
import com.inductiveautomation.ignition.common.logging.MDCUtils;
import com.inductiveautomation.ignition.common.util.LogUtil;
import com.inductiveautomation.ignition.common.util.LoggerEx;
import com.inductiveautomation.xopc.driver.api.BrowseOperation;
import com.inductiveautomation.xopc.driver.api.Driver;
import com.inductiveautomation.xopc.driver.api.DriverContext;
import com.inductiveautomation.xopc.driver.api.DriverSubscriptionModel;
import com.inductiveautomation.xopc.driver.api.DriverSubscriptionModel.ModelChangeListener;
import com.inductiveautomation.xopc.driver.api.PollingMetrics;
import com.inductiveautomation.xopc.driver.api.PollingMetrics.AggregateStats;
import com.inductiveautomation.xopc.driver.api.PollingMetrics.RateStats;
import com.inductiveautomation.xopc.driver.api.items.ReadItem;
import com.inductiveautomation.xopc.driver.api.items.SubscriptionItem;
import com.inductiveautomation.xopc.driver.api.items.WriteItem;
import org.eclipse.milo.opcua.sdk.core.AccessLevel;
import org.eclipse.milo.opcua.sdk.server.api.NodeManager;
import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
import org.eclipse.milo.opcua.sdk.server.nodes.UaNode;
import org.eclipse.milo.opcua.sdk.server.nodes.UaNodeContext;
import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode;
import org.eclipse.milo.opcua.stack.core.Identifiers;
import org.eclipse.milo.opcua.stack.core.StatusCodes;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.DateTime;
import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UByte;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.ULong;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
import org.eclipse.milo.opcua.stack.core.util.TypeUtil;

```

That should get you started.

---

<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:** [February 8, 2022, 1:57pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/7 "2022-02-08T13:57:09Z")

</div>

> [@Rahul\_k](#):
>
> Subscription related classes and interfaces are also missing in 8.1 which are present in 7.9 sdk  
> Can anyone help me finding the alternatives/ upgraded classes for below.
> 
> com.inductiveautomation.ignition.gateway.opc.Subscription  
> com.inductiveautomation.ignition.gateway.opc.SubscriptionChangeEvent  
> com.inductiveautomation.ignition.gateway.opc.SubscriptionChangeListener  
> com.inductiveautomation.ignition.gateway.opc.SubscriptionModel

Same package, the related classes are probably:

- `com.inductiveautomation.ignition.gateway.opc.OpcConnection`
- `com.inductiveautomation.ignition.gateway.opc.OpcConnectionManager`
- `com.inductiveautomation.ignition.gateway.opc.OpcSubscription`
- `com.inductiveautomation.ignition.gateway.opc.OpcSubscriptionModel`
- `com.inductiveautomation.ignition.gateway.opc.OpcSubscriptionModel.ModelChangeListener`

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [February 8, 2022, 4:39pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/8 "2022-02-08T16:39:50Z")

</div>

Thanks @Kevin.Herron

I will look more into `OpcSubscription, OpcSubscriptionModel, OpcSubscriptionModel.ModelChangeListener` to achieve same functionality with above classes in v7.9

---

<div class="post-metadata">

**Author:** ![Hello\_world007](https://avatars.discourse-cdn.com/v4/letter/h/77aa72/32.png) [@Hello\_world007](https://forum.inductiveautomation.com/u/Hello_world007)\
**Post date:** [February 15, 2022, 4:33pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/9 "2022-02-15T16:33:22Z")

</div>

Hi @Kevin.Herron, we also have few use case around subscriptions.

1. We are using `subscriptionModel.getSubscriptions(name)` to get all the subscriptions on a given server name. Could you please suggest how we can achieve the same in Ignition 8.1?
2. We are using [getRate()](http://files.inductiveautomation.com/sdk/javadoc/ignition79/795/com/inductiveautomation/ignition/gateway/opc/Subscription.html#getRate--) of Subscriptions, but in Ignition 8.1 I don’t see rate. Can you also provide some inputs here as in how we can get around this in Ignition 8.1.

---

<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:** [February 15, 2022, 4:39pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/10 "2022-02-15T16:39:55Z")

</div>

It doesn’t look like there is equivalent functionality.

Instead, you’d have to register a `ModelChangeListener` via `OpcSubscriptionModel::addModelChangeListener` and keep track of subscriptions you are interested in yourself.

The `PropertySet` object that `onSubscriptionCreated` and `onSubscriptionModified` get called with will contain a value for the rate under the key “opcRate”, or alternatively you can use the static field `OpcTagGroupProperties.OpcRateMS`.

I don’t really see any way to get the `OpcSubscription` objects that don’t belong to you any more.

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [May 11, 2022, 7:26am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/12 "2022-05-11T07:26:42Z")

</div>

Thanks for sharing.

But I am still getting error when I try to import `xopc.driver.api` classes usig Ingnitionv8.

```auto
java:5: error: package com.inductiveautomation.xopc.driver.api does not exist
    [javac] import com.inductiveautomation.xopc.driver.api.DriverState;

```

How can I import xopc.driver.api classes in latest Ignition version ?

---

<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:** [May 11, 2022, 11:26am UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/13 "2022-05-11T11:26:59Z")

</div>

Some classes no longer exist. Refactor your code to not need them. Use the examples repo on github to review what might be appropriate.

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [September 15, 2022, 7:16pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/14 "2022-09-15T19:16:28Z")

</div>

Hi

I have question related to OPC connection.

I have upgraded SROPCServer with OPCConnection as part of upgrade to v8. But I don’t see the verifyConnectionState method which is invoked by regardless of server state.

In v7.9, we override this method to verify connection state and re-connect if it is faulted. Do we have a similar method to override in v8.1 or should we write custom implementation to invoke that method at regular interval.

VerifyConnectonState Method in SROPCServer : [SROPCServer (ignition 7.9.5 API)](http://files.inductiveautomation.com/sdk/javadoc/ignition79/795/com/inductiveautomation/ignition/gateway/opc/SROPCServer.html#verifyConnectionState--)

---

<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:** [September 15, 2022, 7:17pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/15 "2022-09-15T19:17:45Z")

</div>

There is no similar replacement method, connections need to be responsible for detecting connection loss and reconnecting on their own.

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [September 15, 2022, 7:34pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/16 "2022-09-15T19:34:10Z")

</div>

Thanks for the quick response.

---

<div class="post-metadata">

**Author:** ![Rahul\_k](https://avatars.discourse-cdn.com/v4/letter/r/b9e5f3/32.png) [@Rahul\_k](https://forum.inductiveautomation.com/u/Rahul_k)\
**Post date:** [September 20, 2022, 4:41pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/17 "2022-09-20T16:41:12Z")

</div>

I want to simulate exact behavior in 8.1 and want to invoke `VerifyConnection()` at regular interval just like how it is being done in v7.9 SROPCServer related APIs. Could you please share some low level details on how it is being invoked in v7.9.

---

<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:** [September 20, 2022, 4:58pm UTC](https://forum.inductiveautomation.com/t/tags-related-changes-from-ignition-7-9-to-8-1/55587/18 "2022-09-20T16:58:03Z")

</div>

It’s just a periodic task that calls `SROPCServer::verifyConnectionState` every 5 seconds on all connections that aren’t disabled. There’s nothing more to it.
