Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die folgende Spezifikation beschreibt die Implementierung eines Renderers für adaptive Karten auf einer beliebigen nativen Benutzeroberflächenplattform.
Wichtig
Dieser Inhalt ist noch in Bearbeitung, und möglicherweise fehlen noch einige Details. Mit Fragen oder Feedback können Sie sich gerne an uns wenden.
Analysieren von JSON
Fehlerbedingungen
- Ein Parser MUSS prüfen, ob es sich um gültigen JSON-Inhalt handelt.
- Ein Parser MUSS eine Überprüfung anhand des Schemas (erforderliche Eigenschaften usw.) ausführen.
- Die oben genannten Fehler MÜSSEN der Host-App gemeldet werden (als Ausnahme oder eine entsprechende Angabe).
Unbekannte Typen
- Wenn unbekannte „Typen“ ermittelt werden, MÜSSEN DIESE AUS DEM ERGEBNIS GELÖSCHT werden.
- Alle Änderungen der Nutzlast (wie oben) SOLLTEN der Host-App als Warnungen gemeldet werden.
Unbekannte Eigenschaften
- Ein Parser MUSSzusätzliche Eigenschaften in Elementen einschließen.
Weitere Überlegungen
- Die Eigenschaft
speakKANN SSML-Markup enthalten und MUSS wie angegeben an die Host-App zurückgegeben werden.
Analyse der Hostkonfiguration
- TODO
Versionsverwaltung
- Ein Renderer MUSS eine bestimmte Version des Schemas implementieren.
- Der
AdaptiveCard-Konstruktor MUSS der Eigenschaftversioneinen Standardwert basierend auf der aktuellen Schemaversion zuweisen. - Wenn ein Renderer eine
version-Eigenschaft in einerAdaptiveCardfindet, die höher ist als die unterstützte Version, MUSS er stattdessen denfallbackTextzurückgeben.
Darstellung
Eine AdaptiveCard besteht aus einem body- und einem actions-Element. Der body ist eine Sammlung von CardElement-Elementen, die von einem Renderer enumeriert und in der entsprechenden Reihenfolge gerendert werden.
- Jedes Element MUSS auf die Breite des übergeordneten Elements gestreckt werden (ähnlich wie bei
display: blockin HTML). - Ein Renderer MUSS alle unbekannten Elementtypen, auf die er trifft, ignorieren und mit dem Rest der Nutzlast fortfahren.
Text, TextBlock und RichTextBlock
- Ein TextBlock MUSS eine einzelne Zeile aufnehmen, sofern die
wrap-Eigenschaft nichttruelautet. - Der Textblock SOLLTE überschüssigen Text abschneiden und Auslassungspunkte (...) anzeigen.
Markdown
- Adaptive Karten lassen eine Teilmenge von Markdown zu und SOLLTEN in
TextBlockunterstützt werden. - RichTextBlock unterstützt Markdown NICHT und muss mithilfe der verfügbar gemachten Eigenschaften formatiert werden.
- Weitere Informationen findest du unter Markdownanforderungen.
Formatierungsfunktionen
-
TextBlockermöglicht Formatierungsfunktionen für DATUM und UHRZEIT, die in jedem Renderer unterstützt werden MÜSSEN. - BEI ALLEN FEHLERN MUSS die unformatierte Zeichenfolge auf der Karte angezeigt werden. Es wird keine benutzerfreundliche Meldung angezeigt. (Ziel hierbei ist es, den Entwickler sofort darauf aufmerksam zu machen, dass ein Problem vorliegt).
Bilder
- Ein Renderer SOLLTE Host-Apps informieren, wenn alle HTTP-Bilder heruntergeladen wurden und die Karte „vollständig gerendert“ ist.
- Ein Renderer MUSS beim Herunterladen von HTTP-Bildern den Hostkonfigurationsparameter
maxImageSizeüberprüfen. - Ein Renderer MUSS
.pngund.jpegunterstützen. - Ein Renderer SOLLTE
.gif-Bilder unterstützen.
Erweitertes Layoutverhalten
Der Renderer MUSS beim Rendern von Kartenelementen hinsichtlich der in diesem Dokument erwähnten Attribute die folgenden Verhaltensweisen berücksichtigen.
Der Renderer sollte Einschränkungen verwalten und dabei die verschiedenen Faktoren berücksichtigen wie Rand, Abstand, Höhe und Breite usw. sowie die Konfiguration der Kartenelemente und ihrer untergeordneten Elemente.
Breite
- Zulässige Werte:
auto,stretchund feste Werte in Bezug aufpixelsundweight -
autobietet ausreichend Platz für die Ausdehnung der Breite (unterstützt minimale Ausdehnung ) -
stretchnimmt die verbleibende Breite in Anspruch (unterstützt die maximale Ausdehnung )
In den folgenden Szenarien wird beschrieben, wie sich unterschiedliche Breitenkombinationen für Spalten auf die Einschränkungen auswirken.
auto vs. stretch
- Spalten mit einer
auto- undstretch-Breite.
- Die erste Spalte mit
auto-Breite verwendet ausreichend Platz, um den Inhalt anzuzeigen, und die zweite Spalte mitstretch-Breite nimmt den gesamte Platz ein.
- Spalten mit nur
stretch-Breite
- Spalten mit nur „stretch“-Breite nehmen den verbleibenden Platz ein, nachdem sie den Platz gleichmäßig untereinander aufgeteilt haben.
-
auto,stretchundauto
Die Breite der ersten und dritten Spalte wird zuerst so angepasst, dass die Elemente ausreichend aufgenommen werden, und die zweite Spalte mit „stretch“-Breite beansprucht den verbleibenden Platz.
- Reihenfolge der Anzeige von Elementen mit Spalten mit
auto-Breite
- Spalten mit
auto-Breite positionieren sich selbst so, dass ausreichend Platz vorhanden ist, um den zu rendernden Inhalt aufzunehmen. - Im Falle von Bildansichten werden Bilder so herunterskaliert, dass sie in die verbleibende Breite passen.
-
Hinweis: Bilder werden nur für die Bildgrößen
stretchundautoherunterskaliert, aber nicht für feste Breiten und Höhen in Pixel.
weights vs. pixels
- Spalten mit Kombination aus
weight- undpixel-Breite
- Die obige Karte enthält drei Spalten mit der folgenden Breitenkonfiguration:
-
Column1: Weight 50,Column2: 100pxColumn3: Weight 50 - Die Breite von Spalte 2 wird vom
pixel valuebestimmt. - Die Breite von Spalte 1 und 3 wird auf Grundlage von
weightsund der berechnetenweight ratioangepasst.
- Spalten mit den Attributen
weight,pixel widthundauto
- Die obige Karte enthält vier Spalten mit der folgenden Breitenkonfiguration:
-
Column1: Weight 50,Column2: 100px,Column3: Weight 50undColumn4: auto -
Hinweis: Eine Bildansicht mit einer Spalte mit
auto-Breite wird so herunterskaliert, dass sie in den verbleibenden Platz passt.
Die Rangfolge der Anzeige von Elementen mit „width“-Attribut
px > weight > auto > stretch
Höhe
Zulässige Werte: auto und stretch
In den folgenden Szenarien wird beschrieben, wie sich unterschiedliche Breitenkombinationen für Spalten auf die Einschränkungen auswirken.
- Elemente dehnen sich vertikal frei aus, wenn die Karte keine feste Höhe hat.
- Beide Spalten können sich unabhängig von
auto- undstretch-Werten ausreichend vertikal ausdehnen. - Dies ist der Fall bei für den Textblock deaktivierter Eigenschaft
wrap.
- Bei der folgenden Karte ist für den Textblock die Eigenschaft
wrapaktiviert.
Abstände und Trennzeichen
- Die
spacing-Eigenschaft jedes Elements wirkt sich darauf aus, wie viel Abstand zwischen dem AKTUELLEN Element und dem Element DAVOR vorhanden ist. - Ein Abstand DARF NUR DANN angewendet werden, wenn vor dem Element tatsächlich ein anderes Element vorhanden ist. (Diese Eigenschaft gilt also nicht für das erste Element in einem Array).
- Ein Renderer MUSS den zu verwendenden Abstand aus
hostConfigfür den Enumerationswert ablesen, der auf das aktuelle Element angewendet wird. - Wenn das Element den
separator-Werttrueaufweist, MUSS eine sichtbare Linie zwischen dem aktuellen Element und dem Element davor gezeichnet werden. - Die Trennlinie MUSS mithilfe der Eigenschaft
container.style.default.foregroundColorgezeichnet werden. - Eine Trennlinie DARF NUR gezeichnet werden, wenn das Element NICHT das erste Element im Array ist.
-
Spacing (Abstände): Zulässige Werte:
none,small,default,medium,large,extra largeundpadding
- Das Attribut „spacing“ fügt Abstand zwischen diesem Element und dem vorangehenden Element hinzu.
- Das Attribut „spacing“ hat keine Auswirkung, wenn es das erste Element im Ansichtscontainer ist.
- Die mit einem Pfeil markierten Elemente sind die ersten Elemente unter ihren nebengeordneten Elementen, sodass „spacing“ keine Auswirkung hat.
- Separator (Trennzeichen): Mögliche Werte: Ein-/Aus-Umschalter
- Zeichnet eine Trennlinie am oberen Rand des Elements.
- Kombination aus „spacing“ und „separator“
- Die Einschränkungen der Kombination aus „spacing“ und „separator“ sind unten dargestellt.
- Der Gesamtabstand wird in Bezug auf die angegebenen Werte beibehalten.
- Das Trennzeichen wird in der Mitte der Abstandsentfernung hinzugefügt.
[Hinweis: Der Abstand, bei dem das Trennzeichen in den Abstandsbereich eingefügt wird, muss bestätigt werden. Scheint die Mitte zu sein.]
Containerstile
- Stellt Formatierungshinweise für Container wie Spalten und Spaltensätze (ColumnSet) bereit.
- Zulässige Werte:
none,default,emphasis,good,attention,warningundaccent - Diese vordefinierten Stiloptionen bieten Abstand für die Elemente innerhalb des Containers und die Hintergrundfarbe.
- Karte A veranschaulicht „columns“ und „columnset“ ohne Stiloptionen
- Karte B veranschaulicht „columnset“ mit dem Attention-Stil (Achtung). Beachten Sie den Abstand innerhalb des „columnset“-Containers und die Änderung der Hintergrundfarbe.
- Karte C veranschaulicht nur „columns“ mit Formatierung. Ähnlich wie im vorherigen Beispiel beinhaltet „columns“ Abstand und Änderung des Hintergrunds.
- Karte D veranschaulicht „columns“ und „columnset“, beide mit Stiloptionen.
[Hinweis: Die Methode zur Bestimmung des Abstands muss überprüft werden. Wird er vom Host bestimmt? ]
Bleed (Anschnitt)
- Diese Eigenschaft ermöglicht es einem Container wie „columns“ und „columnset“, in sein übergeordnetes Element überzugehen.
- Mögliche Werte:
onundoff.
- Karte A veranschaulicht „columns“ und „columnset“ mit normaler Formatierung.
- Karte B veranschaulicht die erste Spalte mit Option „bleed“. Der Inhalt schneidet so gerade die Ränder zu seinem übergeordneten Element an.
Bildgröße:
Size-Attribut
- Zulässige Werte:
auto,stretch,small,medium,large -
auto: Bilder werden nach unten skaliert, soweit erforderlich, aber nicht nach oben skaliert, um den Bereich auszufüllen. -
stretch: Bild, das sowohl nach unten skaliert als auch nach oben passt. -
smallundmediumlarge: Das Bild wird mit einer festen Breite angezeigt, wobei die Breite vom Host bestimmt wird.
-
autovs.stretch
- Kombination aus Spaltenbreite und Bildgröße
- Im Allgemeinen ermöglichen Spalten mit
stretch-Breite Bildern das freie Skalieren gemäß derstretch-Größe. - Spalten mit
auto-Breite gestatten es dem Bild, einen exakten Raum einzunehmen, unabhängig von derauto- undstretch-Größe des Bilds. - Die Spaltenbreite hat Vorrang bei der Bestimmung der Bildgröße in dieser Anordnung.
Bildattribut Width (in pixels)
- Dieses bietet die gewünschte Breite des Bilds auf dem Bildschirm.
- Die
size-Eigenschaft wird außer Kraft gesetzt, wenn ein Wert angegeben wird.
- Die Spalte mit
auto-Breite hat Vorrang vorstretchbei der Bereitstellung von Raum für Bildinhalte in dieser Anordnung.
Kombination aus Spaltenbreite („weight“ und „pixel“) und Bildgröße („auto“ und „stretch“)
- Bilder mit
auto-Größe nehmen ausreichend Platz zum Ausdehnen (oder für eine Herunterskalierung) ein, innerhalb der Spalteneinschränkungen durch die Breitenweightundpixel. - Bilder mit der
stretch-Größe können so ausgedehnt werden, dass sie den verbleibenden Platz einnehmen, innerhalb der Einschränkungen durch die Spaltenbreitenweightundpixel.
Erweitertes Layout – Zusammenfassung
- Die Spaltenbreite hat Vorrang bei der Bestimmung der Größe des Bilds als seine Bildgröße („auto“, „stretch“, „min width“ usw).
- Die Rangfolge der Spaltenbreite, die zur ausreichenden Anzeige des Inhalts verwendet wird:
px>weight>auto>stretch - Bild-
size(„auto“, „stretch“) wird ignoriert, wenn Bild-widthund -heightin Pixel (px) bereitgestellt werden. - Das Größenattribut
stretchdes Bilds führt nur dann zu einer Hochskalierung des Bilds, wenn noch Platz übrig ist und „auto“ der Spalte nicht den Wertautohat. - Ein Bild dehnt sich selbständig bis zu der Grenze aus, bei der es sein Seitenverhältnis in dem in der Spalte verfügbaren Raum beibehält. Die Höhe wiederum wird frei ausgedehnt.
- Das Attribut
Spacinghat keine Auswirkung, wenn es das erste oder einzige Element unter seinen nebengeordneten Elementen ist.
Aktionen
- Ein Renderer
supportsInteractivityAktionen rendern, wenn dasfalse-Element in der HostConfig ist. - Die
actions-Eigenschaft MUSS als Schaltflächen auf einer Form von Aktionsleiste gerendert werden, üblicherweise am unteren Rand der Karte. - Wenn eine Schaltfläche aktiviert wird, MUSS die Host-App das Ereignis verarbeiten können.
- Das Ereignis MUSS alle zugeordneten Eigenschaften mit der Aktion übergeben.
- Das Ereignis MUSS die ausgeführte
AdaptiveCardübergeben.
| Aktion | Verhalten |
|---|---|
| Action.OpenUrl | Öffnet eine externe URL zur Anzeige. |
| Action.ShowCard | Fordert eine untergeordnete Karte an, die dem Benutzer angezeigt werden soll. |
| Action.Submit | Fordert an, dass alle Eingabeelemente in einem Objekt zusammengefasst werden, das dir anschließend über eine von der Hostanwendung definierte Methode gesendet wird. |
| Action.Execute | (In v1.4 eingeführt) Fordert an, dass alle Eingabeelemente in einem Objekt zusammengefasst werden, das anschließend über die „universelle Aktionspipeline“ an Sie gesendet wird. |
Action.OpenUrl
-
Action.OpenUrlSOLLTE eine URL mithilfe des nativen Plattformmechanismus öffnen. - Wenn dies nicht möglich ist, MUSS die Aktion ein Ereignis auslösen, damit die Host-App das Öffnen der URL verarbeitet. Dieses Ereignis MUSS es der Host-App ermöglichen, das Standardverhalten zu überschreiben, beispielsweise durch Öffnen der URL innerhalb der eigenen App.
Action.ShowCard
-
Action.ShowCardMUSS auf irgendeine Weise unterstützt werden, basierend auf der HostConfig-Einstellung. Es gibt zwei Modi: Inline und Popup. Inlinekarten SOLLTEN die Sichtbarkeit der Karte automatisch umschalten. Im Popupmodus SOLLTE ein Ereignis ausgelöst werden, damit die Host-App die Karte auf irgendeine Weise anzeigt.
Aktion.Absenden
- Das
Action.Submit-Element sammelt Eingabefelder, führt diese mit einem optionalen Datenfeld zusammen und sendet ein Ereignis an den Client. - Ein signifikanter Unterschied beim Verhalten des Elements zeigt sich zwischen Version 1.x und 2.x des ACL-Renderers.
Die Submit-Aktion verhält sich wie eine Übermittlungsaktion in einem HTML-Formular, mit einer Ausnahme: In HTML wird typischerweise eine HTTP-POST-Aktion ausgelöst, bei adaptiven Karten dagegen bleibt der Host-App die Entscheidung überlassen, wie „submit“ zu interpretieren ist.
- Wenn ein Ereignis ausgelöst werden MUSS, tippt der Benutzer auf die aufgerufene Aktion.
- Die
data-Eigenschaft MUSS in der Rückrufnutzlast enthalten sein. - Bei
Action.SubmitMUSS ein Renderer alle Eingaben auf der Karte erfassen und die zugehörigen Werte abrufen.
-
1.x Renderer: Die Eingaben werden aus allen Feldern gesammelt, unabhängig davon, wo in der Hierarchie sich das Eingabefeld befindet. -
2.x Renderer: Die Eingaben werden aus Feldern gesammelt, die im übergeordneten Container oder als nebengeordnetes Element desAction.Submit-Elements vorhanden sind.
Action.Execute (Details folgen später)
Action.Execute wurde in Version 1.4 eingeführt. Wir werden Anweisungen zur Implementierung von SDKs zu einem späteren Zeitpunkt zur Verfügung stellen. Bitte setzen Sie sich mit uns in Verbindung, wenn Sie Fragen zu diesem Thema haben.
AktionWählen
- Eine
supportedInteractivityfalseals Berührungsziel gerendert werden, wenn dasselectAction-Element der Hostkonfiguration ist. -
Image,ColumnSetundColumnbieten eineselectAction-Eigenschaft, die ausgeführt werden SOLLTE, wenn sie von einem Benutzer z. B. durch Tippen auf das Element aufgerufen wird.
Eingaben
- Ein Renderer
supportsInteractivityEingaben rendern, wenn dasfalse-Element der HostConfig ist. - Eingaben SOLLTEN mit der höchstmöglichen Genauigkeit gerendert werden. Ein
Input.Date-Element beispielsweise sollte dem Benutzer idealerweise eine Datumsauswahl bieten. Wenn dies jedoch in deinem UI-Stapel nicht möglich ist, MUSS der Renderer ein Standardtextfeld rendern. - Ein Renderer SOLLTE nach Möglichkeit
placeholderTextanzeigen. - Die Bindung von Eingabewerten MUSS ordnungsgemäß mit Escapezeichen versehen werden.
- Vor v1.3 muss ein Renderer KEINE Überprüfung der Eingabe implementieren. Benutzer von adaptiven Karten müssen die Überprüfung empfangener Daten auf ihrer Seite selbst planen.
- Eingabebezeichnungen und Überprüfung wurden in v1.3 des Schemas für adaptive Karten eingeführt. Beim Rendern der zugeordneten Bezeichnung, der Überprüfungshinweise und der Fehlermeldungen muss besonders sorgfältig vorgegangen werden.
Formatierungs-, Anpassungs- und Erweiterungs-APIs
Jedes SDK sollte ein gewisses Maß an Flexibilität zum Hosten von Apps bieten, um die Formatierung im Allgemeinen zu steuern und das Schema nach Bedarf zu erweitern.
Hostkonfiguration
- TODO: Wie sollten die Standardwerte lauten? Sollten diese überall freigegeben werden? Sollten wir eine gemeinsame hostConfig.json-Datei in den Binärdateien einbetten?
HostConfig ist ein gemeinsam genutztes Konfigurationsobjekt, das angibt, wie ein Renderer für adaptive Karten eine Benutzeroberfläche generiert.
So können plattformunabhängige Eigenschaften für Renderer auf verschiedenen Plattformen und Geräten freigegeben werden. Zudem können Tools erstellt werden, die dir eine Vorstellung vom Aussehen und Verhalten einer Karte in einer bestimmten Umgebung vermitteln.
- Renderer MÜSSEN einen HostConfig-Parameter für Host-Apps verfügbar machen.
- Alle Elemente MÜSSEN entsprechend ihren jeweiligen HostConfig-Einstellungen formatiert werden.
Native Plattformformatierung
- Jeder Elementtyp SOLLTE eine native Plattformformatierung mit dem generierten Benutzeroberflächenelement anfügen. In HTML haben wir beispielsweise eine CSS-Klasse zu den Elementtypen hinzugefügt, und in XAML weisen wir einen bestimmten Stil zu.
Erweiterungen
- Ein Renderer MUSS es Host-Apps ermöglichen, standardmäßige Elementrenderer zu überschreiben. Beispiel: Ersetzen des Renderns von
TextBlockdurch eigene Logik. - Ein Renderer MUSS es Host-Apps ermöglichen, benutzerdefinierte Elementtypen zu registrieren. Beispiel: Hinzufügen von Unterstützung für ein benutzerdefiniertes
Rating-Element. - Ein Renderer MUSS es Host-Apps ermöglichen, Unterstützung für ein Standardelement zu entfernen. Beispiel: Entfernen von
Action.Submit, wenn die Unterstützung nicht gewünscht ist.
Ereignisse
- Ein Renderer SOLLTE ein Ereignis auslösen, wenn sich die Sichtbarkeit eines Elements geändert hat, sodass die Host-App die Karte an die richtige Position verschieben kann.