【问题标题】:how dynamically add rows to adaptive card?如何动态地将行添加到自适应卡?
【发布时间】:2020-05-13 23:19:03
【问题描述】:

如何创建一个自适应卡,它将为机器人答案创建一个表,但是该机器人有许多行取决于从数据源获取的行,它将从数据源获取名称和 ID,如何在机器人代码下方为自适应卡创建数据并在 UI 中绑定该数据,我不知道如何动态添加行和绑定数据。

public class EchoBot : ActivityHandler
{
    private const string WelcomeText = @"This bot will introduce you to AdaptiveCards.
                                        Type anything to see an AdaptiveCard.";

    // This array contains the file location of our adaptive cards
    private readonly string[] _cards =
    {
        //Path.Combine(".", "Resources", "FlightItineraryCard.json"),
        //Path.Combine(".", "Resources", "ImageGalleryCard.json"),
        //Path.Combine(".", "Resources", "LargeWeatherCard.json"),
        //Path.Combine(".", "Resources", "RestaurantCard.json"),
       // Path.Combine(".", "Resources", "SolitaireCard.json"),
        Path.Combine(".", "Resources", "School.json"),
    };

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        await SendWelcomeMessageAsync(turnContext, cancellationToken);
    }

    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {

        // Random r = new Random();
        var fileRead = System.IO.File.ReadAllText("School.json");
        var item = (JObject)JsonConvert.DeserializeObject(fileRead);
        string classData = item["$data"].ToString();

        AdaptiveTransformer transformer = new AdaptiveTransformer();
        string cardJson = transformer.Transform(fileRead, classData);

        Microsoft.Bot.Schema.Attachment attachment = new Microsoft.Bot.Schema.Attachment();
        attachment.ContentType = "application/vnd.microsoft.card.adaptive";
        attachment.Content = JsonConvert.DeserializeObject(cardJson);
        var attachments = new List<Microsoft.Bot.Schema.Attachment>();

        //var reply = MessageFactory.Attachment(attachments);
        //reply.Attachments.Add(attachment);
        //return reply;

        // var cardAttachment = CreateAdaptiveCardAttachment(_cards[r.Next(_cards.Length)]);

        //turnContext.Activity.Attachments = new List<Attachment>() { cardAttachment };
        await turnContext.SendActivityAsync(MessageFactory.Attachment(attachments), cancellationToken);
        await turnContext.SendActivityAsync(MessageFactory.Text("Please enter any text to see another card."), cancellationToken);
    }

    private static async Task SendWelcomeMessageAsync(ITurnContext turnContext, CancellationToken cancellationToken)
    {
        foreach (var member in turnContext.Activity.MembersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(
                    $"Welcome to Adaptive Cards Bot {member.Name}. {WelcomeText}",
                    cancellationToken: cancellationToken);
            }
        }
    }

    private static Microsoft.Bot.Schema.Attachment CreateAdaptiveCardAttachment(string filePath)
    {
        var adaptiveCardJson = System.IO.File.ReadAllText(filePath);
        var adaptiveCardAttachment = new Microsoft.Bot.Schema.Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = JsonConvert.DeserializeObject(adaptiveCardJson),
        };
        return adaptiveCardAttachment;
    }

【问题讨论】:

  • 这是一道作业题吗?
  • 不,这不是作业题
  • (由于这个帖子有多个人,如果你想让我看到你的回复,你必须@提及我。)你能解释一下这些问题有什么不同吗? How do dynamically bind data to adaptive card?
  • 你还在做这个吗?

标签: c# bots adaptive-cards


【解决方案1】:

您需要将模板和数据分开,而不是从路径中获取静态文件并将其放入附件中。

检查以下内容:

https://docs.microsoft.com/en-us/adaptive-cards/templating/language

另外,这个有一个如何分离模板和数据的例子,

How to map JSON Array with Adaptive Card Row - Using Designer to Create Template

完成此操作后,您将需要使用模板 API 并使用代码呈现卡片。

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2020-03-29
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多