Groovy填充AdaptiveCard动态数据在Teams中失效问题求助
解决Teams中Adaptive Card动态数据绑定失效的问题
核心原因分析
你遇到的问题本质是Groovy字符串插值与Adaptive Card绑定语法冲突,以及数据注入方式不符合Teams的渲染要求:
- Groovy会自动解析字符串中的
${xxx}作为变量插值,导致最终生成的卡片JSON里,text: "${name}"被替换成了Groovy环境中name变量的值(若未定义则为空),而非保留Adaptive Card需要的绑定表达式。 - 若未将
requests数组正确嵌入到卡片的$data字段中,Teams无法识别并遍历数据源进行渲染。
解决方案
1. 转义Adaptive Card绑定表达式
在Groovy字符串中,将${name}转义为\${name},避免Groovy解析该表达式,确保最终JSON中保留原始绑定语法:
def requests = [ ["name":"Aspentech ProMV","status":"Rejected"], ["name":"Testing","status":"Approved"] ] // 使用转义后的绑定表达式,并通过JsonBuilder生成标准JSON格式的数据源 def cardJson = """ { "type": "AdaptiveCard", "body": [ { "type": "Container", "\$data": ${new groovy.json.JsonBuilder(requests).toString()}, "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "text": "\${name}", "wrap": true, "size": "Large", "fontType": "Default" } ] } ] }, { "type": "ActionSet", "actionsOrientation": "horizontal", "actions": [ { "type": "Action.Submit", "title": "Quick Approve" } ] } ] } ], "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.4" } """
2. 确保数据源正确嵌入卡片JSON
使用groovy.json.JsonBuilder将requests数组转换为标准JSON字符串,直接插入到Container的$data字段中,而非依赖外部数据源传递。这样Teams收到的卡片JSON包含完整的数据源和绑定表达式,能够正常渲染动态内容。
3. 验证最终生成的JSON
发送卡片前,打印生成的cardJson内容,确认:
$data字段是完整的数组JSON(如[{"name":"Aspentech ProMV","status":"Rejected"},{"name":"Testing","status":"Approved"}])text字段的值是${name}而非空或其他值
内容的提问来源于stack exchange,提问作者Ray Huang
相关产品推荐
相关产品推荐

