![](/img/trans.png)
[英]Bot framework FormFlow with dynamic fields (questions) & options (answers) using an instance of an object
[英]Bot Framework - Dynamic FormFlow Depending on previous Answers
我對此有些困惑,甚至不知道這是否完全可能。 在網上搜索時,我遇到了喬·梅奧(Joe Mayo)這樣的帖子: http : //mayoster.blogspot.com.es/2016/05/dynamic-formflow-forms-in-bot-builder.html ,他解釋了如何使用動態字段而不是預定義的枚舉。
到目前為止,到目前為止,真正的問題是值不是“定義在某處”,而是取決於FormFlow的先前答案。 這可能嗎? (考慮到表單構建一次完成?
例:
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()
;
}
“ // PREVIOUS ANSWER HERE”部分確定應在其中加載字符串的區域。 嘗試了所有我能想到的內容,並進行了搜索,但均未成功,主要是因為它是一步執行。
根據一些意見,顯然一個選擇是,在我得到想要的答案之后,使用存儲的值啟動一個新的FormFlow,但這似乎不是最干凈的方法。
我真的很感激此事。
提前致謝。
終於想通了!
最終,您可以查找先前字段的狀態並將其(例如,作為字符串)發送給新函數:
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()
;
}
但是,您必須注意以下事實:該值僅在輸入{Get;之后才可用於下一個字段(如果存在)”。 組;}。 否則它將保持為空。
也就是說,在我的示例中,我可以獲得ItemType值,因為在執行ItemGroup字段之前,它已經為上一個定義了值。
點域之外覆蓋,如果你想將它命名.OnCompletion你必須從“現場”屬性做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.