Bot Builder: Адаптивные карты - вызов метода при отправке - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно создать форму, в которой пользователь должен ее заполнить и отправить. Поэтому мне нужно создать кнопку отправки, которая вызывает другой метод, но я не смог найти связь между действием отправки и вызовом другого метода.

Сценарий моей формы:

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.

1 Ответ

0 голосов
/ 07 мая 2018

Я не получаю сообщение «Пожалуйста, заполните все параметры поиска»

Если весь ваш код находится в 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;
    }
}
...