Complete Integration Example
- Last UpdatedJul 27, 2026
- 3 minute read
- Engineering
- Integration Service 4.1
- Integrators
Here's a comprehensive example showing how to initialize and use multiple clients:
using AVEVA.IntegrationService.DataAPI.SDK;
using AVEVA.IntegrationService.DataAPI.SDK.ApiClient;
using AVEVA.IntegrationService.DataAPI.SDK.Models;
using System;
using System.Data;
using System.Threading.Tasks;
namespace DataAPIExample
{
class Program
{
static async Task Main(string[] args)
{
// Configuration
string host = "https://your-server/integration/v1";
string accessToken = "your-access-token";
int waitingTime = 60;
// Determine authentication type
var authType = !string.IsNullOrEmpty(accessToken)
? AuthenticationType.Connect
: AuthenticationType.NTLM;
// Example 1: Health Check
Console.WriteLine("=== Health Check ===");
var healthCheckFactory = new HealthCheckClientFactory();
var healthClient = healthCheckFactory.CreateHealthCheckClient(host);
var healthStatus = await healthClient.HealthCheckAPI(host);
Console.WriteLine($"API Health: {healthStatus}");
if (healthStatus != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("API is not healthy. Exiting...");
return;
}
// Example 2: Engineering Client
Console.WriteLine("\n=== Engineering Client ===");
var engineeringClient = DataApiClientFactory.CreateDataApiClient<EngineeringClient>(
host, authType, waitingTime, accessToken, null);
var dataSources = await engineeringClient.GetDataSources();
Console.WriteLine($"Found {dataSources.Count()} engineering datasources");
var objectInfo = await engineeringClient.GetObjectInfo(
"EngineeringDS",
"/SITE,/ZONE"
);
Console.WriteLine($"Retrieved {objectInfo.Rows.Count} engineering objects");
// Example 3: Excel Client
Console.WriteLine("\n=== Excel Client ===");
var excelClient = DataApiClientFactory.CreateDataApiClient<ExcelClient>(
host, authType, waitingTime, accessToken, null);
var excelFiles = await excelClient.GetExcels("ExcelDS", liveData: true);
foreach (var excel in excelFiles)
{
Console.WriteLine($"Excel: {excel.Name}");
}
var excelData = await excelClient.GetExcelData("ExcelDS", "Report.xlsx", liveData: true);
Console.WriteLine($"Excel data contains {excelData.Tables.Count} sheets");
// Example 4: Simulation Client
Console.WriteLine("\n=== Simulation Client ===");
var simulationClient = DataApiClientFactory.CreateDataApiClient<SimulationClient>(
host, authType, waitingTime, accessToken, null);
var simulations = await simulationClient.GetSimCentralSimulations("SimDS");
foreach (var sim in simulations)
{
Console.WriteLine($"Simulation: {sim.Name}");
var snapshots = await simulationClient.GetSimCentralSnapshots("SimDS", sim.Name);
Console.WriteLine($" Snapshots: {snapshots.Count}");
if (snapshots.Count > 0)
{
var schema = await simulationClient.GetSimCentralSchema("SimDS", sim.Name, snapshots[0]);
Console.WriteLine($" Schema tables: {schema.Tables.Count}");
}
}
// Example 5: SQL Client
Console.WriteLine("\n=== SQL Client ===");
var sqlClient = DataApiClientFactory.CreateDataApiClient<SqlClient>(
host, authType, waitingTime, accessToken, null);
var tables = await sqlClient.GetTables("SQLDS");
Console.WriteLine($"Found {tables.Rows.Count} SQL tables");
var employeeData = await sqlClient.GetTableData(
"SQLDS",
"Employees",
filter: "Department eq 'Engineering'"
);
Console.WriteLine($"Retrieved {employeeData.Rows.Count} employees");
// Example 6: ETAP Client
Console.WriteLine("\n=== ETAP Client ===");
var etapClient = DataApiClientFactory.CreateDataApiClient<ETAPClient>(
host, authType, waitingTime, accessToken, null);
var etapSchema = await etapClient.GetEtapSchema("ETAPDS");
Console.WriteLine($"ETAP Schema tables: {etapSchema.Tables.Count}");
var etapData = await etapClient.GetEtapData("ETAPDS");
Console.WriteLine($"ETAP Data tables: {etapData.Tables.Count}");
// Example 7: ERM Client
Console.WriteLine("\n=== ERM Client ===");
var ermClient = DataApiClientFactory.CreateDataApiClient<ERMClient>(
host, authType, waitingTime, accessToken, null);
var equipmentData = await ermClient.GetTableData("ERMDS", "Equipment");
Console.WriteLine($"Retrieved {equipmentData.Rows.Count} equipment records");
// Example 8: SignalR Pub/Sub
Console.WriteLine("\n=== SignalR Pub/Sub ===");
if (authType == AuthenticationType.Connect)
{
var signalRClient = await SignalRHubConnectionFactory.CreatePubSubClient(
HttpClientUtilities.GetHttpClientFactory(),
new HubConnectionManager(),
AuthenticationType.Connect,
host,
accessToken
);
signalRClient.MessagePublished += (sender, e) =>
{
Console.WriteLine($"Message received: AckId={e.Message.AckId}");
};
await signalRClient.Subscribe("EngineeringDS");
Console.WriteLine("Subscribed to EngineeringDS");
// Wait a bit to receive messages
await Task.Delay(2000);
// Unsubscribe
await signalRClient.Unsubscribe("EngineeringDS");
Console.WriteLine("Unsubscribed from EngineeringDS");
}
// Example 9: Post Data
Console.WriteLine("\n=== Post Data ===");
DataTable newData = new DataTable("Projects");
newData.Columns.Add("ProjectID", typeof(string));
newData.Columns.Add("Name", typeof(string));
newData.Columns.Add("Budget", typeof(decimal));
newData.Rows.Add("PRJ001", "New Project", 1000000.00);
var postResult = await sqlClient.PostTableData(
datasourceName: "SQLDS",
tableName: "Projects",
data: newData,
AckId: "",
Context: "{\"Operation\":\"Insert\"}",
Topic: "ProjectUpdates",
expiryDuration: 48
);
Console.WriteLine($"Posted data with AckId: {postResult.AcknowledgementId}");
// Example 10: Retrieve posted data by AckId
Console.WriteLine("\n=== Retrieve by AckId ===");
var retrievedData = await sqlClient.GetTableDataByAcknowledgementId(
"SQLDS",
postResult.AcknowledgementId
);
Console.WriteLine($"Retrieved {retrievedData.Rows.Count} rows from acknowledgement");
Console.WriteLine("\n=== Completed all operations ===");
}
}
}
Real-World Windows Forms Example
Based on the WinFormSample project pattern:
using AVEVA.IntegrationService.DataAPI.SDK;
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
public partial class DataSourceForm : Form
{
private string _host = "https://your-server/integration/v1";
private string _connectToken = "your-token"; // or null/empty for NTLM
public DataSourceForm()
{
InitializeComponent();
}
private async void btnGetDataSources_Click(object sender, EventArgs e)
{
try
{
lblStatus.Text = "Loading...";
var client = DataApiClientFactory.CreateDataApiClient<EngineeringClient>(
host: _host,
authType: !string.IsNullOrEmpty(_connectToken)
? AuthenticationType.Connect
: AuthenticationType.NTLM,
waitingTimeInMinutesForLiveData: 60,
token: _connectToken,
hubCancellationToken: null
);
var dataSources = await client.GetDataSources();
dataGridView1.DataSource = dataSources;
lblStatus.Text = $"Loaded {dataSources.Count()} datasources";
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
lblStatus.Text = "Error occurred";
}
}
private async void btnGetTables_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtDataSourceName.Text))
{
MessageBox.Show("Please enter a datasource name");
return;
}
lblStatus.Text = "Loading tables...";
var client = DataApiClientFactory.CreateDataApiClient<EngineeringClient>(
_host,
!string.IsNullOrEmpty(_connectToken)
? AuthenticationType.Connect
: AuthenticationType.NTLM,
60,
_connectToken,
null
);
var tables = await client.GetTables(txtDataSourceName.Text);
dataGridView1.DataSource = tables;
lblStatus.Text = $"Loaded {tables.Rows.Count} tables";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
lblStatus.Text = "Error occurred";
}
}
private async void btnGetTableData_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtDataSourceName.Text) ||
string.IsNullOrEmpty(txtTableName.Text))
{
MessageBox.Show("Please enter datasource and table names");
return;
}
lblStatus.Text = "Loading data...";
var client = DataApiClientFactory.CreateDataApiClient<EngineeringClient>(
_host,
!string.IsNullOrEmpty(_connectToken)
? AuthenticationType.Connect
: AuthenticationType.NTLM,
60,
_connectToken,
null
);
var data = await client.GetTableData(
txtDataSourceName.Text,
txtTableName.Text
);
dataGridView1.DataSource = data;
lblStatus.Text = $"Loaded {data.Rows.Count} rows";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
lblStatus.Text = "Error occurred";
}
}
}