# OnRamp SDK

The **OnRamp SDK** provides supported libraries for integrating external applications with the **OnRamp platform**.

The SDK allows applications to interact with OnRamp **without requiring direct database access**, enabling integrations for:

- hosted environments
- cloud deployments
- external services
- device integrations

The SDK is distributed via **NuGet** to provide deterministic versioning and controlled upgrades.

---

# Features

Current capabilities include:

- Access to the **OnRamp API**
- Real-time **Shop Monitor events** via WebSockets
- Execution of **registered API queries**
- Event-driven application integrations

Typical integration scenarios include:

- Shop Monitor automation
- Production event processing
- Device integrations
- External analytics
- Cloud-hosted services

---

# Installation

Add the OnRamp SDK NuGet feed:

```bash
dotnet nuget add source https://git.onramp-solutions.com/api/packages/OnRampSDK/nuget/index.json --name onrampsdk
```

After adding the source, packages will appear under:

```
Package Source: onrampsdk
```

Packages can then be installed using standard NuGet workflows.

Example:

```bash
dotnet add package ORPublicApiRefCore
dotnet add package ORSocketsCore
```

---

# Quick Start Example

The following console example demonstrates a basic integration pattern:

1. Connect to the OnRamp API
2. Establish a WebSocket connection
3. Register a Socket ID
4. Receive Shop Monitor events
5. Execute API queries

```vb
Imports System.Threading
Imports ORPublicApiRefCore
Imports ORSocketsCore

Module Program

    Private api As OnRampAPI
    Private socketClient As ORSocketClient
    Private quitEvent As ManualResetEvent = New ManualResetEvent(False)

    Sub Main(args As String())

        ' OnRamp root endpoint
        Dim envUrl As String = "https://onramp.site.com/PROD"

        ' Register for Shop Monitor events
        socketClient = New ORSocketClient(envUrl, "SHOPMONITORCLIENT", "SITE1001")

        AddHandler socketClient.OnMessageReceived, AddressOf SocketMessageRec
        AddHandler socketClient.OnLog, AddressOf SocketLog

        api = New OnRampAPI(envUrl)

        ' API authentication
        api.APILogin("api_user", "api_password")

        WaitForConsoleExit()

    End Sub
```

---

# Shop Monitor Events

Shop Monitor devices send events through a configured **Socket ID**.

To configure a device:

1. Open **S1280 Device Shop Monitor**
2. Set the **Process ID / Socket ID**
3. Use the same ID in the application

Example event types include:

- Work Order Login
- Work Order Logout
- Cycle Start
- Cycle Complete
- Device button events

Incoming WebSocket messages behave similarly to **interrupt events**, allowing applications to respond immediately to shop floor activity.

---

# API Queries

Queries must be registered in:

```
S5011 API Queries
```

Supported query types:

- `SELECT`
- `UPDATE`

In most integrations, **SELECT queries are sufficient**. UPDATE queries should be used cautiously.

---

# Query Parameters

Queries use **Handlebars-style parameters**.

Example:

```sql
SELECT woo_oper, woo_qty_rep
FROM wo_oper
WHERE woo_nbr = '{{p:wonum}}'
```

`p:wonum` is provided by the client application.

---

# Example Query Execution

```vb
Dim args As New Dictionary(Of String, String)
args.Add("wonum", woNum)

Dim rstDataAllOps = api.runQuery("Q-GET-WO-OPS", args)

If rstDataAllOps.RecordCount > 0 Then
    Do Until rstDataAllOps.EOF
        Console.WriteLine(rstDataAllOps("woo_oper") &
                          " - QtyRep:" &
                          rstDataAllOps("woo_qty_rep"))
        rstDataAllOps.MoveNext()
    Loop
End If
```

The returned result set exposes a **recordset-style interface** with:

- `RecordCount`
- `EOF`
- `MoveNext()`
- column access by name

---

# Query Performance Guidelines

For best performance:

- Avoid returning large datasets
- Do not use `SELECT *`
- Specify explicit columns
- Limit queries to only the required data

Recommended:

```sql
SELECT pt_part, pt_desc
FROM pt_mstr
```

Avoid:

```sql
SELECT *
FROM pt_mstr
```

---

# Example Architecture

Typical integrations run as:

- console applications
- background services
- device integration processes

The application:

1. Starts
2. Connects to OnRamp
3. Registers a socket
4. Waits for events
5. Processes events until shutdown

Deployment models include:

- one service handling all devices
- device-specific applications
- event-specific services

---

# Future Expansion

The SDK is designed to support additional integration capabilities including:

- additional event channels
- expanded API functionality
- additional integration services

---

# License

Refer to the repository license for usage terms.
