设置表单流对话框字段值,以后不会提示

时间:2018-06-28 15:12:40

标签: botframework

我正在使用SetDefine()为我的漫游器对话框中的一个字段提供值。

return builder
    .Field(new FieldReflector<CarValuationDialog>(nameof(UserName))
    .SetDefine(async (state, field) =>
    {
        field.SetValue(state, userName);
        return await Task.FromResult(true);
    }))

userName只是函数中调用return builder的变量。属性UserName定义为..

public string UserName { get; set; }

我遇到的问题是,当我在模拟器中运行bot时,我首先看到的是它。

enter image description here

如何配置属性UserName,以使它不会在僵尸程序中提示输入值?

2 个答案:

答案 0 :(得分:2)

由于您正在定义用户名字段,并且您不希望机器人提示该字段,因此可以使用.SetActive

            .Field(new FieldReflector<CarValuationDialog>(nameof(UserName))
            .SetDefine(async (state, field) =>
            {
                field.SetValue(state, "username");
                return await Task.FromResult(true);
            })
            .SetActive((state) => String.IsNullOrEmpty(state.UserName)))

因此,仅当该字段为Null或为空时,才会启动提示。您可以尝试其他返回布尔值的功能,以更好地匹配您的用例。

答案 1 :(得分:0)

创建一个新类,其中包含表单中所需的所有项目。然后在该类中创建一个返回IForm<class>的静态方法。

[Serializable]
public class CallNotesForm
{
    [Prompt("What is the subject of the call?")]
    public string Subject { get; set; }

    [Prompt("What are the call details?")]
    public string Notes { get; set; }

    public static IForm<CallNotesForm> BuildForm()
    {
        return new FormBuilder<CallNotesForm>()
                    .Message("Please enter some details about your call. Enter 'Help' for more information")
                    .Build();
    }
}

然后在调用表单的方法中

IForm<CallNotesForm> formVM = new CallNotesForm() { Direction = CallNotes.CallDirection.Outgoing };
IFormDialog<CallNotesForm> form = new FormDialog<CallNotesForm>(formVM, CallNotesForm.BuildForm, FormOptions.PromptInStart);
context.Call(form, CallDetailsAsync);