2017-11-25 10 views
0

ユーザーの選択に応じて、すべての質問をスキップしてダイアログを終了させることが可能かどうかを知りたいと思います。他の質問をスキップし、 "ContentClassification" の選択に応じ選択肢に応じて質問をスキップ

public ContentClassification ContentClassification {get;set;} 

public StatusOfContent StatusContent {get; set;} 

public Accessibility ExternalSharing {get; set;} 

例は、私は次のコードを持っています。

ありがとうございます。

答えて

1

「ContentClassification」の選択に応じて、他の質問はスキップしてください。

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を選択するときには、例えば、IField自分自身を実装するためにFieldReflectorを使用することができます

Choiceと入力すると、次の2つの質問はスキップされます。resultGetResultAsyncChoice = Help,StatusOfContent = null,Accessibility = nullなど。

関連する問題