Hello, I'm using more custom adaptive cards but just running into some challenges (new to JSON).
Background:
Recently put together a Powerapp for Teams where a user will submit pricing details to a Lead to approve or edit.
Upon submission, the details will trigger a power automate flow that sends a custom Adaptive Card with text input fields that will look up a record and edit values if an edit is made. Otherwise there is a button to simply approve.
Issue:
I have a Parse JSON action that will serialize the request details into an array of objects. Then, I use an 'Apply to Each' action using the body of the Parse JSON action to fill in the Adaptive Card details. However, the Card itself will send multiple times for each object rather than simply repeating the Fact Set element in the card itself, so its just 1 card. Not multiple.
Question:
In my template JSON below, how do I bind the Parse JSON output properly to the "$data" property of the Fact Set that I want to repeat below?
Tried following the official documentation but just having no luck connecting it to the Parse JSON action.
Here is a look at the flow:
Here is a look at the Card
Here is the Adaptive Card Template payload
- In the Fact Set $data property, I would like to bind the Parse JSON data
{
"type": "AdaptiveCard",
"body": [
{
"type": "Container",
"style": "emphasis",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"items": [
{
"type": "TextBlock",
"size": "Large",
"weight": "Bolder",
"text": "@{variables('varClientName')}"
}
],
"width": "stretch"
}
]
}
],
"bleed": true
},
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"items": [
{
"type": "TextBlock",
"size": "ExtraLarge",
"text": "@{variables('varOrderDescription')}",
"wrap": true
}
],
"width": "stretch"
}
]
},
{
"type": "FactSet",
"facts": [
{
"title": "Submitted By",
"value": "@{variables('varSubmittedBy')}"
},
{
"title": "Confirm Date",
"value": "@{variables('varConfirmationDate')}"
},
{
"title": "In-Hands Date",
"value": "@{variables('varInHandsDate')}"
},
{
"title": "Client Budget",
"value": "@{variables('varClientBudget')}"
},
{
"title": "Client Price",
"value": "@{variables('varClientTargetPrice')}"
}
],
"separator": true,
"height": "stretch"
},
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "FactSet",
"facts": [
{
"title": "SKU",
"value": "{$root.sku}"
},
{
"title": "Description",
"value": "{$root.description}"
},
{
"title": "Unit Price",
"value": "{$root.unitPrice}"
},
{
"title": "Quantity",
"value": "{$root.quantity}"
},
{
"title": "Production Type",
"value": "{$root.productionType}"
}
],
"$data": "{$root}" // Bind the Parse JSON data here
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "Input.Text",
"placeholder": "Edit Unit Price",
"maxLength": 1000,
"id": "acEditPrice"
}
],
"id": "@{items('Apply_to_each')['id']}"
}
]
}
]
},
{
"type": "Container",
"style": "emphasis",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"items": [
{
"type": "TextBlock",
"horizontalAlignment": "Right",
"text": "Total Price Submitted",
"wrap": true
}
],
"width": "stretch"
},
{
"type": "Column",
"items": [
{
"type": "TextBlock",
"weight": "Bolder",
"text": "@{variables('varProductsTotalSum')}"
}
],
"width": "auto"
}
]
}
],
"bleed": true
},
{
"type": "Container",
"items": [
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "Submit",
"style": "positive",
"data": {
"id": "{$root.id}",
"action": "approve"
}
}
]
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.2",
"fallbackText": "This card requires Adaptive Cards v1.2 support to be rendered properly."
}
hey @Haris572
Yes, I managed to find a work around in power automate using Apply to each, an Array variable and Compose. Though this solution was some time back (last year) so I'm not sure if binding is available for power automate adaptive cards in a Teams context these days. For now, you can ignore all the "$root" variables in my previous example - this will be replaced by your dynamic content.
Before I begin, I recommend using Designer | Adaptive Cards throughout to test out how your custom card will appear. I kept the card very simple, the FactSet object was enough for my needs. Otherwise, the site is a great resource for building custom Adaptive Cards.
My workaround below:
In the sample photo above of the actual card in Teams, the part I wanted repeated were the "products" (from SKU to Production Type)
In the adaptive card template it was the below bolded section of code that I repeated inside a ColumnSet "items" array:
Code:
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "Sample"
},
{
"type": "FactSet",
"facts": [
{
"title": "Fact 1",
"value": "Dynamic Content 1"
},
{
"title": "Fact 2",
"value": "Dynamic Content 2"
}
]
},
{
"type": "FactSet",
"facts": [
{
"title": "Fact 1",
"value": "Dynamic Content 3"
},
{
"title": "Fact 2",
"value": "Dynamic Content 4"
}
]
},
{
"type": "TextBlock",
"text": "Random Text - Hello!",
"wrap": true
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.3"
}
Did you get solution for this? I'm having the same issue.
Michael E. Gernaey
497
Super User 2025 Season 2
David_MA
436
Super User 2025 Season 2
Riyaz_riz11
244
Super User 2025 Season 2