我对此有点困惑,甚至不知道它是否完全有可能。在网上搜索我发现了像Joe Mayo这样的帖子:http://mayoster.blogspot.com.es/2016/05/dynamic-formflow-forms-in-bot-builder.html他解释了如何使用动态字段而不是预定义的枚举。
到目前为止,真正的问题是,当值不是“在某处定义”时,而是依赖于FormFlow的先前答案。这可能吗? (考虑到Form Build是一次完成的吗?
示例:
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,但似乎不是最干净的方法。
我非常感谢有关此事的任何帮助。
提前致谢。
答案 0 :(得分:0)
终于明白了!
结束你可以找到前面字段的状态并将其(例如字符串)发送到新函数:
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()
;
}
但是,你必须要注意这个价值只有&#34;可用&#34;进入{Get;之后的下一个字段(如果存在)组;}。否则它将保持为空。
也就是说,在我的示例中,我可以获得 ItemType 值,因为在执行 ItemGroup 字段之前,它已经定义了前一个的值。
在 .Field 覆盖之外,如果您想将其称为 .OnCompletion ,则必须从&#34;字段&#34;属性。