【问题标题】:Is there a way I can give column padding to an adaptive card- Adaptive MS BOT有没有办法可以为自适应卡提供列填充 - 自适应 MS BOT
【发布时间】:2020-11-17 04:22:04
【问题描述】:

我正在使用自适应卡片来使用自适应卡片模板包在表格中显示动态内容。

我一直在定制它,但有一栏仍然拒绝到位,该栏总是比其他栏有更多的内容。所以它掉出了行,因此扩大了表格并使其看起来很丑。[![在此处输入图像描述][1]][1]

async testTableData(context) {
var tablePayLoad = {
  $schema: "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.0",
  "body": [
    {
      "type": "TextBlock",
      "weight": "bolder",
      "size": "Medium",
      "text": "Details",
      "horizontalAlignment": "left",
      "separator": true,
    },
    //Databody
    {
      "type": "ColumnSet",
      "separator": true,
      "bleed": true,
      "spacing": "Padding",
      "columns": [
        //Name
        {
          "type": "Column",
          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "Name",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              "wrap": true,
              "text": "${Name}",
              "size": "small",
              "horizontalAlignment": "center",
            },
          ],
        },
        //Mobile NO
        {
          "type": "Column",
          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "Mobile No",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              "wrap": true,
              "text": "${MobileNo}",
              "size": "small",
              "horizontalAlignment": "center",
            },
          ],
        },
        //Email Address
        {
          "type": "Column",
          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "Email",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              "wrap": true,
              "text": "${Email}",
              "size": "small",
              "horizontalAlignment": "center",
            },
          ],
        },
        //DOB
        {
          "type": "Column",
          "separator": true,
          "width": "auto",
          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "D.O.B",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              "wrap": true,
              "text": "${DOB}",
              "size": "small",
              "horizontalAlignment": "center",
            },
          ],
        },

        //House Address
        {
          "type": "Column",
          "separator": true,

          "bleed": true,
          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "Address",
              horizontalAlignment: "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              wrap: true,
              "size": "small",
              "text": "${HouseAddress}",
              horizontalAlignment: "center",
            },
          ],
        },
        //Location
        {
          "type": "Column",
          "separator": true,

          "bleed": true,
          "items": [
            {
              "type": "TextBlock",
              "weight": "bolder",
              "size": "small",
              "text": "Branch",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              "separator": true,
              "wrap": true,
              "size": "small",
              "horizontalAlignment": "center",
              "text": "${Location}",
            },
          ],
        },
      ],
    },

    {
      "type": "TextBlock",
      "weight": "bolder",
      "size": "Medium",
      "text": "Trans.",
      "horizontalAlignment": "left",
      "spacing": "extraLarge",
      "separator": true,
    },

    //Trans.
    {
      "type": "ColumnSet",
      "separator": true,
      "bleed": true,
      "spacing": "Padding",
      "columns": [
        //Amount
        {
          "type": "Column",
          "separator": true,
          "width": "auto",
          "items": [
            {
              "type": "TextBlock",
              "size": "small",
              "weight": "bolder",
              "text": "Amount",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              $data: "${Trans}",
              "separator": true,
              "text": "${Amount}",
              "size": "small",
              "horizontalAlignment": "center",
              "spacing": "ExtraLarge",
            },
          ],
        },
        //Type
        {
          "type": "Column",
          "width": "auto",
          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "size": "small",
              "weight": "bolder",
              "text": "Type",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              $data: "${Trans}",
              "separator": true,
              "text": "${Type}",
              "size": "small",
              "horizontalAlignment": "center",
              "spacing": "ExtraLarge",
            },
          ],
        },
        //Currency
        {
          "type": "Column",
          "width": "auto",
          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "size": "small",
              "weight": "bolder",
              "horizontalAlignment": "center",
              "text": "Currency",
            },
            {
              "type": "TextBlock",
              $data: "${Trans}",
              "separator": true,
              "size": "small",
              "wrap": true,
              "text": "${Currency}",
              "horizontalAlignment": "center",
              "spacing": "ExtraLarge",
            },
          ],
        },
        //Date
        {
          "type": "Column",
          //   "bleed": true,
          //   width: "auto",

          "separator": true,

          "items": [
            {
              "type": "TextBlock",
              "size": "small",
              "text": "Date",
              "weight": "bolder",
              "horizontalAlignment": "center",
              "wrap": true,
            },
            {
              "type": "TextBlock",
              $data: "${Trans}",
              "separator": true,
              "wrap": true,
              "text": "${Date}",
              "horizontalAlignment": "center",
              "size": "small",
              "spacing": "ExtraLarge",
            },
          ],
        },

        //Comment
        {
          "type": "Column",
          //   width: "stretch",
          "separator": true,
          //   "bleed": true,
          "items": [
            {
              "type": "TextBlock",
              "size": "small",
              "weight": "bolder",
              "text": "Comment",
              "horizontalAlignment": "center",
            },
            {
              "type": "TextBlock",
              $data: "${Trans}",
              "separator": true,
              "size": "small",
              "wrap": true,
              "text": "${Comments}",
              "spacing": "ExtraLarge",
              "horizontalAlignment": "center",
            },
          ],
        },
      ],
    },
  ],
};

// Create a Template instance from the table payload
var template = new ACData.Template(tablePayLoad);

// Expand the template with your `$root` data object.
// This binds it to the data and produces the final Adaptive Card payload

var data = [
  {
    Amount: "6000",
    Type: "C",
    Currency: "NGN",
    Date: "2019-07-19T00:00:00Z",
    Comments: "Just a regular comment here",
  },
  {
    Amount: "6000",
    Type: "C",
    Currency: "NGN",
    Date: "2019-07-19T00:00:00Z",
    Comments: "Just another Comment here",
  },
];
var dob = new Date("1990-05-29T00:00:00Z");

var tableCardPayload = template.expand({
  $root: {
    Name: "JOHN DOE",
    MobileNo: "2349082182323",
    Email: "admin@doe.com",
    DOB: dob.toLocaleDateString(),
    HouseAddress: "16, Lagos Street, Lagos",
    Location: "Universe",
    Trans: data,
  },
});

const cardToLoad = CardFactory.adaptiveCard(tableCardPayload);

await context
  .sendActivity({ attachments: [cardToLoad] })
  .then()
  .catch((err) => {
    console.log(err);
  });

},

【问题讨论】:

  • 如果编辑历史记录包含某人的真实联系信息,那么您应该要求 Stack Overflow 为您编辑它。他们已经拒绝了我的请求,因为他们没有看到联系信息是真实的证据。

标签: javascript botframework microsoft-teams adaptive-cards web-chat


【解决方案1】:

要在 AdaptiveCards 中创建表格样式方法,您需要使用 columnSets。然而,列集就是这样,只是一组列,即一行数据。

要拥有一个表格,您需要每行添加一个列集,幸运的是模板可以轻松为我们做到这一点。

您不需要手动创建任何行,您只需将数据绑定到正确的位置。看看这个:

{
"schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.3",
"body": [
    {
        "type": "TextBlock",
        "weight": "Bolder",
        "size": "Medium",
        "text": "Account Details",
        "horizontalAlignment": "left",
        "separator": true
    },
    {
        "type": "ColumnSet",
        "separator": true,
        "bleed": true,
        "spacing": "Padding",
        "columns": [
            {
                "type": "Column",
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "Name",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "text": "${Name}",
                        "size": "Small",
                        "horizontalAlignment": "Center"
                    }
                ],
                "width": "stretch"
            },
            {
                "type": "Column",
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "Mobile No",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "text": "${MobileNo}",
                        "size": "Small",
                        "horizontalAlignment": "Center"
                    }
                ],
                "width": "stretch"
            },
            {
                "type": "Column",
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "Email",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "text": "${Email}",
                        "size": "Small",
                        "horizontalAlignment": "Center"
                    }
                ],
                "width": "stretch"
            },
            {
                "type": "Column",
                "separator": true,
                "width": "auto",
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "D.O.B",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "text": "${DOB}",
                        "size": "Small",
                        "horizontalAlignment": "Center"
                    }
                ]
            },
            {
                "type": "Column",
                "separator": true,
                "bleed": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "Address",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "size": "Small",
                        "text": "${HouseAddress}",
                        "horizontalAlignment": "Center"
                    }
                ],
                "width": "stretch"
            },
            {
                "type": "Column",
                "separator": true,
                "bleed": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "weight": "Bolder",
                        "size": "Small",
                        "text": "Branch",
                        "horizontalAlignment": "Center"
                    },
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "wrap": true,
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "text": "${DomicileBranch}"
                    }
                ],
                "width": "stretch"
            }
        ]
    },
    {
        "type": "TextBlock",
        "weight": "Bolder",
        "size": "Medium",
        "text": "Last Five Transactions",
        "horizontalAlignment": "left",
        "spacing": "ExtraLarge",
        "separator": true
    },
    {
        "type": "ColumnSet",
        "separator": true,
        "bleed": true,
        "spacing": "Padding",
        "columns": [
            {
                "type": "Column",
                "separator": true,
                "width": 20,
                "items": [
                    {
                        "type": "TextBlock",
                        "size": "Small",
                        "weight": "Bolder",
                        "text": "Amount",
                        "horizontalAlignment": "Center"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 10,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "size": "Small",
                        "weight": "Bolder",
                        "text": "Type",
                        "horizontalAlignment": "Center"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 20,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "size": "Small",
                        "weight": "Bolder",
                        "horizontalAlignment": "Center",
                        "text": "Currency"
                    }
                ]
            },
            {
                "type": "Column",
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "size": "Small",
                        "text": "Date",
                        "weight": "Bolder",
                        "horizontalAlignment": "Center",
                        "wrap": true
                    }
                ],
                "width": 20
            },
            {
                "type": "Column",
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "size": "Small",
                        "weight": "Bolder",
                        "text": "Remarks",
                        "horizontalAlignment": "Center"
                    }
                ],
                "width": 30
            }
        ]
    },
    {
        "type": "ColumnSet",
        "separator": true,
        "bleed": true,
        "spacing": "Padding",
        "$data": "${lastFiveTrans}",
        "columns": [
            {
                "type": "Column",
                "separator": true,
                "width": 20,
                "items": [
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "text": "${Amount}",
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "spacing": "ExtraLarge"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 10,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "separator": true,
                        "text": "${TransactionType}",
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "spacing": "ExtraLarge"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 20,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "text": "${Currency}",
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "spacing": "ExtraLarge"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 20,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "text": "${TransactionDate}",
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "spacing": "ExtraLarge"
                    }
                ]
            },
            {
                "type": "Column",
                "width": 30,
                "separator": true,
                "items": [
                    {
                        "type": "TextBlock",
                        "text": "${Remarks}",
                        "size": "Small",
                        "horizontalAlignment": "Center",
                        "spacing": "ExtraLarge"
                    }
                ]
            }
        ]
    }
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
}

这应该做你想做的事。你也有各种小问题。 使用 $data 属性时,您需要确保在要重复的元素上只使用一次。在您的情况下,您在同一列中一遍又一遍地重复数据。只有当列的大小与其他元素成比例时,填充、自动间距等才能正常工作。

简而言之: 构建一个包含多个列集的表

  • Columnset1 -> 表头
  • Columnset2-N -> 表格行
  • Columnset3 -> 表页脚(如果需要)

要使它看起来合适,您需要确保从标题到数据的所有列都具有相同的宽度,这最容易通过像素宽度或加权来完成。

【讨论】:

  • 工作正常,我学到了一些新东西。但是,如果我试图迭代到表中的数据很大,我该怎么办?对于中型数据,它可以正常工作,但是一旦数据很大,它就会崩溃并出现错误413 RestError: Message size too large.
  • 您必须发送多张卡片。卡大小限制在 25kb 左右
  • Bot Framework 不支持 v1.3 自适应卡。请用 1.2 替换 1.3
  • Bot Framework 支持任何类型的卡片。一些主机还不支持 1.3(比如 MS Teams。WebChat 确实支持 1.3)
【解决方案2】:

我已验证使用行而不是列可以解决您的问题。这意味着您将拥有许多列集,每列中有一个元素,而不是一个列集在每列中有许多元素。每列集将作为一行,它们都将堆叠在一起。

我已经为您编写了一个将列转换为行的函数。您可以使用它,也可以手动更改您的卡。代码如下:

async function sendCard(card) {
    await turnContext.sendActivity(
        MessageFactory.attachment(CardFactory.adaptiveCard(card))
    );
}

function makeRows(columnSet) {
    const rows = [];

    if (columnSet.columns.length) {
        const numRows = columnSet.columns[0].items.length;
        for (let rowIndex = 0; rowIndex < numRows; rowIndex++) {
            const row = Object.assign({}, columnSet);
            row.columns = [];

            for (const column of columnSet.columns) {
                const item = column.items[rowIndex];
                const rowColumn = Object.assign({}, column);
                //item.wrap = true;
                rowColumn.items = [item];
                row.columns.push(rowColumn);
            }

            rows.push(row);
        }
    } else {
        rows.push(columnSet);
    }

    return rows;
}

function replaceColumnsWithRows(body) {
    for (let index = body.length - 1; index > -1; index--) {
        const element = body[index];
        if (element.type == "ColumnSet") {
            const rows = makeRows(element);
            body.splice(index, 1, ...rows);
        }
    }
}

var tablePayLoad = {
    $schema: "http://adaptivecards.io/schemas/adaptive-card.json",
    type: "AdaptiveCard",
    // Your template
};

// Create a Template instance from the table payload
var template = new ACData.Template(tablePayLoad);

// Expand the template with your `$root` data object.
// This binds it to the data and produces the final Adaptive Card payload

var tableCardPayload = template.expand({
    $root: {
        // Your data
    },
});

await sendCard(tableCardPayload);

replaceColumnsWithRows(tableCardPayload.body);

await sendCard(tableCardPayload);

【讨论】:

  • 工作正常,但是如果我试图迭代到表中的数据很大,我该怎么办?对于中等大小的数据,它可以正常工作,但是一旦数据很大,它就会崩溃并出现错误 413 RestError: Message size too large。
  • 请使用 cmets 要求澄清此特定问题的特定答案。如果您的消息太大,则与此问题无关,您应该在新问题中询问如何解决。
  • 好的,谢谢。
猜你喜欢
  • 2019-03-31
  • 2021-02-06
  • 2022-01-08
  • 2020-05-29
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多