- 22 Aug 2025
- 4 Minutes to read
- Print
- DarkLight
- PDF
Logic App Standard - Business Process Tracking
- Updated on 22 Aug 2025
- 4 Minutes to read
- Print
- DarkLight
- PDF
In this sample we will look at how we can use data from Logic App Standard Business Process Tracking within Turbo360 BAM.
The value proposition for this is that its difficult to allow non Azure experts to use Business Process Tracking as they need to be confident using the Azure Portal.
In this case I can use KQL queries in Turbo360 BAM to be able to query the Azure Data Explorer database behind Business Process Tracking then with some simple KQL queries you can expose these queries along side your other Turbo360 BAM processes.
Workflow for the Sample
Pre-Reqs
You have already setup a Logic App scenario which is using Logic App Business Process Tracking which feeds data to an Azure Data Explorer
You have setup an App Registration which has access to search for the ADX resource in Azure (reader permission)
The App Registration has viewer access to query data within ADX
When creating the Turbo360 business processes you will need
A parent KQL query which will query the business process / transaction records and craft the rows you want to view in the Turbo360 tracking
This will allow you to search by custom properties
1 or more child KQL query which will search for child stages which you would like to show in Turbo360
The link between the parent query and the child query is created by promoting a field in Turbo360 from the parent query which you will then use in the child query to find matching records.
Architecture Flow
The below diagram represents the architecture of this sample.
The developer uses Business Process Tracking in Logic Apps
Logic Apps writes data to Azure Data Explorer
The developer adds some KQL queries to Turbo360
The L2 support user and business user can use Turbo360 to see what is happening in the interfaces
The developer gets fewer support questions and tickets
The L2 support user and business user are happier because they can self-service
Video
Parent Query
The parent query aims to find a start and end event which we can then map together and create a single row representing the end to end business process. We do have an inherited limitation from Logic Apps that they dont really have the concept of the overall transaction but we can infer that in the right conditions.
In my case below I am looking for a start and end event and linking them together and I think for most scenarios you will probably do something similar. You are not restricted to this pattern thou, the KLQ query can do anything you want.
In my query below I am promoting some important properties from the start event so I can search in Turbo360 using some of the business properties.
The other key point here is we need you to promote a field which you would configure as the tile field when we do some of the filtering by time.
let startEvents = RailcarEvents
| where eventName == "Message_Received";
let endEvents = RailcarEvents
| where eventName == "Processor_Complete"
| extend EndEventStatus = eventStatus;
startEvents
| join kind=leftouter endEvents on $left.correlationId == $right.correlationId
| order by eventTimestamp desc
| extend appName = metadata.appName
| extend businessProcessName = metadata.businessProcessName
| extend trackingProfileId = metadata.trackingProfileId
| extend RailcarID = properties.RailcarID
| extend LoadSlipID = properties.LoadSlipID
| extend EventID = properties.EventID
| project StartTime=eventTimestamp, EndTime=eventTimestamp1, EventID, LoadSlipID, RailcarID, trackingProfileId, businessProcessName, appName, EndEventStatus
Stage Query
In the below stage level query I have a KQL query which is quite reusable for most stages.
The key bits in this query are:
I have a portal url link to the logic app, I will inject the run id into this when the query executes so I will end up with a clickable link in BAM to jump to the Azure Portal for the Logic App workflow run history
The line where we set the correlation id field to = the EventID. This is where I have the event id promoted on the parent query and then I reuse it on the child queries to find the right record matching the parent
The line where the eventName = Process_Complete is where I match the stage in the business process tracking profile for Logic Apps
I simple reuse this query for other stages and change the event name
The 2nd last line is where I can extend properties out from the properties tracked by the Logic App tracking profile to promote my custom data.
I hope you should be able to use the below query as a quick start and just modify the portal url and also the properties to promote. You will also need to modify the table name.
let inputLogicAppRunPortalUrl = "https://portal.azure.com/#view/Microsoft_Azure_EMA/DesignerEditor.ReactView/id/%2Fsubscriptions%2F92357fca-2391-4501-b98a-6a93589ba4c9%2FresourceGroups%2Fblog_app_railcargps%2Fproviders%2FMicrosoft.Web%2Fsites%2Fms-blog-railcar-gps%2Fworkflows%2FProcessController/location/North%20Europe/isReadOnly~/false/isMonitoringView~/true/runId/";
RailcarEvents
| where correlationId == {EventID}
| where eventName == "Processor_Complete"
| extend metaData_appName = tostring(metadata.appName)
| extend metaData_businessProcessName = tostring(metadata.appbusinessProcessNameName)
| extend metaData_businessProcessVersion = tostring(metadata.businessProcessVersion)
| extend metaData_trackingProfileName = tostring(metadata.trackingProfileName)
| extend metaData_trackingProfileId = tostring(metadata.trackingProfileId)
| extend metaData_trackingProfileSequenceId = tostring(metadata.trackingProfileSequenceId)
| extend metaData_flowName = tostring(metadata.flowName)
| extend metaData_flowId = tostring(metadata.flowId)
| extend metaData_flowSequenceId = tostring(metadata.flowSequenceId)
| extend metaData_flowRunSequenceId = tostring(metadata.flowRunSequenceId)
| extend metaData_clientTrackingId = tostring(metadata.clientTrackingId)
| extend metaData_batchId = tostring(metadata.batchId)
| extend metaData_flowName = tostring(metadata.flowName)
| extend properties_EventID = tostring(properties.EventID)
| extend PortalUrl = strcat(inputLogicAppRunPortalUrl, metaData_flowRunSequenceId)
FAQ
Can you have more than just Logic App Standard
Yes a Turbo360 BAM transaction could have stages from different data sources, for example one could come from App Insights with a log message from API Management and the next stage could use a log event which is in ADX which came from Logic App Standard Business Process Tracking
Can I have stages which come from different tables in ADX
Yes