User Interfaces That Integrate with the Data Source

ARDI 2026 added the new Introspection function to the driver framework.

This optional driver feature is used to ask the underlying system for information that would be useful when creating a user-interface. For example, the textcycle driver that replays an Excel spreadsheet full of data uses the Introspection function to return the names of each of the columns in the worksheet.

Our UI can then load these column names into a list - making it easy for users to pick exactly which column to bind their properties to.

Using Introspection Data

You can access Introspection data through the /api/driverintro function. When used on live or historical data, the endpoint takes four parameters…

ParameterMeaning
sourceThe ID of the data source asset
modeIf the data source is live (0) or historical (1)
contextThe context ID (defaults to '1')
queryA query string that is passed on to the driver

When used on event sources, it only has two…

ParameterMeaning
evsourceThe driver ID
queryA query string that is passed on to the driver

The response is in JSON format, although the exact structure of the response depends on the driver itself. The content may be as simple as a list of strings, or it may be a set of complex objects.

Query Parameter

The introspection function has an optional 'query' parameter that can be passed a string. This can be used in several ways…

1) It can provide the point at a hierarchy/relationship structure you want to ask about (to let you browse through hierarchies),

2) It can provide search, allowing you to enter the first few letts of a name,

3) It can provide simple autocomplete functionality, letting you progressively fill in content.

4) By adding special characters, you can request different types of resource (ie. a '' searches for tables, '/views/' looks only for views, and 'mytable.' searches for the fields inside mytable).

5) You can simply ignore it if your data source/UI doesn't need it

Filling a Select Control

As a simple example, here's a drop-list control that we pre-fill with all of the point names that a data-source contains…

<div class="loading">
<span style="color: silver;">
Loading Options...
</span>
</div>
 
<div class="mname" style="display: none;">
<b style="font-weight; bold;">Metric name: </b><br/>
<select style="width: 100%;" id="namecolumn" name="address"></select>
</div>
 
<script>
$.post('<?php echo $siteroot;?>/api/driverintro?source=<?php echo $_REQUEST['source'];?>&mode=<?php echo $_REQUEST['mode'];?>&profile=<?php echo $_REQUEST['profile'];?>',function (d) {
	d.sort();
	var content = "";
	for(var q=0;q<d.length;q++)
	{
		content += '<option>' + d[q] + '</option>';
	}
	$('#namecolumn').html('<option value="">[Choose A Label]</option>' + content);
	$('.mname').fadeIn(500);
	$('.loading').hide(0);
});
</script>

This creates a loading indicator and a drop-list of options.

The droplist is initially hidden. In the background, a call is sent to driverintro that returns a list of strings containing the names of every data point the source contains.

These are sorted, loaded into the droplist, and then the 'loading' indicator is removed and the droplist fades in.