自适应卡片是一种多功能工具,可用于在 Copilot Studio 中创建交互式且引人入胜的对话,并可用于显示一系列项目。 在本文中,为简单起见,我们在一个新主题中生成该方案,并使用一个硬编码示例。 不过,您可以通过 Power Automate 从更动态的来源获取数据,比如 SharePoint 列表。
使用任务列表初始化变量
在此方案中,您有一个数组中的任务列表,并且您希望在代理中显示这些任务。
例如,在 Copilot Studio 中创建一个主题,并将其命名为“显示任务”。
在触发器节点上,使用“我的任务”和“显示任务”作为触发短语。
选择触发器节点下方的添加节点图标
,选择变量管理,然后选择设置变量值。
选中设置变量下的复选框,然后选择新建。
选择新变量(例如
Var1
),显示变量属性面板。将变量重命名为有意义的名称,例如
EmployeeTaskList
。在目标值字段中粘贴以下 JSON 文字:
{ "employeeName": "Alice", "employeeID": "E12345", "employeeDepartment": "HR", "employeeTasks": [ { "taskID": "T001", "taskDescription": "Review employee benefits", "dueDate": "2025-10-15" }, { "taskID": "T002", "taskDescription": "Conduct new hire orientation", "dueDate": "2025-09-30" }, { "taskID": "T003", "taskDescription": "Update HR policies", "dueDate": "2025-11-05" } ] }
将 JSON 文本解析到表中
若要将 JSON 字符串转换为稍后可在自适应卡片中使用的表,必须对其进行分析。
选择设置变量值节点下方的添加节点图标
,选择变量管理和解析值。 此节点用于解析来自上一个节点的变量。
对于解析值,选择前一个节点中的变量,在本例中为 EmployeeTaskList。
对于数据类型:
选择来自示例数据,然后选择从示例 JSON 获取架构。
在打开的编辑器中,粘贴相同的 JSON 字符串,然后选择确认。 示例数据将自动生成架构和数据类型。
对于另存为,选择创建新变量。
选择新变量,并将其重命名为
TaskTable
。
在自适应卡片中显示数据
要在自适应卡片中显示数据,请使用消息节点。
选择添加,并从下拉菜单中选择自适应卡。
选择媒体部分以显示自适应卡属性面板。
在右侧的自适应卡属性面板中,选择 </> 编辑 JSON下拉菜单并将其更改为公式。
粘贴以下代码。
{ type: "AdaptiveCard", version: "1.5", body: [ { type: "TextBlock", text: "Employee Information", weight: "bolder", size: "large" }, { type: "TextBlock", text: "Employee Name: " & Topic.TaskTable.employeeName, separator: true }, { type: "TextBlock", text: "Employee ID: " & Topic.TaskTable.employeeID, separator: true }, { type: "TextBlock", text: "Department: " & Topic.TaskTable.employeeDepartment, separator: true }, { type: "TextBlock", text: "Tasks", weight: "bolder", size: "medium", separator: true }, { type: "Container", items: ForAll(Topic.TaskTable.employeeTasks, { type: "TextBlock", text: "- Task ID: " & taskID & ", Description: " & taskDescription & ", Due Date: " & dueDate , wrap: true } ) } ] }
注意公式是如何通过使用
Topic.TaskTable.employeeName
这样的表达式来引用记录属性的。 还请注意,它使用Container
元素和items
属性在自适应卡片上显示数组项。items
属性接受元素数组作为其值。 使用 'ForAll' 函数在自适应卡片中显示数组中的每个元素。 引用Topic.TaskTable.employeeTasks
数组允许访问其每个属性。
根据 YAML 代码生成相同的示例方案
如果想快速创建本示例主题,可以创建一个空白主题,打开代码编辑器,然后用以下代码替换默认的 YAML 代码。
kind: AdaptiveDialog
beginDialog:
kind: OnRecognizedIntent
id: main
intent:
displayName: Untitled
triggerQueries:
- array
actions:
- kind: SetVariable
id: setVariable_uFs69M
variable: Topic.EmployeeTaskList
value: "{ \"employeeName\": \"Alice\", \"employeeID\": \"E12345\", \"employeeDepartment\": \"HR\", \"employeeTasks\": [ { \"taskID\": \"T001\", \"taskDescription\": \"Review employee benefits\", \"dueDate\": \"2023-10-15\" }, { \"taskID\": \"T002\", \"taskDescription\": \"Conduct new hire orientation\", \"dueDate\": \"2023-09-30\" }, { \"taskID\": \"T003\", \"taskDescription\": \"Update HR policies\", \"dueDate\": \"2023-11-05\" } ] }"
- kind: ParseValue
id: 58zKdp
variable: Topic.TaskTable
valueType:
kind: Record
properties:
employeeDepartment: String
employeeID: String
employeeName: String
employeeTasks:
type:
kind: Table
properties:
dueDate: String
taskDescription: String
taskID: String
value: =Topic.EmployeeTaskList
- kind: SendActivity
id: sendActivity_oNXY1r
activity:
attachments:
- kind: AdaptiveCardTemplate
cardContent: |-
={
type: "AdaptiveCard",
version: "1.5",
body: [
{
type: "TextBlock",
text: "Employee Information",
weight: "bolder",
size: "large"
},
{
type: "TextBlock",
text: "Employee Name: " & Topic.TaskTable.employeeName,
separator: true
},
{
type: "TextBlock",
text: "Employee ID: " & Topic.TaskTable.employeeID,
separator: true
},
{
type: "TextBlock",
text: "Department: " & Topic.TaskTable.employeeDepartment,
separator: true
},
{
type: "TextBlock",
text: "Tasks",
weight: "bolder",
size: "medium",
separator: true
},
{
type: "Container",
items:
ForAll(Topic.TaskTable.employeeTasks,
{
type: "TextBlock",
text: "- Task ID: " & taskID & ", Description: " & taskDescription & ", Due Date: " & dueDate ,
wrap: true
}
)
}
]
}