Bot Framework 中的 Advanced FormFlow - 通过代码设置模板
Advanced FormFlow in Bot Framework - Set Templates via code
我正在使用 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(),但是这个反射器 returns 是一个 IField,无法弄清楚如何让它工作。
有这方面经验的人最好选择(我真的不想使用 RView ;))
我认为这里的问题是 .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();
}
我正在使用 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(),但是这个反射器 returns 是一个 IField,无法弄清楚如何让它工作。
有这方面经验的人最好选择(我真的不想使用 RView ;))
我认为这里的问题是 .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();
}