2017-10-30 22 views
2
내가 양식 흐름 예제를 사용하여 작업입니다

에 있는지 확인이 예는 사용자들이 자신의 샌드위치에 원하는 토핑을 선택할 수 있도록 formFlow를 사용 Here추가 확인 단계 - 토핑 재고

을 발견했다.

내가 추가하는 각각의 토핑이 재고가 있는지 확인하고 사과 메시지를 보내지 않고 사용자가 다른 토핑을 ​​대신 입력하도록 확인하는 확인 단계를 추가하려고합니다. 아래에 코드 예제가 나와 있습니다.

public static IForm<SandwichOrder> BuildForm() 
{ 

return new FormBuilder<SandwichOrder>() 
    .Message("Welcome to the sandwich order bot!") 
    .Field(nameof(Sandwich)) 
    .Field(nameof(Length)) 
    .Field(nameof(Bread)) 
    .Field(nameof(Cheese)) 
    .Field(nameof(Topping), 
     validate: async (state, value) => 
     { 
      foreach(var t in Topping) 
      { 
       if (!isToppinginStock) 
       { 
        // Apology message 
        //Code to ask topping question again 
       } 
      } 


     }) 
    .Message("For sandwich toppings you have selected {Toppings}.") 

    .Build(); 
    } 

누구든지 올바른 방향으로 나를 도울 수 있다면 정말 고맙겠습니다. 다음과 같은

답변

2

무언가가 당신의 시나리오에는 작동한다 :

.Field(nameof(Toppings), 
    validate: async (state, value) => 
    { 
     var values = ((List<object>)value).OfType<ToppingOptions>(); 
     var notInStock = GetOutOfStockToppings(values); 

     if(notInStock.Any()) 
      return new ValidateResult { IsValid = false, Value = null, Feedback = $"These are not in stock: {string.Join(",", notInStock.ToArray())} Please choose again." }; 

     return new ValidateResult { IsValid = true, Value = values}; 
    }) 

static IEnumerable<ToppingOptions> NotInStock = new[] { ToppingOptions.Lettuce, ToppingOptions.Pickles }; 
private static IEnumerable<ToppingOptions> GetOutOfStockToppings(IEnumerable<ToppingOptions> toppings) 
{ 
    List<ToppingOptions> result = new List<ToppingOptions>(); 
    foreach(var topping in toppings) 
    { 
     if (NotInStock.Contains(topping)) 
      result.Add(topping); 
    } 
    return result; 
} 
+1

그것을 맞았다. 건배 – Witted