0
나는 여러 가지 자습서를 사용하여 봇의 작동 방식을 배우려고 노력했습니다.동일한 방법으로 FormFLow에서 저장된 데이터에 액세스하는 방법
This blog post은 formflows를 설명 할 때 매우 편리하지만 데이터 저장과 관련하여 제가 수행하려고하는 프로젝트에 대한 질문이 있습니다.
그 아래와 같이 그것이 .OnCompletion의 데이터를 저장한다 취급하는 방법 :
// 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 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();
}
그러나 방식이 그 설정 변수 액세스를 사용하여 메시지 제어기에 어쨌든 formflow와 같은 클래스 안에서이 작업을 수행 할 수 있습니까? 진행중인 대화를 안내하기 위해 비교로 사용하려고합니다.
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();
}
도움을 주셔서 감사합니다.
'.OnCompletion (async (context, save) => ... ')에 테스트를 추가하지 않는 이유는 무엇입니까? –