Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarlamalı Kart Şablon Oluşturma SDK'ları, desteklenen herhangi bir platformda kart şablonunu gerçek verilerle doldurmayı kolaylaştırır.
Uyarlamalı Kart Şablonuna genel bakış için lütfen bunu okuyun
Önemli
Mayıs 2020 Sürüm Adayındakapsamlı değişiklikler
Şablonlama üzerinde çok çalıştık ve sonunda son aşamadayız! Yayına yaklaştıkça bazı küçük bozucu değişiklikler yapmak zorunda kaldık.
Mayıs 2020 itibarıyla uyumsuzluk yaratan değişiklikler
- Bağlama söz dizimi
{...}'dan${...}'ye değiştirilmiştir.- Örneğin:
"text": "Hello {name}"olur"text": "Hello ${name}"
- Örneğin:
- JavaScript API'sinde artık nesne
EvaluationContextyok. Verileriniziexpandişlevine göndermeniz yeterlidir. Tüm ayrıntılar için lütfen SDK sayfasına bakın. - .NET API'si, JavaScript API'sine daha yakın olacak şekilde yeniden tasarlandı. Tüm ayrıntılar için lütfen aşağıya bakın.
JavaScript
Adaptivecards-templating kitaplığı npm ve CDN aracılığıyla kullanılabilir. Tam belgeler için paket bağlantısına bakın.
npm
npm install adaptivecards-templating
CDN
<script src="https://unpkg.com/adaptivecards-templating/dist/adaptivecards-templating.min.js"></script>
Kullanım
Aşağıdaki örnekte, kartı işlemek için adaptivecards kitaplığını da yüklediğiniz varsayılır.
Kartı işlemeyi planlamıyorsanız parse ve render kodunu kaldırabilirsiniz.
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
Kullanım
// 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);
Özel İşlevler
Özel işlevler, önceden oluşturulmuş işlevlere ek olarak Uyarlamalı İfade Kitaplığı'na eklenebilir.
Aşağıdaki örnekte stringFormat özel işlevi eklenir ve bir dizeyi biçimlendirmek için funtion kullanılır.
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);
Sorun giderme
Soru: Neden AdaptiveTemplateException çağrısıyla expand()karşılaşıyorum?
A. Hata iletiniz satırda '<hatalı öğe>' gibi görünüyorsa, '<satır numarası>' '$data : ' çifti için yanlış biçimlendirilmiştir.
"$data" için sağlanan değerin sayı, boole, nesne ve dizi gibi geçerli bir json olduğundan veya Uyarlamalı Şablon dili için doğru söz dizimini izlediğinden ve girdinin veri bağlamında satır numarasında bulunduğundan emin olun.
Soru: Neden expand() çağrısını yaparken bir ArgumentNullException ile karşılaşıyorum?
A. Hata iletiniz şöyle görünüyorsa" Üst veri bağlamının ayarlandığını kontrol edin veya lütfen null olmayan bir değer girin '<sorunlu öğe>' için, '<satır numarası>' satırında.".
İstenen veri bağlama için veri bağlamı olmadığını gösterir. Varsa kök veri bağlamının ayarlandığından emin olun ve satır numarasında gösterildiği gibi geçerli bağlama için herhangi bir veri bağlamının kullanılabilir olduğundan emin olun.
Soru: Şablonla kullanıldığında RFC 3389 biçimindeki tarih/saat neden "2017-02-14T06:08:00Z" saat/TARİh işlevleriyle çalışmıyor?
A. .NET sdk nuget sürüm 1.0.0-rc.0 bu davranışı gösterir. bu davranış sonraki sürümlerde düzeltilir. json.Net deserilizer'ın varsayılan davranışı tarih/saat biçimi dizesini değiştirir ve sonraki sürümler için devre dışı bırakılır.
Bu örnekte görüldüğü gibi tarih/saat dizesini RFC 3389 olarak biçimlendirmek için formatDateTime() işlevini kullanın veya TIME/DATE işlevlerini atlayabilir ve yalnızca formatDateTime() kullanabilirsiniz. formatDateTime() hakkında daha fazla bilgi için lütfen buraya gidin.