2016-11-08 4 views
2

私はさまざまなダイアログ間で状態を渡そうとしていますが、a)ダイアログを正しく呼び出せない、またはb)正しくボットステートを使用していないかのいずれかです。ボットフレームワーク - ダイアログ間のボットステートは値を失います

2番目のダイアログを開いたときに何が失われているのか教えていただけますか? context.forward()を使用して開かれています。

messagescontrollerでは、私は簡単に状態を設定できます。

StateClient stateClient = activity.GetStateClient(); 
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); 
userData.SetProperty<bool>("SessionActive", true); 
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); 

次に、他のダイアログへのアクセスを制御するダイアログを開きます。

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

これは別のクラスです。

public class DialogController : IDialog<object> 

このダイアログでは、「true」と設定した値にアクセスできます。

StateClient stateClient = new StateClient(new Uri(message.ServiceUrl)); 
BotData userData = await stateClient.BotState.GetUserDataAsync(message.ChannelId, message.From.Id); 
userData.GetProperty<bool>("SessionActive") 

しかし、このダイアログでは、次に状態に応じて2番目のダイアログを開きます。

await context.Forward(new SubDialog(), ThrowOutTask, message, cts.Token); 

これも別のクラスです。私は以前のようにまったく同じように、「SessionActive」状態を取得しようとすると、

public class SubDialog: IDialog<object> 

ただし、値はfalseである(すなわち、その最初にインスタンス化)..?

答えて

0

Dialogクラスから状態を要求しているときは、コンテキストを使用して状態を行う必要があります。

bool sessionActive = context.UserData.Get<bool>("SessionActive"); 
+0

UserData.SetValueを使用しているときに動作します。多くのことに感謝します。 – Taylor

関連する問題