2017-10-13 10 views
0

私はボットがいくつかのチュートリアルを使用してどのように動作するかを学習しようとしています。同じ方法でFormFLowから保存されたデータにアクセスする方法

This blog postは、フォームフローを説明する際に非常に便利ですが、データの保存に関しては、私がやろうとしているプロジェクトで質問があります。

彼は下図のように、それは.OnCompletion内のデータを保存している処理方法:

public static IForm<ProfileForm> BuildForm() 
{ 
    return new FormBuilder<ProfileForm>() 
      .Message("Welcome to the profile bot!") 
      .OnCompletion(async (context, profileForm) => 
      { 
       // Set BotUserData 
       context.PrivateConversationData.SetValue<bool>(
        "ProfileComplete", true); 
       context.PrivateConversationData.SetValue<string>(
        "FirstName", profileForm.FirstName); 
       context.PrivateConversationData.SetValue<string>(
        "LastName", profileForm.LastName); 
       context.PrivateConversationData.SetValue<string>(
        "Gender", profileForm.Gender.ToString()); 
       // Tell the user that the form is complete 
       await context.PostAsync("Your profile is complete."); 
      }) 
      .Build(); 
} 

に彼が設定された変数にアクセスする方法を使用して、メッセージコントローラであるしかし:

// Get any saved values 
     StateClient sc = activity.GetStateClient(); 
     BotData userData = sc.BotState.GetPrivateConversationData(
      activity.ChannelId, activity.Conversation.Id, activity.From.Id); 
     var boolProfileComplete = userData.GetProperty<bool>("ProfileComplete"); 
     if (!boolProfileComplete) 
     { 
      // Call our FormFlow by calling MakeRootDialog 
      await Conversation.SendAsync(activity, MakeRootDialog); 
     } 
     else 
     { 
      // Get the saved profile values 
      var FirstName = userData.GetProperty<string>("FirstName"); 
      var LastName = userData.GetProperty<string>("LastName"); 
      var Gender = userData.GetProperty<string>("Gender"); 

フォームフローと同じクラスの中でこれを行うには、とにかくありますか?あなたが提供することができます任意の助け

public IForm<DVLADialog> BuildForm() 
    { 

     OnCompletionAsyncDelegate<DVLADialog> completeForm = async(context, state) => 
     { 

      try 
      {      
       if (dvla.AbiGroupOneToFifty <= 30 && Value <= 50000) 
       { 
        await context.PostAsync($"Success!."); 
       } 
       else 
       { 
        await context.PostAsync("Uh Oh"); 
       } 
      } 
      catch (Exception ex) 
      { 
       throw; 
      } 

     }; 

     return new FormBuilder<DVLADialog>() 
      .Field(nameof(Value)) 
      .Field(nameof(DateOfPurchase)) 
      .Field(nameof(Modifications)) 
      .Field(nameof(Stored)) 
      .Field(nameof(Postcode)) 
      .Confirm("Is this all correct? {*}") 
      .OnCompletion(async (context, save) => 
      { 
       // Set BotUserData 
       context.PrivateConversationData.SetValue<bool>(
        "ProfileComplete", true); 
       context.PrivateConversationData.SetValue<float>(
        "Value", save.Value); 
       context.PrivateConversationData.SetValue<DateTime>(
        "Date Of Purchase", save.DateOfPurchase); 
       context.PrivateConversationData.SetValue<string>(
        "Mods", save.Modifications.ToString()); 
       context.PrivateConversationData.SetValue<string>(
        "Stored", save.Stored.ToString()); 
       context.PrivateConversationData.SetValue<string>(
        "Postcode", save.Postcode.ToString()); 

       // Tell the user that the form is complete 
       await context.PostAsync("Your profile is complete."); 
      }) 
      .OnCompletion(completeForm) 
      .Build(); 
    } 

ありがとう:私は、現在進行中の会話を導くために、比較としてそれを使用しようとしています。

+0

テストを '.OnCompletion(async(context、save)=> ...')に追加するだけでいいのですか? –

答えて

0

正しい方法が見つかりました。私がオンラインで読んだ多くの情報によると、FormFlowsはユーザーの入力を保存しません。それは状態で保存されます。例えばstate.Value。したがって、コード:

public IForm<DVLADialog> BuildForm() 
    { 

     OnCompletionAsyncDelegate<DVLADialog> completeForm = async(context, state) => 
     { 

      try 
      {     

       if (dvla.AbiGroupOneToFifty <= 30 && state.Value <= 50000) 
       { 
        await context.PostAsync($"Yay"); 
       } 
       else 
       { 
        await context.PostAsync("Uh Oh"); 
       } 
      } 
      catch (Exception ex) 
      { 
       throw; 
      } 

     }; 

     return new FormBuilder<DVLADialog>() 
      .Field(nameof(Value)) 
      .Field(nameof(DateOfPurchase)) 
      .Field(nameof(Modifications)) 
      .Field(nameof(Stored)) 
      .Field(nameof(Postcode)) 
      .Confirm("Is this all correct? {*}") 

      .OnCompletion(completeForm) 
      .Build(); 
    } 
} 

問題は私が思ったよりずっと簡単でした。これは将来誰かを助けてくれることを願っています。

関連する問題