2016-11-09 67 views
1

繼AnnotatedSandwichBot例如,可以處理表單填寫取消此:開始FormFlow它被停止

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"); 
       } 
      }); 

當用戶突然類型「再見」,機器人成功地說道You quit on FieldName(和一個巨大的堆棧之後用Bot Emulator上的FormCanceledException跟蹤)。

但是,如果我只是再說一次,它會從開始的形式開始,而不是從最後完成的步驟開始。我怎麼能這樣做,所以表單從那裏開始 - 理想情況下打印「歡迎回來!」之類的東西?

+0

Bot State Service的文檔說它的目的是解決像我問他們最後一個問題的問題*,但是我不知道如何/在哪裏將它與FormFlow集成。 – VillasV

回答

1

您應該看到一個FormCanceledException<T>,其中T是您的表單模型。一旦你這樣做,你應該能夠訪問異常的LastForm屬性,在這裏你可以找到用戶退出時的部分表單。

然後,您可以使用該部分表單作爲表單的初始狀態(請參閱this相關問題)。