I am trying to sync the Time Spent (Completed Work) value from Azure DevOps to Jira using Exalate.
In our setup, the time is logged on Task work items, which are children of a parent work item (e.g., User Story/PBI). However, the parent itself does not contain the aggregated time spent value.
One possible approach would be to use Exalate’s httpClient() to retrieve the child tasks, read their Completed Work / Time Spent values, aggregate them, and then send the total to Jira as part of the parent work item sync.
However, the challenge is that there is no direct synchronization event between the child and parent work items in Azure DevOps. When the Time Spent field is updated on a child task, the parent work item itself is not modified, so Exalate is not aware that anything has changed on the parent and therefore does not trigger a synchronization.
I would like to understand whether there is a recommended way to handle this scenario.
Some questions:
Is there a native Azure DevOps automation or rule that can aggregate the Completed Work / Time Spent values from child tasks and store the total on the parent?
Has anyone implemented this using Azure DevOps Automation Rules?
Is there a way to update or touch the parent whenever a child task’s time spent changes so that Exalate can detect the change and trigger a sync?
Alternatively, has anyone successfully implemented this directly within Exalate using httpClient() or another approach?
Any examples, best practices, or implementation suggestions would be greatly appreciated.
Great questions! This is a common scenario when syncing hierarchical work items between Azure DevOps and Jira, especially when time tracking is done at the child task level.
Here’s a breakdown of your options and some best practices:
Aggregating Time Spent on the Parent Work Item
Azure DevOps does not natively aggregate the Completed Work (Time Spent) from child tasks to the parent. However, you can use Azure DevOps Automation (via Power Automate or custom Azure Functions) to sum the Completed Work of all child tasks and update a custom field on the parent work item. This update will trigger Exalate to sync the parent, as the parent will have a field change.
For example, you can set up a Power Automate flow that listens for updates to the Completed Work field on tasks, aggregates the values for all children of a parent, and writes the total to a custom field on the parent.
Triggering Exalate Sync When Child Task Changes
Exalate triggers syncs based on changes to the work item it’s connected to. If only the child task changes, the parent won’t sync unless it’s also updated.
By updating a field on the parent (as described above), you ensure Exalate detects a change and syncs the parent with the aggregated value.
Using Exalate’s httpClient() in the Sync Script
You can use httpClient() in your outgoing sync script for the parent to fetch all child tasks and aggregate their Completed Work values. However, this approach only works when the parent is already being synced (i.e., when the parent itself changes).
This means you still need a mechanism to “touch” or update the parent when a child’s time spent changes, so Exalate will run the sync script for the parent.
Best Practice
The most robust solution is to use Azure DevOps automation to update a custom field on the parent whenever a child’s Completed Work changes. This ensures Exalate is triggered and the aggregated value is always up to date in Jira.
You can find more details and examples in the Exalate documentation:
In summary: Use Azure DevOps automation to update the parent when a child’s time spent changes, and then use Exalate to sync the parent with the aggregated value. This approach is reliable and keeps your Jira instance in sync with the latest totals.
Let me know if you need a sample Power Automate flow or a script example for the aggregation logic!
This is an application in ADO which we can install, the app is basically used to provide total number of hours used by child tasks into parent story/epic
-There is no specific ADO doc i can see but you can re-search more about it if it is useful or not, reference i found is: Managing parent work item updates in Azure DevOps via Power Automate
Option 2 — Exalate script (httpClient)
Set the trigger on Tasks. In the Task’s outgoing script, use httpClient to fetch parent + all children, sum Completed Work, then PATCH the total onto the parent.
then it will trigger parent story to sync on target side with total hours
I would recommend, you can research more for first option if that provided direct way there is no need to write advance script , otherwise we need to continue with option 2.