FormBuilder代码执行突然跳转到FormCompletion委托
FormBuilder Code execution suddenly jumps to FormCompletion delegate
我在 Bot 框架应用程序中有以下代码。
您可以在下面的代码中看到我已经注释了 ValidateStartDate 委托,其背后的原因是如果我在 formflow 中包含委托,那么在委托执行代码之后直接跳转到 "context.Call(Booking, BookingComplete);" 的 BookingComplete 委托,即理想情况下 conversation.But 的结尾,它应该执行表单生成器中的其余字段。
注意这里的StartDate是String类型,我是手动校验日期part.Also,代码执行过程中没有出现可见的异常
public static IForm<ConferenceBooking> BuildForm()
{
return new FormBuilder<ConferenceBooking>().Message("Tell me meeting details!")
.Field(nameof(title))
.Field(nameof(StartDate))//, validate: ValidateStartDate
.Field(nameof(EntryTime), validate:ValidateCallTime)
.Build();
}
下面是 StartDate
的委托部分
private static Task<ValidateResult> ValidateStartDate(ConferenceBooking state, object response)
{
var result = new ValidateResult();
DateTime startDt = Convert.ToDateTime(GetDate(Convert.ToString(response)));
if (startDt == null || startDt == DateTime.MinValue)
{
result.IsValid = false;
result.Feedback = "I could not understand this format.";
}
else if (startDt.Date < DateTime.Now.Date)
{
result.IsValid = false;
result.Feedback = "Sorry, back dated bookings are not allowed";
}
else
{
result.IsValid = true;
result.Value = startDt;
}
return Task.FromResult(result);
}
我之前也注意到了这种行为,这总是由于异常造成的。 FormBuilder 似乎捕获了所有异常并在 catch 块中退出了表单。这就是为什么您没有看到任何异常弹出的原因。尝试逐步检查您的代码或从表单外部执行它。
我在 Bot 框架应用程序中有以下代码。 您可以在下面的代码中看到我已经注释了 ValidateStartDate 委托,其背后的原因是如果我在 formflow 中包含委托,那么在委托执行代码之后直接跳转到 "context.Call(Booking, BookingComplete);" 的 BookingComplete 委托,即理想情况下 conversation.But 的结尾,它应该执行表单生成器中的其余字段。 注意这里的StartDate是String类型,我是手动校验日期part.Also,代码执行过程中没有出现可见的异常
public static IForm<ConferenceBooking> BuildForm()
{
return new FormBuilder<ConferenceBooking>().Message("Tell me meeting details!")
.Field(nameof(title))
.Field(nameof(StartDate))//, validate: ValidateStartDate
.Field(nameof(EntryTime), validate:ValidateCallTime)
.Build();
}
下面是 StartDate
的委托部分private static Task<ValidateResult> ValidateStartDate(ConferenceBooking state, object response)
{
var result = new ValidateResult();
DateTime startDt = Convert.ToDateTime(GetDate(Convert.ToString(response)));
if (startDt == null || startDt == DateTime.MinValue)
{
result.IsValid = false;
result.Feedback = "I could not understand this format.";
}
else if (startDt.Date < DateTime.Now.Date)
{
result.IsValid = false;
result.Feedback = "Sorry, back dated bookings are not allowed";
}
else
{
result.IsValid = true;
result.Value = startDt;
}
return Task.FromResult(result);
}
我之前也注意到了这种行为,这总是由于异常造成的。 FormBuilder 似乎捕获了所有异常并在 catch 块中退出了表单。这就是为什么您没有看到任何异常弹出的原因。尝试逐步检查您的代码或从表单外部执行它。