Logic App Standard - Business Process Tracking
  • 22 Aug 2025
  • 4 Minutes to read
  • Dark
    Light
  • PDF

Logic App Standard - Business Process Tracking

  • Dark
    Light
  • PDF

Article summary

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

  1. Pre-Reqs

    1. You have already setup a Logic App scenario which is using Logic App Business Process Tracking which feeds data to an Azure Data Explorer

    2. You have setup an App Registration which has access to search for the ADX resource in Azure (reader permission)

    3. The App Registration has viewer access to query data within ADX

  2. When creating the Turbo360 business processes you will need

    1. A parent KQL query which will query the business process / transaction records and craft the rows you want to view in the Turbo360 tracking

      1. This will allow you to search by custom properties

    2. 1 or more child KQL query which will search for child stages which you would like to show in Turbo360

      1. 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


Was this article helpful?