Tracking
A historical, searchable view of every step of every integration that has run on the platform, a capability no other middleware, BizTalk included, offers. Set the level once on the Application to record full step-by-step detail, then query it from a single screen.
Tracking is what makes a finished run inspectable. The runtime always keeps a thin internal record of in-flight messages so a suspended run can be resumed, a running run can be observed, and an errored run shows up where you would expect, that lightweight travel is independent of Tracking and is always on. Tracking is the historical layer on top of it: configured on the Application, opt-in, and once enabled it persists the full step-by-step record of each run for later search and analysis. That record is durable, not permanent. Two things end it: the retention window, which prunes runs once they age past it, and deleting the Application that owns the ports, which takes all of its tracking data with it.
Tracking is configured on the Application, in the Tracking dropdown on the Application dialog, alongside the Application’s Name, Namespace, and Description. One setting, with three values ordered from lightest to most detailed, governs every port that Application owns. A port editor has no tracking field:
| Level | What is recorded |
|---|---|
| Only on Error | Nothing is written for successful runs. On failure, the full step history is persisted including the message body at each step, there is no separate Only on Error + Body level; failure recording always includes the body. Cheapest level when failures are rare. |
| Enabled | Every run through any of the Application’s ports is recorded, timestamps, step identifiers, message type, adapter. Message bodies are not stored. |
| Enabled + Body | Every run is recorded, including the full message body at each step. Most diagnostic, most expensive in storage. |
Where to change it. Open the Application, and the Tracking dropdown is the third field on the Application dialog. Pick a level and Save, and it governs every one of the Application’s ports. There is no Tracking field in the port editor. See Applications for the rest of the dialog and for what else the Application governs.
Tracking is filtered by the Selected Application. With a Selected Application set, every count and every row on the Tracking screen is restricted to that Application. With no Selected Application, the screen spans every Application the user has access to. The behaviour matches every other artifact list in the platform.
The filter reflects something stronger than a view preference: a tracked run belongs to the Application whose ports recorded it, the same way a port or a map belongs to it. That ownership is what makes the lifecycle work the way it does. Deleting the Application deletes its tracking data along with its artifacts and its private bus, and a snapshot will not bring it back, because snapshots carry configuration and never tracking history.
The Tracking screen is laid out in three regions, top to bottom, status boxes, a filter strip, and a results grid.
1. Status boxes. Five boxes at the top, each showing a status name and a live count: Successful Running Suspended Exceptions Errors. Clicking a box loads the matching records into the grid below; the same box also exposes an action menu that applies to the entire count at once (see Actions).
2. Filter strip. A row of filters that narrow what the grid shows: Tracking ID, Start Date, End Date, and Message Type. Filters compose with the active status box and with the Selected Application.
3. Results grid. One row per integration run, sortable by start time, with the originating port, message type, and start timestamp visible. Expanding a row reveals the run's full step-by-step history, see Step-by-step drill-down.
| Status | Meaning |
|---|---|
| Successful | The run completed end-to-end without raising an error. |
| Running | The run is currently in flight on one or more ports. Counts in this box are live and can change between refreshes. |
| Suspended | The run is paused and waiting on operator action. Resumable, or terminable, from this screen. |
| Exceptions | The run failed, and the failure was handled by the port's configured exception: the port had a Message Type assigned for the failure path, the runtime emitted a message of that type onto the bus, and any subscriber to it (an alert send port, a log writer, a downstream compensation flow) picked it up. See Ports → Options available on every port for how to configure an exception path. |
| Errors | The run failed and the failure was not handled, either the port had no configured exception, or the configured exception itself raised an uncaught fault. |
Actions are identical whether triggered on a single row or on the whole status box. The box variant applies the action to every record currently in that status, scoped by the active filters.
| Status | Available actions |
|---|---|
| Successful | None, the record is final and read-only |
| Running | Terminate Suspend |
| Suspended | Terminate Resume |
| Exceptions | None, the record is final and read-only |
| Errors | None, the record is final and read-only |
Expanding a row in the results grid exposes the full step-by-step history of that run, one line per step, in execution order, across every port the run touched. The columns are:
| Column | What it shows |
|---|---|
| Timestamp | When the step executed, to the millisecond. |
| Port | The port that owned this step. |
| Step ID | A numbered identifier for the lifecycle stage (adapter, pipeline, map, open or close variables, and so on). Hover the badge to see the stage's human-readable name; see Step IDs below for the full list. |
| Type | The port type the step belongs to, with a color matching the Ports palette. See Ports for the port-type model. |
| Adapter | The adapter bound to the port, when relevant. Loopback and null ports have no adapter and leave this column blank. |
| Message Type | The Message Type carried by the run at this step. |
| Body | A preview of the message body at this step. Populated only when the owning Application was set to Enabled + Body; otherwise the column is blank for that step. Clicking the preview opens the full body. |
Each step in the drill-down carries a numeric Step ID, and the badge tooltip shows the stage it marks. A full two-way round trip spans two ports joined by the bus: the request enters through a receive port, is published, a send port picks it up and calls the external endpoint, and the reply returns through the send port and back out to the caller. The Step ID sets execution order, so the map and pipeline stages list in the order they run (a receive leg runs its pipeline before its map; a send leg runs its map before its pipeline). Most runs use only a subset.
| Step ID | Phase | Stage |
|---|---|---|
| 20 | Pre-flight check | No partner configuration matches the incoming message type |
| 40 | Receive port, request leg | Envelope created; receive port flow started |
| 43 | Run state | Resumed |
| 47 | Receive port, request leg | Receive solicit pipeline |
| 50 | Receive port, request leg | Receive solicit map |
| 60 | Request handoff | Request |
| 70 | Send port, request leg | Send solicit map |
| 80 | Send port, request leg | Send solicit pipeline |
| 100 | Send port, request leg | Adapter call to the external endpoint |
| 205 | Send port, response leg | Send response map |
| 208 | Send port, response leg | Send response pipeline |
| 210 | Run state | Suspended |
| 215 | Receive port, response leg | Receive response map |
| 218 | Receive port, response leg | Receive response pipeline |
| 500 | Run state | Terminated |
Every integration run is stamped with a single Tracking ID when it enters the platform. The same ID flows through every port the run touches, which is what lets the screen reassemble one logical run from steps recorded by different ports. Use the Tracking ID filter on the top strip to recall the complete history of one specific run, for as long as that history still exists. Two limits apply: the run must still sit inside the retention window, since the nightly prune job removes anything older, and the Application that owns it must still exist, since deleting an Application deletes its tracking data outright. A Tracking ID that returns nothing has usually met one of the two, not been recorded wrong.
That's Tracking
Set the level you need on the Application, run integrations, and the Tracking screen is where the history of every run lives, searchable, drillable, and bulk-actionable. That history lives for as long as the retention window keeps it and the owning Application exists, and deleting the Application ends it permanently.