Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os SDKs de modelos de cartão adaptáveis facilitam o preenchimento de um modelo de cartão com dados reais em qualquer plataforma suportada.
Leia isto para obter uma visão geral do Adaptive Card Templating
Importante
Mudanças significativas no Release Candidate de maio de 2020
Temos trabalhado arduamente para lançar os modelos, e finalmente estamos na reta final! Tivemos que fazer algumas pequenas alterações à medida que fechamos o lançamento.
Mudanças significativas a partir de maio de 2020
- A sintaxe de ligação foi alterada de
{...}para${...}.- Por exemplo:
"text": "Hello {name}"torna-se"text": "Hello ${name}"
- Por exemplo:
- A API JavaScript não contém mais um
EvaluationContextobjeto. Basta passar os seus dados para aexpandfunção. Consulte a página SDK para obter detalhes completos. - A API .NET foi redesenhada para corresponder mais à API JavaScript. Veja abaixo para mais detalhes.
JavaScript
A biblioteca adaptivecards-templating está disponível no npm e via CDN. Consulte o link do pacote para obter a documentação completa.
npm
npm install adaptivecards-templating
CDN
<script src="https://unpkg.com/adaptivecards-templating/dist/adaptivecards-templating.min.js"></script>
Utilização
O exemplo abaixo pressupõe que você também instalou a biblioteca adaptivecards para renderizar o cartão.
Se você não planeja renderizar o cartão, então você pode remover o parse código e render .
import * as ACData from "adaptivecards-templating";
import * as AdaptiveCards from "adaptivecards";
// Define a template payload
var templatePayload = {
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Hello ${name}!"
}
]
};
// Create a Template instance from the template payload
var template = new ACData.Template(templatePayload);
// Expand the template with your `$root` data object.
// This binds it to the data and produces the final Adaptive Card payload
var cardPayload = template.expand({
$root: {
name: "Matt Hidinger"
}
});
// OPTIONAL: Render the card (requires that the adaptivecards library be loaded)
var adaptiveCard = new AdaptiveCards.AdaptiveCard();
adaptiveCard.parse(cardPayload);
document.getElementById('exampleDiv').appendChild(adaptiveCard.render());
.NET
dotnet add package AdaptiveCards.Templating
Utilização
// Import the library
using AdaptiveCards.Templating;
var templateJson = @"
{
""type"": ""AdaptiveCard"",
""version"": ""1.2"",
""body"": [
{
""type"": ""TextBlock"",
""text"": ""Hello ${name}!""
}
]
}";
// Create a Template instance from the template payload
AdaptiveCardTemplate template = new AdaptiveCardTemplate(templateJson);
// You can use any serializable object as your data
var myData = new
{
Name = "Matt Hidinger"
};
// "Expand" the template - this generates the final Adaptive Card payload
string cardJson = template.Expand(myData);
Funções personalizadas
Funções personalizadas podem ser adicionadas à Adaptive Expression Library, além das funções pré-criadas.
No exemplo abaixo, a função personalizada stringFormat é adicionada e a função é usada para formatar uma cadeia de caracteres.
string jsonTemplate = @"{
""type"": ""AdaptiveCard"",
""version"": ""1.0"",
""body"": [{
""type"": ""TextBlock"",
""text"": ""${stringFormat(strings.myName, person.firstName, person.lastName)}""
}]
}";
string jsonData = @"{
""strings"": {
""myName"": ""My name is {0} {1}""
},
""person"": {
""firstName"": ""Andrew"",
""lastName"": ""Leader""
}
}";
AdaptiveCardTemplate template = new AdaptiveCardTemplate(jsonTemplate);
var context = new EvaluationContext
{
Root = jsonData
};
// a custom function is added
AdaptiveExpressions.Expression.Functions.Add("stringFormat", (args) =>
{
string formattedString = "";
// argument is packed in sequential order as defined in the template
// For example, suppose we have "${stringFormat(strings.myName, person.firstName, person.lastName)}"
// args will have following entries
// args[0]: strings.myName
// args[1]: person.firstName
// args[2]: strings.lastName
if (args[0] != null && args[1] != null && args[2] != null)
{
string formatString = args[0];
string[] stringArguments = {args[1], args[2] };
formattedString = string.Format(formatString, stringArguments);
}
return formattedString;
});
string cardJson = template.Expand(context);
Solução de problemas
Q. Porque estou a encontrar uma AdaptiveTemplateException ao chamar expand()?
Um. Se a sua mensagem de erro se parecer com '<item ofensivo>' na linha '<número da linha>', está malformado no par '$data:'.
Certifique-se de que o valor fornecido para "$data" é json válido, como número, booleano, objeto e matriz, ou segue a sintaxe correta para a linguagem Adaptive Template, e a entrada existe no contexto de dados no número da linha.
Q. Porque estou a encontrar uma ArgumentNullException ao chamar expand()?
Um. Se a sua mensagem de erro for semelhante a " Verifique se o contexto de dados pai está definido ou insira um valor não nulo para '<item problemático>' na linha, '<número da linha>'".
Ele indica que não existe contexto de dados para a associação de dados solicitada. Certifique-se de que o contexto de dados raiz está definido, se existir, certifique-se de que qualquer contexto de dados esteja disponível para vinculação atual, conforme indicado pelo número da linha.
Q. Por que data/hora no formato RFC 3389, por exemplo, "2017-02-14T06:08:00Z" quando usado com modelo não funciona com funções TIME/DATE?
Um. .NET sdk nuget versão 1.0.0-rc.0 exibe esse comportamento. Esse comportamento é corrigido nas versões subsequentes. O comportamento padrão do desserializador do json.Net altera a cadeia de caracteres de formato de data e hora, e é desativado para as versões subsequentes. Use a função formatDateTime() para formatar a cadeia de caracteres de data/hora para RFC 3389, como visto neste exemplo, ou você pode ignorar as funções TIME/DATE e apenas usar formatDateTime(). Para obter mais informações sobre formatDateTime(), clique aqui.