Расширенный FormFlow в Bot Framework - Установить шаблоны с помощью кода
Я использую Formflow, чтобы генерировать необходимые вопросы, чтобы получить все данные от пользователя. Поскольку я поддерживаю несколько языков, я не могу просто использовать атрибуты. Поэтому я прочитал об этом и заметил, что RView можно использовать для создания файлов ресурсов. Однако, поскольку у меня уже есть файлы ресурсов, разделенные и упорядоченные, я пытаюсь использовать их повторно.
Используя FieldReflector, я могу сделать это довольно легко
form.Field(new FieldReflector<HolidayPlanningFlowForm>(nameof(StartDate),true)
.SetType(typeof(string))
.SetFieldDescription(Resources.HolidayResources.Planning_FlowStartDate_Describe)
.SetPrompt(new PromptAttribute(Resources.HolidayResources.Planning_FlowStartDate_Prompt)));
Так мило. Но я не могу понять, где определить мои шаблоны для TemplateUsage.NotUnderstood или TemplateUsage.DateTimeHelp, например. В ссылке есть метод, доступный для Field, ReplaceTemplate(), но этот рефлектор возвращает IField и не может понять, как заставить это работать.
Кто-нибудь испытает в этом лучший вариант (я действительно не хочу использовать RView;))
1 ответ
Я думаю, что проблема здесь .SetType(typeof(string))
Если это изменено на typeof(DateTime)
тогда .ReplaceTemplate() будет работать как положено:
public static IForm<TermFormFlow> BuildForm()
{
return new FormBuilder<TermFormFlow>()
.Message("Bla Bla")
.Field(new FieldReflector<TermFormFlow>(nameof(DateOfBirth), true)
.ReplaceTemplate(new TemplateAttribute(TemplateUsage.NotUnderstood, "I do not understand \"{0}\".", "Try again, I don't get \"{0}\"."))
.ReplaceTemplate(new TemplateAttribute(TemplateUsage.DateTimeHelp, "This field should be in the format '01/01/2018'", "Please enter a date or time"))
.SetType(typeof(DateTime))
.SetFieldDescription(Resources.HolidayResources.Planning_FlowStartDate_Describe)
.SetPrompt(new PromptAttribute(Resources.HolidayResources.Planning_FlowStartDate_Prompt)))
.AddRemainingFields()
.Build();
}