【问题标题】:Adaptive Cards Templating in MS TeamsMS Teams 中的自适应卡片模板
【发布时间】:2021-12-05 16:04:53
【问题描述】:

我似乎无法让它工作。如果我将以下自适应卡负载发送到 MS Teams:

{
  "$schema" : "http://adaptivecards.io/schemas/adaptive-card.json",
  "version" : "1.3",
  "type" : "AdaptiveCard",
  "body" : [ {
    "type" : "Container",
    "style" : "emphasis",
    "items" : [ {
      "type" : "Input.Text",
      "value" : "${form.name}",
      "id" : "name",
      "label" : "Name"
    } ]
  } ],
  "$data" : {
    "form" : {
      "name" : "geoff hurst"
    },
  }
}

我在 Teams 中收到这样的回复:

我原以为应该在客户端扩展模板,但这似乎没有发生。我是不是误会了?

【问题讨论】:

    标签: microsoft-teams adaptive-cards


    【解决方案1】:

    所以简单来说,Teams 没有渲染模板的能力(基本上这意味着将卡片模板和数据有效负载组合在一起) - 它只能接受最终的卡的版本。

    因此,如果您想使用模板,则需要在您身边实现数据 + 模板功能,将 final 卡有效负载发送到 Teams。有关如何在 js 或 dotnet 中执行此操作的示例,请参阅 here。说实话,如果你在 js 中(例如 Node),模板只不过是字符串替换,如果你在 dotnet(例如 C#)中,那么你可能更愿意使用强类型自适应卡片库,在这种情况下,您正在组合代码中已经存在的“模板”和“数据”。

    我认为,如果您从某种“模板存储库”接收模板,则模板的最佳用途可能是,但我认为 Teams 实际上还没有这样的东西。

    【讨论】:

      【解决方案2】:

      您尝试使用的方法不允许您使用动态数据,我更喜欢您将数据用作单独的对象并使用模板 SDK。

      请看看这个sample如何使用模板:

      var templateJSON = File.ReadAllText(Path.Combine(".", "CardPath"));
      AdaptiveCardTemplate template = new AdaptiveCardTemplate(templateJSON);
      var memberData = new
      {
          userName = member.Name,
          userUPN = member.UserPrincipalName,
          userAAD = member.AadObjectId
      };
      string cardJSON = template.Expand(memberData);
      var adaptiveCardAttachment = new Attachment
      {
          ContentType = "application/vnd.microsoft.card.adaptive",
          Content = JsonConvert.DeserializeObject(cardJSON),
      };
      await turnContext.SendActivityAsync(MessageFactory.Attachment(adaptiveCardAttachment), cancellationToken);
      

      如您所见,在上面的 sn-p 中,我们需要创建一个模型,其中包含我们在卡片中使用的字段。

      在您的情况下,您需要创建一个具有表单属性的对象 -> 名称

      var formData = new
      {
          form = new
          {
              name = "Testing"
          }
      };
      

      之后使用 expand 方法,其余代码相同。

      【讨论】:

      • 好的,同意。您是对的,尽管根据此页面:docs.microsoft.com/en-us/adaptive-cards/templating 有多个很好的理由说明您希望在客户端进行模板化。 Teams 实现了自适应卡片而不是模板语言这一事实​​对我来说似乎是一个错误。
      猜你喜欢
      • 2021-02-06
      • 2021-03-04
      • 2020-02-17
      • 2021-12-01
      • 2020-01-13
      • 2020-04-30
      • 2021-04-01
      • 2021-03-27
      • 2019-01-18
      相关资源
      最近更新 更多