2017-04-08 69 views
0

這是我的基本代碼什麼是切換從或退出formFlow到對話框中博特框架

enter image description here 的最佳途徑formFlow工作正常,並檢查,如果條件之後,就應該去別的部分,它在它的部分,但在其他部分寫這行代碼

    await Conversation.SendAsync(activity,() => new AskMeAnything()); 

AskMeAnything是一個類實現Idialog。問題是,它再次去/調用formflow而不是跳到上面提到的對話框中。

我讀了關於IdialogStack,但無法理解如何刪除堆棧頂部的對話框或與之相關的東西。

我需要幫助移動到其他對話框,而無需循環到formflow。

感謝

回答

1

你打電話Conversation.SendAsync(...)你實際上是爲你的談話創建一個根對話框中的第一次。每次連續調用機器人將仍然進入控制器,但將被路由到堆棧頂部的對話框。

因此,當您第二次調用Conversation.SendAsync(...)時,實際上是在嘗試更改堆棧中的根對話框。我不認爲這是可能的,這就是爲什麼你的表單被再次調用。

要解決這個問題,我會創建一個不同的對話框,並使該對話框成爲根對話框。在此根對話框中,您可以調用您的表單和任何其他對話框。

+0

感謝評論,只是想了解你,讓我說我創建了一個根dilaog並調用了一次子對話框,所以下一次,根對話框將在堆棧頂部,然後第一個子對話框將會在它下面,那麼我的新子對話框怎麼會被調用? ..任何示例或詳細的解釋將幫助 –

+0

不,這是不正確的。當您使用「調用」或「轉發」方法從根對話框啓動子對話框時,子對話框將置於堆棧的頂部。所有消息都來自控制器,指向堆棧的頂部,在此操作之後將成爲子對話框。所以消息將不再在根對話框中處理。一旦對話完成後,您可以調用「完成」方法結束對話框,然後將子對話框從堆棧中取消,使根對話框成爲堆棧頂部。 –

+0

謝謝Xeno - 如果你通過看到上面的圖片給出我的概率的解決方案,我會更加高興..我打電話給「makerootdialog」使用Conversation.sendasync()調用表單流。一旦表單流完成,我打電話給它的.Done()方法。根據新的請求,它會轉到其他部分(如圖所示),在那裏我使用Conversation.SendAsync(...)調用另一個對話框,但是再次調用Formflow。你能幫助我嗎? –