Advanced 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. В справочнике есть метод, доступный для поля, ReplaceTemplate(), но этот отражатель возвращает IField и не может понять, как заставить его работать.

Любой опыт в этом с лучшим вариантом (я действительно не хочу использовать RView;))


person Nico Degraef    schedule 31.05.2018    source источник


Ответы (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();      
}
person Eric Dahlvang    schedule 01.06.2018
comment
Что ж, вы были правы, как слово из 4 букв, которое я не буду произносить. Спасибо за быстрый ответ! - person Nico Degraef; 01.06.2018