重点是:根据用户在运行使用 Microsoft.Bot.Builder.FormFlow 构建的表单时选择的答案,我希望在此过程中不时打印出当前的小计。
我曾考虑在我的 FormBuilder 上使用 Message() 方法,但由于 BuildForm() 方法本身是静态的,我不确定如何检查已设置属性的值。
有任何想法吗?
重点是:根据用户在运行使用 Microsoft.Bot.Builder.FormFlow 构建的表单时选择的答案,我希望在此过程中不时打印出当前的小计。
我曾考虑在我的 FormBuilder 上使用 Message() 方法,但由于 BuildForm() 方法本身是静态的,我不确定如何检查已设置属性的值。
有任何想法吗?
感谢您的反馈意见。现在没有很好的方法来做到这一点。我刚刚将以下内容添加到 Builder 库中。这应该在我们下周初的下一个版本中。它会满足你的需求吗?
#region Documentation
/// <summary> Given <paramref name="state"/> return a <see cref="PromptAttribute"/> with a template for the message to display. </summary>
/// <typeparam name="T"> Form state type. </typeparam>
/// <param name="state"> Form state. </param>
/// <returns> A PromptAttribute describing the message to display. </returns>
#endregion
public delegate PromptAttribute MessageDelegate<T>(T state);
IFormBuilder<T>
...
#region Documentation
/// <summary> Generate a message using a delegate. </summary>
/// <param name="generateMessage"> Delegate for building message. </param>
/// <param name="condition"> Whether or not this step is active. </param>
/// <returns>This form.</returns>
#endregion
IFormBuilder<T> Message(MessageDelegate<T> generateMessage, ConditionalDelegate<T> condition = null);
如果您迫不及待,您可以使用 validate 更新表单状态中的总计字段并在消息中显示字段值。尽管该字段是用户流的一部分,但这具有缺点。
您也可以自己实现 IField 并从 Active 中获取最后一个表单状态并生成您自己的提示和识别器。这样做的缺点是工作量更大并且需要用户响应。