Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższa specyfikacja opisuje sposób implementowania modułu renderowania kart adaptacyjnych na dowolnej natywnej platformie interfejsu użytkownika.
Ważne
Ta zawartość jest w toku i może brakować pewnych szczegółów. Daj nam znać, jeśli masz jakiekolwiek pytania lub opinie.
Analizowanie kodu JSON
Warunki błędu
- Analizator MUSI sprawdzić, czy zawartość JSON jest prawidłowa.
- Analizator MUSI zweryfikować zgodność z schematem (wymagane właściwości itp.)
- Powyższe błędy MUSZĄ być zgłaszane do aplikacji hosta (wyjątek lub odpowiednik)
Nieznane typy
- Jeśli napotkane są nieznane "typy", MUSZĄ ZOSTAĆ usunięte z wyniku
- Wszelkie zmiany ładunku (jak powyżej) powinny być zgłaszane jako ostrzeżenia do aplikacji hosta
Nieznane właściwości
- Analizator MUSI zawieraćdodatkowe właściwości dla elementów
Uwagi dodatkowe
- Właściwość
speakMOŻE zawierać znacznik SSML i MUSI zostać zwrócona do aplikacji hosta zgodnie z określeniem.
Analizowanie konfiguracji hosta
- TODO
Wersjonowanie
- Renderer MUSI zaimplementować określoną wersję schematu.
- Konstruktor
AdaptiveCardMUSI nadaćversionwłaściwości wartość domyślną w oparciu o aktualną wersję schematu - Jeśli moduł renderujący napotka
versionwłaściwość wAdaptiveCard, której wersja jest wyższa niż obsługiwana, musi zamiast niej zwrócićfallbackText.
Renderowanie
AdaptiveCard składa się z body i actions. Kolekcja CardElement to zestaw danych, które moduł renderujący będzie wyliczać i renderować w kolejności.
- Każdy element MUSI rozciągać się na szerokość elementu nadrzędnego (pomyśl
display: blockw kodzie HTML). - Moduł renderujący MUSI ignorować wszystkie napotkane nieznane typy elementów i kontynuować renderowanie reszty ładunku.
Text, TextBlock i RichTextBlock
- TextBlock MUSI przyjąć jeden wiersz, chyba że właściwość
wrapjest ustawiona natrue. - Blok tekstu POWINIEN przycinać zbędny tekst, kończąc wielokropkiem (...)
Markdown
- Karty adaptacyjne pozwalają na korzystanie z podzestawu języka Markdown i powinny być obsługiwane w
TextBlock. - Funkcja RichTextBlock nie obsługuje języka Markdown i musi być stylizowany przy użyciu uwidocznionych właściwości.
- Zobacz pełne wymagania dotyczące języka Markdown
Funkcje formatowania
-
TextBlockzezwala na funkcje formatowania DATE/TIME , które MUSZĄ być obsługiwane na każdym rendererze. - WSZYSTKIE BŁĘDY MUSZĄ wyświetlać nieprzetworzone ciągi na karcie. Nie podjęto próby wysłania przyjaznej wiadomości. (Celem jest natychmiastowe uświadomienie deweloperowi problemu)
Obrazy
- Program renderowany POWINIEN zezwalać aplikacjom hosta na informacje o tym, kiedy wszystkie obrazy HTTP zostały pobrane, a karta jest "w pełni renderowana"
- Program renderujący MUSI sprawdzić parametr konfiguracji
maxImageSizehosta podczas pobierania obrazów HTTP - Renderator MUST obsługiwać
.pngoraz.jpeg - Renderer POWINIEN obsługiwać
.gifobrazy
Zachowanie układu zaawansowanego
Program renderujący MUSI uwzględniać następujące zachowania podczas renderowania elementów karty w odniesieniu do atrybutów wymienionych w tym dokumencie.
Program renderujący powinien zarządzać ograniczeniami, uwzględniając różne czynniki, takie jak margines, wypełnienie, wysokość, szerokość itp., a także konfigurację elementów karty oraz ich elementów podrzędnych.
Szerokość
- Dozwolone wartości —
autoistretchstałe wartości w kategoriachpixelsiweight -
autozapewnia wystarczającą ilość miejsca do poszerzania szerokości (obsługuje minimalne rozszerzenie) -
stretchprzyjmuje pozostałą szerokość (obsługuje maksymalne rozszerzenie)
W poniższych scenariuszach opisano, w jaki sposób ograniczenia mają wpływ na różne kombinacje szerokości kolumn
auto a stretch
- Kolumny o szerokości
autoistretch.
- Pierwsza kolumna o
autoszerokości zajmuje wystarczającą ilość miejsca, aby wyświetlić zawartość, a druga kolumna ostretchszerokości zajmuje całe miejsce.
- Kolumny o tylko
stretchszerokości
- Kolumny o szerokości rozciągniętej zajmują pozostałe spacje po podzieleniu ich w równym stopniu.
-
auto,stretchiauto
Szerokość pierwszej i trzeciej kolumny jest dostosowywana jako pierwsza, aby pomieścić elementy wystarczająco, a druga kolumna o szerokości rozciągniętej zajmuje pozostałe miejsce.
- Kolejność wyświetlania elementów w kolumnach o szerokości
auto
- Kolumny z
autoustawią się tak, aby zapewnić wystarczającą ilość miejsca do renderowania zawartości. - W przypadku widoków obrazów obrazy zostaną pomniejszone, aby dopasować się do pozostałej szerokości.
-
Uwaga: Obrazy będą zmniejszane tylko dla
stretchi rozmiaru obrazuauto, ale nie dla stałej szerokości i wysokości w pikselach.
weights a pixels
- Kolumny o kombinacji szerokości
weightipixel
- Na powyższej karcie istnieją trzy kolumny z następującą konfiguracją szerokości —
-
Column1: Weight 50,Column2: 100px,Column3: Weight 50 - Szerokość kolumny 2 jest określana przez
pixel value - Szerokość kolumny 1 i 3 jest dostosowywana na podstawie
weightsi obliczonegoweight ratio.
- Kolumny z atrybutami
weightpixel widthiauto
- Na powyższej karcie istnieją cztery kolumny z następującą konfiguracją szerokości —
-
Column1: Weight 50,Column2: 100px,Column3: Weight 50iColumn4: auto -
Uwaga: Widok obrazu z kolumną o szerokości
autojest pomniejszana, aby dopasować się do pozostałej przestrzeni.
Kolejność pierwszeństwa wyświetlania elementów z atrybutem width
px > weight > auto > stretch
Wysokość
Dozwolone wartości — auto i stretch
W poniższych scenariuszach opisano wpływ ograniczeń na różne kombinacje wysokości dla elementów kart
- Elementy rozszerzają się swobodnie w pionie, gdy karta nie ma stałej wysokości
- Obie kolumny mogą się rozszerzać w kierunku pionowym niezależnie od wartości
autoistretch. - Właściwość
wrapjest wyłączona dla bloku tekstu.
- Poniższa karta ma włączoną
wrapwłaściwość bloku tekstowego.
Odstępy i separatory
- Właściwość
spacingna każdym elemencie ma wpływ na ilość miejsca między elementem CURRENT a właściwością BEFORE . - Odstępy MUSZĄ mieć zastosowanie tylko wtedy, gdy istnieje element poprzedzający go. (Np. nie będzie dotyczyć pierwszego elementu w tablicy)
- Moduł renderujący MUSI wyszukać ilość miejsca do użycia na podstawie odstępów
hostConfigdla wartości wyliczenia zastosowanej do bieżącego elementu. - Jeśli element ma
separatorwartośćtrue, widoczna linia MUSI zostać narysowana między bieżącym elementem a elementem przed nim. - Linia separatora MUSI być rysowana przy użyciu
container.style.default.foregroundColor. - Separator MUSI być rysowany tylko wtedy, gdy element NIE JEST pierwszym w tablicy.
-
Odstępy — dozwolone wartości
none, ,small,defaultmedium,largeextra largeipadding
- Atrybut odstępów dodaje odstępy między tym elementem a poprzednim elementem.
- Atrybut odstępów nie ma żadnego wpływu, gdy jest to pierwszy element w kontenerze widoków.
- Elementy oznaczone strzałką są pierwszymi elementami wśród swoich równorzędnych, więc odstępy nie mają wpływu.
- Separator — możliwe wartości (przełącznik włączony/wyłączony)
- Rysuje linię rozdzielającą u góry elementu.
- Kombinacja spacji i separatora
- Poniżej przedstawiono ograniczenia odstępów i kombinacji seperatora.
- Ogólna odległość odstępu jest utrzymywana w odniesieniu do podanych wartości.
- Separator jest dodawany w połowie rozstawionej odległości.
[Uwaga. Należy potwierdzić odległość, gdzie wstawiono separator w obszarze odstępów. Wydaje się, że środek]
Style kontenerów
- Zawiera wskazówki dotyczące stylów dla kontenerów, takich jak kolumny i zestaw kolumn
- pl-PL: Dozwolone wartości
none,default,emphasis,good,attention,warningiaccent - Te wstępnie zdefiniowane opcje stylu zapewniają wypełnienie elementów w kontenerze i kolorze tła
- Karta A ilustruje kolumny i zestaw kolumn bez opcji stylu
- Karta B ilustruje zestaw kolumn ze stylem Ostrzeżenie. Zwróć uwagę na wypełnienie w kontenerze zestawu kolumn i zmianę koloru tła.
- Karta C ilustruje kolumny tylko ze stylizacją. Podobnie jak w poprzedniej kolumnie, ta kolumna zawiera dopełnienie i zmianę tła.
- Karta D ilustruje kolumny i zestaw kolumn z opcjami stylu.
[Uwaga. Należy sprawdzić, jak określana jest ilość wypełnienia. Czy jest on określany przez hosta? ]
Krwawić
- Ta właściwość umożliwia kontenerom, takim jak kolumny i zestawy kolumn, przenikanie przez element nadrzędny.
- Możliwe wartości
onioff.
- Kafel A ilustruje kolumny i zestaw kolumn ze standardowym stylem.
- Karta B ilustruje pierwszą kolumnę z opcją spadu. Zawartość po prostu przenika przez granice do elementu nadrzędnego.
Rozmiar obrazu
Atrybut Size
- Dozwolone wartości —
auto, ,smallstretch, ,mediumlarge -
auto: Obrazy będą skalowane w dół, aby zmieścić się w razie potrzeby, ale nie będą skalowane w górę w celu wypełnienia obszaru. -
stretch: Obraz skalowany w dół i w górę, aby dopasować się do potrzeb. -
small,mediumilarge: Obraz jest wyświetlany ze stałą szerokością, gdzie szerokość jest określana przez hosta.
-
autoastretch
- Szerokość kolumny i kombinacja rozmiaru obrazu
- Ogólnie rzecz biorąc, kolumny o
stretchszerokości umożliwiają swobodne skalowanie w górę obrazów wraz z rozmiaremstretch. - Kolumny o
autoszerokości umożliwiają obrazowi zajmowanie dokładnego miejsca niezależnie odautorozmiaru obrazu istretchjego rozmiaru. - Szerokość kolumny ma większy priorytet podczas określania rozmiaru obrazu w tym układzie.
Atrybut obrazu Width (in pixels)
- Zapewnia to żądaną szerokość obrazu na ekranie.
-
sizewłaściwość jest zastępowana po określeniu wartości
- Kolumna o
autoszerokości będzie miała większy priorytet niżstretchw przypadku zapewnienia miejsca na zawartość obrazu w tym układzie.
Kombinacja szerokości kolumny (ciężar i piksele) oraz rozmiaru obrazu (automatyczny i rozciągnięty)
- Obrazy o rozmiarze
autozajmują wystarczającą ilość miejsca na rozszerzanie (lub zmniejszanie) w obrębie ograniczeń szerokościweightipixelkolumn. - Obrazy o rozmiarze
stretchmogą się rozszerzać, aby wypełnić pozostałe miejsce w granicach szerokości kolumnweightipixel.
Podsumowanie układu zaawansowanego
- Szerokość kolumny ma większy priorytet podczas określania rozmiaru obrazu niż rozmiar obrazu (auto, rozciągnięcie, minimalna szerokość itp.).
- Priorytet szerokości kolumny w celu odpowiedniego wyświetlenia jej zawartości —
px>weight>auto>stretch - Obraz
size(auto, rozciągnięcie) jest ignorowany, gdy dostarczany jest obrazwidthiheightw px. - Atrybut rozmiaru dotyczący obrazu
stretchbędzie powiększany tylko wtedy, gdy pozostanie wolne miejsce i auto kolumny nieautojest. - Obraz rozciąga się do maksimum, gdzie zachowuje proporcje obrazu w przestrzeni dostępnej w kolumnie. Wysokość zwiększa się swobodnie.
-
Spacingatrybut nie będzie miał żadnego wpływu, gdy jest to pierwszy lub jedyny element wśród elementów równorzędnych.
Czynności
- Jeśli parametr HostConfig
supportsInteractivitytofalse, program renderowany NIE MOŻE renderować żadnych akcji. - Właściwość
actionsMUSI być renderowana jako przyciski w jakimś pasku akcji, zwykle w dolnej części karty. - Po naciśnięciu przycisku MUSI zezwolić aplikacji hosta na obsługę zdarzenia.
- Zdarzenie MUSI przekazać wszystkie skojarzone właściwości z akcją
- Zdarzenie MUSI przekazać dalej element
AdaptiveCard, który został wykonany.
| Akcja | Zachowanie |
|---|---|
| Action.OpenUrl | Otwieranie zewnętrznego adresu URL do wyświetlania |
| Action.ShowCard | Żąda wyświetlania użytkownikowi karty podrzędnej. |
| Akcja.Wyślij | Poproś o zebranie wszystkich elementów wejściowych do obiektu, który następnie jest wysyłany do Ciebie za pośrednictwem jakiejś metody zdefiniowanej przez aplikację hosta. |
| Action.Execute | (Wprowadzone w wersji 1.4) Poproś o zebranie wszystkich elementów wejściowych do obiektu, który jest następnie wysyłany do użytkownika za pośrednictwem "uniwersalnego kanału akcji" |
Action.OpenUrl
-
Action.OpenUrlPOWINNO otworzyć adres URL przy użyciu mechanizmu platformy natywnej - Jeśli nie jest to możliwe, należy zgłosić zdarzenie do aplikacji hosta w celu obsługi otwierania adresu URL. To zdarzenie MUSI zezwalać aplikacji hosta na zastąpienie domyślnego zachowania. Na przykład pozwól im otworzyć adres URL w ramach własnej aplikacji.
Akcja.PokażKartę
-
Action.ShowCardMusi być obsługiwany w jakiś sposób na podstawie ustawienia hostConfig. Istnieją dwa tryby: wbudowany i wyskakujące okienka. Karty wbudowane POWINNY automatycznie przełączać widoczność karty. W trybie wyskakującym zdarzenie POWINNO zostać wyzwolone w aplikacji hosta w celu wyświetlenia karty w pewien sposób.
Akcja.Wyślij
-
Action.SubmitElement zbiera pola wejściowe, scala z opcjonalnym polem danych i wysyła zdarzenie do klienta. - Znacząca różnica w zachowaniu elementu występuje między wersją 1.x i 2.x modułu renderowania listy ACL.
Akcja przesyłania działa jak przesyłanie formularza HTML, z tą różnicą, że kod HTML zwykle wyzwala wpis HTTP, karty adaptacyjne pozostawiają ją do każdej aplikacji hosta, aby określić, co oznacza "przesyłanie".
- Gdy to ustawienie MUSI zgłosić zdarzenie, użytkownik naciągnie wywołaną akcję.
- Właściwość
dataMUSI być uwzględniona w odpowiedzi zwrotnej. - W przypadku
Action.Submit, renderer MUSI zebrać wszystkie dane wejściowe na karcie i pobrać ich wartości.
-
1.x Renderer— Dane wejściowe są zbierane ze wszystkich pól niezależnie od tego, gdzie w hierarchii znajduje się pole wejściowe. -
2.x Renderer— Dane wejściowe są zbierane z pól znajdujących się w kontenerze nadrzędnym lub jako element równorzędny z elementemAction.Submit.
Action.Execute (Szczegóły zostaną podane później)
Action.Execute został wprowadzony w wersji 1.4. W późniejszym terminie udostępnimy wskazówki dotyczące implementacji zestawów SDK. Skontaktuj się, jeśli masz pytania dotyczące tego tematu.
wybierzAkcję
- Jeśli konfiguracja
supportedInteractivityhosta jestfalse, wtedyselectActionNIE MOŻE być renderowany jako cel dotykowy. -
Image,ColumnSetiColumnoferująselectActionwłaściwość , która powinna być wykonywana, gdy użytkownik go wywołuje, np. przez naciśnięcie elementu.
Dane wejściowe
- Jeśli HostConfig
supportsInteractivityjestfalserendererem NIE MOŻE renderować żadnych wejść. - Dane wejściowe POWINNY być renderowane z największą możliwą wiernością. Na przykład najlepszym rozwiązaniem
Input.Datejest oferowanie użytkownikowi selektora dat, ale jeśli nie jest to możliwe w stosie interfejsu użytkownika, moduł renderujący MUSI wrócić do renderowania standardowego pola tekstowego. - Renderer POWINIEN wyświetlać
placeholderText, jeśli to możliwe - Powiązanie wartości wejściowej MUSI zostać prawidłowo uniknięte
- Przed wersją 1.3 program renderowany nie musi implementować walidacji danych wejściowych. Użytkownicy kart adaptacyjnych muszą zaplanować weryfikację wszystkich odebranych danych na ich końcu.
- Etykiety wejściowe i walidacja zostały wprowadzone w wersji 1.3 schematu kart adaptacyjnych. Należy zachować szczególną ostrożność podczas renderowania skojarzonej etykiety, wskazówek dotyczących walidacji i komunikatów o błędach.
API do stylizacji, dostosowania i rozszerzalności
Każdy zestaw SDK powinien zapewnić pewien poziom elastyczności do hostowania aplikacji w celu kontrolowania ogólnego stylu i rozszerzania schematu zgodnie z ich potrzebami.
Konfiguracja hosta
- TODO: Jakie powinny być wartości domyślne? Czy wszyscy powinni się tym podzielić? Czy należy osadzić wspólny plik hostConfig.json w plikach binarnych?
HostConfig jest obiektem konfiguracji udostępnionej, który określa sposób generowania interfejsu użytkownika przez moduł renderowania kart adaptacyjnych.
Dzięki temu właściwości, które są niezależne od platformy, mogą być współużytkowane przez programy renderujące na różnych platformach i urządzeniach. Umożliwia również tworzenie narzędzi, co daje pojęcie wyglądu i działania karty dla danego środowiska.
- Programy renderowane MUSZĄ uwidaczniać parametr konfiguracji hosta w celu hostowania aplikacji
- Wszystkie elementy MUSZĄ być stylowane zgodnie z ich odpowiednimi ustawieniami konfiguracji hosta
Natywna stylizacja platformy
- Każdy typ elementu POWINIEN dołączyć natywny styl platformy z wygenerowanym elementem interfejsu użytkownika. Na przykład w kodzie HTML dodaliśmy klasę CSS do typów elementów, a w języku XAML przypisujemy określony styl.
Rozszerzalność
- Program renderujący MUSI zezwalać aplikacjom hosta na zastępowanie domyślnych rendererów elementów. Na przykład zastąp
TextBlockrenderowanie własną logiką. - Silnik renderujący MUSI zezwalać aplikacjom hosta na rejestrowanie niestandardowych typów elementów. Na przykład dodaj obsługę elementu niestandardowego
Rating - Renderer MUSI umożliwiać aplikacjom hosta usunięcie wsparcia dla elementu domyślnego. Na przykład usuń
Action.Submit, jeśli nie chcą, aby była wspierana.
Zdarzenia
- Renderer POWINIEN uruchamiać zdarzenie, gdy widoczność elementu uległa zmianie, umożliwiając aplikacji gospodarza przesunięcie karty na odpowiednią pozycję.