【问题标题】:How to work properly with advanced Adaptive Cards?如何正确使用高级自适应卡?
【发布时间】:2020-02-11 20:25:45
【问题描述】:

多题

1。动态构建自适应卡片

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

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

在不必构建反序列化器的情况下实现这一目标的最佳方法是什么? (我不想将每个 ContainerFactSet 等反序列化为无用的对象)。

2。更新自适应卡片

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

  • 一个项目可以同时有"selectAction": "Action.toggleVisibility""type": "Action.Submit"吗?

3。处理提交操作

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

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

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

这个处理程序是否应该转到某种类型的中间件,可能在机器人类中(我想这不应该出现在 MainDialog 中,因为我的是 WaterFallDialog)。处理这些问题的明智方法是什么?

【问题讨论】:

    标签: c# asp.net-core botframework adaptive-cards


    【解决方案1】:

    我已经多次回答这些问题。我感觉你会遇到更多,所以请随时search my user for Adaptive Card questions

    对于您的每个问题,具体来说:

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

    其他资源


    更新到答案 2.1

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

    {
        "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中玩过

    【讨论】:

    • 感谢所有链接,我一定会全部检查出来的!您能否用我的最后一个问题(“2.1”问题)更新您的答案。一个项目可以同时具有“selectAction”和“Action”属性吗?我希望能够切换可见性以使其不可见,并希望能够通过“Action.Submit”从订单对象中删除产品条目。
    【解决方案2】:

    作为上面的附注,在那里简要提到了,但您真的应该看看 Adaptive Cards Templating 可以为您做什么。

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

    模板处于预览阶段,其工作方式与卡片模板上的数据绑定数据非常相似。您不必序列化/反序列化您的数据或构建任何容器、事实集等。库会为您完成这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2018-03-24
      • 2018-03-21
      • 2021-07-02
      • 2021-07-10
      • 2021-08-03
      • 2020-10-12
      相关资源
      最近更新 更多