2017-01-04 2 views
0

Ich bin ein bisschen fest hier auf, weiß nicht, ob es überhaupt möglich ist. Im Internet bin ich auf Beiträge wie diesen von Joe Mayo gestoßen: http://mayoster.blogspot.com.es/2016/05/dynamic-formflow-forms-in-bot-builder.html, wo er erklärt, wie dynamische Felder anstelle von vordefinierten Enums verwendet werden.Bot Framework - Dynamic FormFlow Abhängig von vorherigen Antworten

Soweit so gut, kommt die eigentliche Frage, wenn die Werte nicht "irgendwo definiert" sind, sondern stattdessen auf eine vorherige Antwort des FormFlow. Ist das möglich? (Bedenkt man, dass das Formular Körperbau auf einmal fertig ist

Beispiel:?.

public static IForm<ItemQueue> BuildForm() 
    { 

     return new FormBuilder<ItemQueue>()     
      .Field(nameof(ItemQueue.ItemFamily)) 
      .Field(nameof(ItemQueue.ItemType)) 
      .Field(new FieldReflector<ItemQueue>(nameof(ItemGroup)) 
       .SetType(null) 
       .SetDefine((state, field) => 
       { 
        List<string> groupList= GetItemGroups(//PREVIOUS ANSWER HERE); 

        foreach (var group in groupList) 
         field 
          .AddDescription(module, module) 
          .AddTerms(module, module); 
        return Task.FromResult(true); 

       })) 
      .AddRemainingFields() 
      .Build() 
      ; 
    } 

Wo die „// vorherige Antwort HERE“ Teil der Zone bestimmt wurden, sollten die Zeichenfolge geladen werden versucht alles, was ich denken konnte, von und gesucht ohne Erfolg, vor allem, weil es als ein einziger Schritt ausgeführt wird ..

Basierend auf einigen Meinungen scheint eine Option zu sein, nachdem ich die Antwort, die ich will, ein neues FormFlow mit dem gespeicherten Wert, aber scheint nicht der sauberste Weg, dies zu tun.

Ich schätze jede Hilfe in dieser Angelegenheit sehr.

Vielen Dank im Voraus.

Antwort

0

Endlich herausgefunden!

endet, dass Sie für den Zustand der vorherigen Felder gehen können und dass senden (als Zeichenfolge, zum Beispiel) auf eine neue Funktion:

public static IForm<ItemQueue> BuildForm() 
{ 

    return new FormBuilder<ItemQueue>()     
     .Field(nameof(ItemQueue.ItemFamily)) 
     .Field(nameof(ItemQueue.ItemType)) 
     .Field(new FieldReflector<ItemQueue>(nameof(ItemGroup)) 
      .SetType(null) 
      .SetDefine((state, field) => 
      { 
       List<string> groupList= GetItemGroups(state.ItemType.ToString()); 

       foreach (var group in groupList) 
        field 
         .AddDescription(module, module) 
         .AddTerms(module, module); 
       return Task.FromResult(true); 

      })) 
     .AddRemainingFields() 
     .Build() 
     ; 
} 

Sie haben jedoch die Tatsache passen, dass die Der Wert wird nur dann für das nächste Feld (wenn es existiert) "verwendbar" sein, nachdem es in das {Get; Einstellen;}. Sonst bleibt es null.

, die in meinem Beispiel ist, kann ich ItemType Wert erhalten, weil, bevor Sie es bereits ItemGroup Feld Ausführung den Wert für die vorherige definiert.

Außerhalb der .field überschreibt, wenn Sie es .OnCompletion Sie es aus dem „Feld“ Eigenschaft zu tun haben, anrufen möchten.

Verwandte Themen