根据选择跳过问题

时间:2017-11-25 22:44:13

标签: c# botframework formflow

我想知道是否有可能根据用户的选择,可以跳过所有问题并终止对话。

示例,我有下一个代码:

public ContentClassification ContentClassification {get;set;}

public StatusOfContent StatusContent {get; set;}

public Accessibility ExternalSharing {get; set;}

根据“ContentClassification”的选择,跳过其他问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

根据“ContentClassification”的选择,跳过其他问题。

您可以使用FieldReflector来实现自己的var query = Customer.find({}).populate('address'); query.exec(function (err, customers) { console.log('Customers: '+ customers); }); ,例如:

IField

public enum ContentClassification { Confidential_Restricted = 1, Confidential_Secret = 2, Public = 3, Strictly_Confidential = 4, help = 5 }; public enum StatusContent { Status1, Status2 } public enum Accessibility { Accessibility1, Accessibility2 } [Serializable] public class Classification { public ContentClassification? Choice { get; set; } public StatusContent? StatusOfContent { get; set; } public Accessibility? Accessibility { get; set; } public static bool Confirmation = true; public static IForm<Classification> BuildForm() { return new FormBuilder<Classification>() .Message("You want to") .Field(new FieldReflector<Classification>(nameof(Choice)) .SetNext((value, state) => { var selection = (ContentClassification)value; if (selection == ContentClassification.help) { Confirmation = false; state.Accessibility = null; state.StatusOfContent = null; } else { Confirmation = true; } return new NextStep(); })) .Field(new FieldReflector<Classification>(nameof(StatusOfContent)) .SetActive(state => Confirmation)) .Field(new FieldReflector<Classification>(nameof(Accessibility)) .SetActive(state => Confirmation)) .Build(); } }

RootDialog

使用此代码,当用户在第一个对话框[Serializable] public class RootDialog : IDialog<object> { public Task StartAsync(IDialogContext context) { var form = new FormDialog<Classification>(new Classification(), Classification.BuildForm, FormOptions.PromptInStart, null); context.Call(form, this.GetResultAsync); return Task.CompletedTask; } private async Task GetResultAsync(IDialogContext context, IAwaitable<Classification> result) { var state = await result; //TODO: } } 中选择Help时,它将跳过以下两个问题,您将获得Choice中的result GetResultAsync { {1}},Choice = HelpStatusOfContent = null等等。