首页 > 解决方案 > 机器人生成器:自适应卡片 - 提交时调用方法

问题描述

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

我的表格脚本是:

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" 发送信息并在之后对其进行处理,我不知道如何发送它(DataJson ?)和哪里(MessageReceivedAsync ?)。有人能帮我吗 ?我需要为卡创建另一个对话框吗?

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

标签: azurebotframeworkform-submitadaptive-cards

解决方案


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

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

我需要使用 Id = "tire" 发送信息并在之后进行处理

单击提交按钮时,表单数据照常发送到 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;
    }
}

推荐阅读