我正在使用FormFlow使用botFrameWork(C#)構建我的bot。我想要求用戶選擇四個報告中的一個,並根據選擇我想打開和關閉某些字段,並只詢問與選擇相關的問題。如何根據FormFlow中其他字段的值設置和關閉不同的字段
Follwoing是報告類型的枚舉:
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:如果用戶slects 應用 ,然後我只想問用戶約ReportApplicationName,起始日期,結束日期
案例2:如果用戶選擇情感,那麼我只想問用戶約EmotionName和起始日期,結束日期
案例3:如果用戶選擇AppVsEmotion,我想問問用戶關於ReportApplicationName,EmotionName和起始日期,結束日期
案例4:如果用戶選擇幫助,然後我只想問ReportApplicationName,起始日期,結束日期
我試着做以下,但不起作用:
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();
}
請幫我,如果我太天真了。我試圖按照此: Change Flow Of Message In Microsoft Bot FrameWork
爲什麼SetNext不工作? –
@EzequielJadib它不會提示用戶輸入下一個字段,並退出表單,但是會出現異常** Microsoft.Bot.Builder.FormFlow。FormCanceledException ** –
@EzequielJadib下面是mscorlib.dll' –