Я использую FormFlow для создания своего бота с помощью botFrameWork (C#). Я хочу попросить пользователя выбрать один из четырех отчетов, и на основе выбора я хочу включать и выключать определенные поля и задавать только те вопросы, которые имеют отношение к выбору.
Ниже приводится перечисление типов отчетов:
public enum ReportType
{
Application = 1,
Emotion,
AppVsEmotion,
Help
}
Вот все поля:
public bool AskToChooseReport = true;
[Prompt("What kind of report you would like? {||}")]
public ReportType? Report { get; set; }
[Prompt("What is the application name?")]
public string ReportApplicationName { get; set; }
[Prompt("Please enter the emotion name? {||}")]
public string EmotionName { get; set; }
[Prompt("What is starting date (MM-DD-YYYY) for report?{||}")]
public string StartDate { get; set; }
[Prompt("What is the end date (MM-DD-YYYY) for report? {||}")]
public string EndDate { get; set; }
public string ReportRequest = string.Empty;
У меня четыре случая:
Случай 1. Если пользователь выбирает Приложение, я хочу спросить пользователя только о ReportApplicationName, Дате начала, Дате окончания.
Случай 2: если пользователь выбирает Emotion, тогда я хочу спросить пользователя только о EmotionName и StartDate, EndDate.
Случай 3. Если пользователь выбирает AppVsEmotion, я хочу спросить пользователя о ReportApplicationName, EmotionName и Дате начала, Дата окончания
Случай 4: если пользователь выбирает Справка, я хочу спросить только о ReportApplicationName, StartDate, EndDate
Я пытался сделать следующее, но это не работает:
public static IForm<StandardInfoForm> BuildForm()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
var parser = new Parser();
return new FormBuilder<StandardInfoForm>()
.Message("Welcome to reporting information!!")
.Field(new FieldReflector<StandardInfoForm>( nameof(Report))
.SetActive( state => state.AskToChooseReport)
.SetNext( (value, state) =>
{
var selection = (ReportType)value;
if (selection == ReportType.Application)
{
state.ReportRequest = "application";
return new NextStep(new[] { nameof(ReportApplicationName) });
}
else if (selection == ReportType.Emotion)
{
state.ReportRequest = "emotion";
return new NextStep(new[] { nameof (EmotionName) });
}
else if (selection == ReportType.AppVsEmotion)
{
state.ReportRequest = "application,emotion";
return new NextStep(new[] { nameof (ReportApplicationName), nameof(EmotionName) });
}
else if (selection == ReportType.Help)
{
state.ReportRequest = "help";
return new NextStep(new[] { nameof(ReportApplicationName) });
}
else
{
return new NextStep();
}
}))
.Field(nameof(StartDate))
.Field(nameof(EndDate), EndReportDateActive)
.Confirm("Would you like to confirm.Yes or No")
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
.Build();
}
Пожалуйста, помогите мне, если я слишком наивен. Я попытался выполнить следующее: Изменить поток сообщений в Microsoft Bot Framework< /а>