Ich möchte den FormFlow-Dialog verwenden, aber alle Beispiele, die ich gesehen habe, fordern den Benutzer auf, eine Auswahl aus einem Enum zu treffen. Was ist, wenn die Werte aus einer Datenbank stammen?Wie kann ich dem Benutzer eine Liste von Werten dynamisch mit FormFlow präsentieren
Antwort
Wenn Sie dynamische Werte für ein Feld in einem FormFlow setzen möchten, müssen Sie dynamisch definierte Felder verwenden.
Hier ist die doc und ein vollständiges Beispiel der Nutzung: http://docs.botframework.com/sdkreference/csharp/forms.html#dynamicFields
Grundsätzlich müssen Sie Ihre Daten erhalten (von SQL DB oder anderswo) in der SetDefine Funktion der field.AddDescription mit und field.AddTerms Funktionen.
:)
Hier ist eine Demo, wie dynamische Felder aus der Datenbank in Formflow zu implementieren. Ersetzen Sie StateClass nur durch den Namen Ihrer Klasse und ProperityName durch den Namen Ihrer Eigenschaft. Leider finden Sie zu diesem Zeitpunkt noch keine Informationen über FieldReflector in der offiziellen Dokumentation von Microsoft Bot Framework.
public static IForm<StateClass> BuildForm()
{
return new FormBuilder<StateClass>()
.Message("Start Message")
.Field(new FieldReflector<StateClass>(nameof(ProperyName))
.SetType(null)
.SetDefine(async (state, field) =>
{
List<string> list = QueryFromDatabase();
foreach (string item in list)
field
.AddDescription(item , item)
.AddTerms(item , item);
return true;
}))
.AddRemainingFields()
.OnCompletionAsync(async (context, state) =>
{
await context.PostAsync("Finish message");
})
.Build();
}
Können Sie bitte ein einfaches Beispiel angeben? –