如何正确使用高级自适应卡?

How to work properly with advanced Adaptive Cards?

多个问题

1。动态构建自适应卡片

我正在创建一个 Order 确认卡,其中包含每个产品和数量的条目。还有一个用于删除条目的按钮和另一个用于修改其数量的按钮。

显示的产品数量将根据我存储在列表中的 Product 对象的数量而有所不同。该卡片是一个 JSON 模板,没有任何我希望能够通过我的代码修改的产品(添加产品列、按钮、它们各自的操作)等。

无需构建反序列化器即可实现该目标的最佳方法是什么? (我不想将每个 ContainerFactSet 等反序列化为无用的对象)。

2。更新自适应卡

每个 Product 行都有一个按钮可以从 Order 中删除 我可以实现 使其不可见,然后使用提交操作删除对象*.但是,当我更改条目的产品数量时,如何在不重新发送自适应卡的情况下更新 Product 数量值?

3。处理提交操作

所有这些按钮都有一组不同的提交操作。让我们这样说:

switch(action)
{
   case "delete1":
      //Deletes product 1 from the Order
      break;

   case "delete2":
      //Deletes product 2 from the Order
      break;
   ...
}

这个处理程序是否应该转到某种类型的中间件,也许在机器人 class 中(我想这不应该放在 MainDialog 中,因为我的是 WaterFallDialog)。处理这些问题的建议方法是什么?

我已经多次回答了这些问题。我有预感你会 运行 更多,所以请随意 search my user for Adaptive Card questions

针对您的每个问题,具体而言:

  1. -- 我在 Teams 中这样做。一般来说,如果频道有"Edit"消息按钮,你只需要UpdateActivityAsync()(如果你不能"Edit"消息,该频道将不支持更新以前发送的自适应卡)。团队只需要一些额外的步骤。
  2. - 这是针对瀑布对话框的,您应该这样做。如果您想以不同的方式进行操作,请阅读答案的上半部分以了解它们的工作原理并在 OnMessageAsync.
  3. 中实现它

其他资源


更新回答2.1

我相信这是可能的。您需要提交操作,然后还有一个包含 ToggleVisibility 操作的容器(反之亦然)。像这样:

{
    "type": "AdaptiveCard",
    "version": "1.0",
    "body": [
        {
            "type": "Container",
            "selectAction": {
                "type": "Action.ToggleVisibility",
                "targetElements": [
                    "showMe"
                ]
            },
            "items": [
                {
                    "type": "TextBlock",
                    "text": "Click me"
                }
            ]
        },
        {
            "type": "Container",
            "id": "showMe",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "New TextBlock"
                }
            ],
            "isVisible": false
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "selectAction": {
        "type": "Action.Submit",
        "data": "ok"
    }
}

我还没有在机器人中测试过,只是在 card designer

中试了一下

作为上面的旁注,在那里被简要提及,但您真的应该看看自适应卡片模板可以为您做什么。

https://docs.microsoft.com/en-us/adaptive-cards/templating/

模板处于预览阶段,其工作方式与卡片模板上的数据绑定数据非常相似。您不必 serialize/de-serialize 您的数据或构建任何容器、事实集等。图书馆会为您做这些。