Build a third-party .NET module that appears as a native TagProvider in the Unified Namespace.
Reference → Code → Extensions API → Extension Module API Reference
Overview
An Extension Module is a custom .NET assembly that FrameworX loads as a TagProvider, so a third-party system (analytics, AI, cloud service, custom logic) is browsable and read/write directly inside the Unified Namespace — no external gateway process. It is declared by a manifest whose <TagProvider> element carries IsExtensionModule="True".
The official starting point is the UnsModuleSample project shipped in the TagProviderTemplateAdvanced reference. A second project in the same reference, UnsTagDiscoverySample, demonstrates the Discovery pattern and historian access.
If you need to access this API, contact us through support@tatsoft.com.
| Table of Contents | ||||
|---|---|---|---|---|
|
Anatomy
File | Role |
|---|---|
| Manifest. Declares the provider and generates the configuration UI. |
| Static entry-point class. The methods the host calls, plus the delegate fields the host injects. |
| Per-instance worker holding the namespace and value cache. |
| One node: Name, TypeName, Min, Max, EngUnits, Description, Value, Quality, UtcTimestamp. |
Manifest
The <TagProvider> element identifies the provider type; IsExtensionModule="True" is what makes it an Extension Module. The <Station><Custom> block defines the positional, semicolon-separated configuration fields shown in the Designer.
Entry-point methods (host → module)
Method | Role |
|---|---|
| Split the station string into a dictionary. |
| Connection lifecycle. |
| Return the type of a node. |
| Browse the tree; returns a DataTable (schema below). |
| Register / unregister a node and its metadata. |
| Batch read: returns a bool[] plus out values, qualities, UTC timestamps. |
| Write a value to a node. |
| Optional lifecycle hooks (empty stubs in the template). |
Host callbacks (module → host)
Delegate | Role |
|---|---|
| Read / write FrameworX tags from inside the module. |
| Emit trace through the host pipeline. |
GetChildrenElements DataTable schema
Fixed columns: Name, IsAttribute, HasChildren, HasAttributes, HasHistorian, Value, TimeStamp when includeValue, Type, Error, IsExcluded, IsHidden, IsDeleted, Separator. A branch row sets IsAttribute=false, HasChildren=true, Type="Object". A leaf row sets IsAttribute=true, Type to the node type, and fills Value/TimeStamp.
Data types
Node types use the FrameworX-internal vocabulary: Integer, Double, Text, Digital (also available: Float, Long, Short, Byte, DateTime, TextArray, Folder).
Getting started
- Copy the
UnsModuleSampleproject as a starting point. - Edit the manifest: set
AssemblyName,DefaultName, and the<Station>configuration fields. - Implement the namespace in
ConnectInfoand the entry-point methods inUtil. - Build the class library (netstandard2.0) and place the DLL plus its
.config.xmlin the FrameworXBin/Protocolsfolder. - In the Designer, open Unified Namespace > Tag Provider Services, click Add > Extension Module, select your module, and link it to a folder in the Asset Tree.