簡體   English   中英

Bot框架-動態FormFlow取決於先前的答案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM