Как правильно работать с продвинутыми адаптивными картами? - PullRequest
0 голосов
/ 15 октября 2019

Несколько вопросов

1. Динамическое создание адаптивных карт

Я создаю карту подтверждения Order, в которой есть запись для каждого продукта и количества. Также есть кнопка для удаления записи и другая кнопка для изменения ее количества.

Количество отображаемых продуктов будет зависеть от количества Product объектов, которые я сохранил в списке. Карта представляет собой шаблон JSON без каких-либо продуктов, которые я хочу изменить через мой код (добавить столбцы продуктов, кнопки, их соответствующие действия) и т. Д.

Каков наилучший способ выполнить этобез необходимости создавать десериализатор? (Я не хочу десериализовать каждый Container, FactSet и т. Д. В бесполезные объекты).

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). Каков рекомендуемый способ обращения с ними?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Я ответил на каждый из этих вопросов несколько раз. Я чувствую, что вы столкнетесь с большим количеством вопросов, поэтому не стесняйтесь искать у моего пользователя вопросы Adaptive Card .

Для каждого из ваших вопросов, а именно:

  1. Динамически создавать адаптивные карты
  2. Обновление адаптивной карты - Я делаю это в командах. Вообще говоря, если на канале есть кнопка «Редактировать» для сообщений, вам потребуется только UpdateActivityAsync() (если вы не можете «Редактировать» сообщение, этот канал не будет поддерживать обновление ранее отправленной адаптивной карты). Команды просто нужно несколько дополнительных шагов.
  3. Обрабатывать действия отправки - Это для диалогов водопада, как выдолжен сделать это. Если вы хотите сделать это по-другому, прочитайте верхнюю половину ответа, чтобы понять, как они работают, и реализуйте его в OnMessageAsync.

Другие ресурсы


Обновление до ответа 2.1

Я считаю, что это возможно. Вам понадобится действие Submit, а затем также будет контейнер, который содержит действие 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"
    }
}

Я не тестировал это на боте, просто поиграл в дизайнере карт

0 голосов
/ 17 октября 2019

В качестве дополнительного примечания к выше, там кратко упоминалось, но вы действительно должны взглянуть на то, что может сделать для вас шаблон адаптивных карт.

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

Шаблон находится в режиме предварительного просмотра и работает почти так же, как данные для привязки данных в шаблоне карты. Вам не нужно сериализовать / десериализовать ваши данные или создавать какие-либо контейнеры, наборы данных и т. Д., Библиотека сделает это за вас.

...