机器人构建器:自适应卡 - 在提交时调用方法

时间:2018-05-07 08:34:21

标签: azure botframework form-submit adaptive-cards

我需要创建一个用户必须填写并发送它的表单。所以我必须创建一个调用另一个方法的提交按钮,但我找不到提交操作和对另一个方法的调用之间的链接。

我的表格的脚本是:

public Attachment CreateAdaptiveCardwithEntry()
        {
            var submitActionData = JObject.Parse("{ \"Type\": \"SaveFunction\" }");
            var card = new AdaptiveCard()
            {

                Body = new List<CardElement>()
                {  
                    // Hotels Search form  

                    new TextBlock() { Text = "Titre de la note des frais" },
                    new TextInput()
                    {
                        Id = "titre",
                        Speak = "<s>Veuillez saisir le titre</s>",
                        Placeholder = "Veuillez saisir le titre",
                        Style = TextInputStyle.Text
                    },

                },

                Actions = new List<ActionBase>()
                {
                    new SubmitAction()
                    {
                       DataJson = submitActionData.ToString()

                    }
                }
            };

我的卡片的脚本是:

    var replyMessage = context.MakeMessage();
    replyMessage.Attachments = new List<Attachment> { FraisDialog.CreateAdaptiveCardwithEntry() };
    await context.PostAsync(replyMessage, CancellationToken.None);
    context.Wait(MessageReceived);

MessageReceivedAsync中的脚本是:

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
        {
            var message = await result;

            if (message.Value != null)
            {
                // Got an Action Submit
                dynamic value = message.Value;
                string submitType = value.Type.ToString();
                switch (submitType)
                {
                    case "SaveFunction":
                        await context.PostAsync("Please complete all the search parameters:\n");
                        return;
                }
            }
        }

在这个例子中,我需要发送带有Id =“titre”的信息并在之后进行pprocess,我不知道如何发送它(DataJson?)和where(MessageReceivedAsync?)。有人能帮我吗 ?我是否需要为卡片创建另一个对话框?

Ps:所有这些代码都在rootDialog中。

1 个答案:

答案 0 :(得分:0)

  

我没有收到消息'请完成所有搜索参数'

如果您的所有代码都在RootDialog中,请使用context.Wait( MessageReceivedAsync );发送附件后。

  

我需要发送带有Id =“titre”的信息并在之后处理

单击提交按钮时,表单数据将照常发送到MessageReceived方法。如果您只想访问自适应卡中的字段,则可以访问动态变量值。这是一个例子。

var message = await result;

if (message.Value != null)
{
    // Got an Action Submit
    dynamic value = message.Value;
    string submitType = value.Type.ToString();
    switch (submitType)
    {
        case "SaveFunction":
            if(value.titre == "")
            {
                await context.PostAsync("Please complete all the search parameters:\n");
            }
            else
            {
                await context.PostAsync($"You entered {value.titre}");
            }
            return;
    }
}