从停止的地方启动 FormFlow
Start FormFlow from where it was stopped
按照 AnnotatedSandwichBot 的例子,可以用这个来处理表单填充取消:
private static IDialog<object> MakeRootDialog()
{
return Chain.From(() => FormDialog.FromForm(Form.BuilLocalizedForm))
.Do(async (context, state) =>
{
try
{
var completed = await state;
}
catch (FormCanceledException canceled)
{
if (canceled.InnerException == null)
await context.PostAsync($"You quit on {canceled.Last}");
else
await context.PostAsync($"Sorry, I have a problem here");
}
});
当用户突然键入 "bye" 时,机器人会成功地说出 You quit on FieldName
(然后在 Bot Emulator 上出现巨大的堆栈跟踪和 FormCanceledException)。
但是如果我再说一遍,它会从头开始而不是从最后完成的步骤开始。我怎样才能使表格从那里开始 - 理想情况下打印像 "Welcome back!"?
这样的东西
您应该找到一个 FormCanceledException<T>
,其中 T 是您的表单模型。执行此操作后,您应该能够访问异常的 LastForm 属性,当用户退出时,您将在其中找到部分表单。
然后您可以使用该部分表单作为表单的初始状态(参见 相关问题)。
按照 AnnotatedSandwichBot 的例子,可以用这个来处理表单填充取消:
private static IDialog<object> MakeRootDialog()
{
return Chain.From(() => FormDialog.FromForm(Form.BuilLocalizedForm))
.Do(async (context, state) =>
{
try
{
var completed = await state;
}
catch (FormCanceledException canceled)
{
if (canceled.InnerException == null)
await context.PostAsync($"You quit on {canceled.Last}");
else
await context.PostAsync($"Sorry, I have a problem here");
}
});
当用户突然键入 "bye" 时,机器人会成功地说出 You quit on FieldName
(然后在 Bot Emulator 上出现巨大的堆栈跟踪和 FormCanceledException)。
但是如果我再说一遍,它会从头开始而不是从最后完成的步骤开始。我怎样才能使表格从那里开始 - 理想情况下打印像 "Welcome back!"?
这样的东西您应该找到一个 FormCanceledException<T>
,其中 T 是您的表单模型。执行此操作后,您应该能够访问异常的 LastForm 属性,当用户退出时,您将在其中找到部分表单。
然后您可以使用该部分表单作为表单的初始状态(参见