BotBuilder FormFlow — сортировка используемых полей, множественная валидация для вложений

Уже достаточно давно я отправлял несколько небольших, но нужных изменений в репозиторий BotBuilder и вот, наконец, они были добавлены в основную ветку репозитория. Данные изменений попадут в версию 3.X SDK, о четвёртой версии я напишу позже.

Сортировка полей в FormFlow

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

Для решения данной проблемы я добавил атрибут OrderAttribute, который принимает в качестве параметра числовое значение. Порядок вывода полей, обозначенных данным атрибутом, определяется по возрастанию их значений. По умолчанию, значение для параметра ноль.

Для примера, создадим класс, содержащий следующие значения:

public string Description;

public string FirstName;

public string LastName;

public int Age = 18;

public string Phone;

С помощью возможностей FormFlow добавим заполнение данных полей используя чат-бот.

Заполнения значений класса в FormFlow без использования сортировки полей

Как можно увидеть, порядок соответствует расположению самих полей. Используя атрибут Order данный порядок можно изменить.

[Order(10)]
public string Description;

[Order(2)]
public string FirstName;

[Order(1)]
public string LastName;

public int Age = 18;

[Order(-1)]
public string Phone;

После этого, чат-бот будет запрашивать заполнение данных полей в требуемом порядке:

Заполнения значений класса в FormFlow с использованием сортировки полей

Коммит, добавляющий данное изменение, можно увидеть здесь: https://github.com/Microsoft/BotBuilder/commit/4fbea59c57cece4e26c609c175e7d378784988ec

Множественная валидация для вложений в FormFlow

Использование вложений в FormFlow полезно и удобно, но оставался один не доработанный момент. Фактически сразу как добавили этот функционал я понял, что мне не хватает валидации для нескольких типов файлов. То есть, когда мне нужно добавить именно .png изображение или .docx файл, то всё работает отлично. Но обычно для пользователя представляется возможным загрузить вложения в различных форматах, если это изображения, то, например в jpg и png, если это документ, то pdf, doc, docx. Добавленное изменение позволяет задавать несколько типов вложений, разделив допустимые вертикальной чертой.

[AttachmentContentTypeValidator(ContentType = "png|jpg|bmp")]
public AwaitableAttachment Image;

После этого можно передавать только файлы указанных расширений:

Множественная валидация во вложениях файлов, используя FormFlow

Коммит, добавляющий данное изменение, можно увидеть здесь: https://github.com/Microsoft/BotBuilder/commit/7e5d45987db6a12c3ff3e7b36144947b95342bc3

Несколько полезный ссылок:

Видеоурок работы с FormFlow: http://flash2048.com/post/creating-chat-bots-on-the-microsoft-bot-framework-part6

Описание работы с вложениями в чат ботах: http://flash2048.com/post/microsoft-bot-framework-how-to-add-attachments-to-formflow

Приятного программирования.

Добавить комментарий