从FormFlow停止的地方开始

本文关键字:开始 方开始 FormFlow | 更新日期: 2023-09-27 18:17:11

在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"时,bot成功地说You quit on FieldName(然后在bot模拟器上使用FormCanceledException进行巨大的堆栈跟踪)。

但是如果我再重复一遍,它将从头开始而不是从最后完成的步骤开始。我怎样才能让表单从那里开始——理想情况下,打印一些像"欢迎回来!"这样的东西?

从FormFlow停止的地方开始

您应该捕获FormCanceledException<T>,其中T是您的表单模型。一旦你这样做了,你应该能够访问异常的LastForm属性,当用户退出时,你将在那里找到部分表单。

然后你可以使用这个部分形式作为你的表单的初始状态(参见这个相关的问题)。