Přejít na obsah
Skip to main content

Chat nad tabulkou

Modifikátor comex.table.data.chat zobrazuje data existující tabulky jako konverzaci. Zprávy řadí chronologicky, vlastní příspěvky zobrazuje vpravo a ostatní vlevo. Ke čtení historie přidává víceřádkový vstup, zachování rozepsané zprávy a nabídku nástrojů jednotlivých zpráv.

Chat používá podkladovou definici přehledu, jeho SQL filtry, dodatečná zadání, oprávnění a dokumentové nástroje. Stejnou tabulku lze na stránce zobrazit současně běžným modifikátorem Tabulka a chatem.

Vložení do stránky​

V editoru stránek zvolte Přehled » Data » [Součást] » Chat, vyberte tabulku a nastavte mapování jejích sloupců. Číselné ID a názvy sloupců v následujícím příkladu jsou ilustrativní; nahraďte je údaji ze své aplikace.

<cxd:component xmlns:cxd="http://www.flexideo.com/comex/definition"
source="comex.table.data:14028.chat">
<cxd:with-param name="columnAuthorKey" data-type="string" content="E10104749"/>
<cxd:with-param name="columnAuthorName" data-type="string" content="E10000893"/>
<cxd:with-param name="columnText" data-type="string" content="E10104778"/>
<cxd:with-param name="columnDate" data-type="string" content="E10104752"/>
<cxd:with-param name="columnTime" data-type="string" content="E10104753"/>
<cxd:with-param name="columnPsk" data-type="string" content="E10104778psk"/>
<cxd:with-param name="itemsPerPage" data-type="number" content="100"/>
<cxd:with-param name="height" data-type="number" content="500"/>
</cxd:component>

Více chatů stejné tabulky na jedné stránce rozlište unikátním názvem, například comex.table.data:14028.chat[zakazka]. Stejný název pak použijte v cíli konektivity. Současná tabulka 14028.grid a chat 14028.chat mají různé modifikátory, takže se jejich identity navzájem nepletou.

Datový podklad​

První verze podporuje jeden SQL dotaz s číselným pdk. Dotaz a sloupcová definice musí zpřístupnit autora, jeho jméno, text a datum i čas vytvoření zprávy. Sloupec klíče autora má obsahovat identifikátor srovnatelný s COMEX.User.ID, podle kterého se rozlišují vlastní a cizí zprávy.

pdk identifikuje celou zprávu. Pokud je text uložen ve více opakováních, každá část má své číselné psk a potřebuje mapování columnPsk. Chat spojí načtené části stejného pdk v číselném pořadí psk. Nástroj zprávy se vyvolává jednou pro celé pdk, nikoli pro každou část zvlášť.

Pořadí určuje datum a čas vytvoření, při shodě pdk a uvnitř zprávy psk. Chat zajistí toto pořadí už v SQL před stránkováním, i když definice nemá správné řazení přednastavené. Pro první načtení vybírá nejnovější řádky; v konverzaci je následně zobrazí od starších po novější.

Přístup ke konverzaci a její vymezení musí řešit tabulka a její filtry. U podtabulky se rodičovský URL key používá společným mechanismem table.data. Pro token #parentKey# musí být v dodatečném zadání definována odpovídající náhrada se specifics="parent-key" a správnou hash-mask; samotný token bez nastavení nestačí. Zděděný parametr substitution lze použít pro přetížení kontextu key a type.

Parametry​

ParametrPovinnost / výchozí hodnotaVýznam
columnAuthorKeyPovinný.Sloupec identifikátoru autora. V editoru Sloupec - klíč autora.
columnAuthorNamePovinný.Sloupec zobrazovaného jména autora.
columnTextPovinný.Sloupec textu zprávy.
columnDatePovinný.Sloupec data vytvoření.
columnTimePovinný.Sloupec času vytvoření.
columnPskNutný pro opakovaný text.Sloupec pořadníku jednotlivých částí textu. U jediné neopakované části jej lze vynechat.
textElementOdvozeno ze sloupce E<ID>.XDS ID textového pole dokumentového formuláře, do kterého se zpráva ukládá. Pro vlastní SQL alias je potřeba ID zadat výslovně.
newToolDostupný výchozí nástroj new, jinak první dostupný.Název konkrétního přidávacího nástroje pro odesílání.
itemsPerPage100, rozsah 1–10000.Počet datových řádků jedné stránky, nikoli počet úplných zpráv.
height400, minimum 240.Celková výška komponenty v pixelech včetně hlavičky a vstupu.

Šířka odpovídá prostoru, který komponentě poskytuje rámeček. Nižší požadovaná výška se omezí na použitelné minimum. Výraz pro výšku se při změně velikosti okna znovu vyhodnocuje.

Čtení historie a doplňování zpráv​

Při prvním otevření chat načte nejnovější stránku a zobrazí konec konverzace. Starší řádky doplní při odrolování nahoru nebo přes tlačítko Zobrazit starší. Používá nativní tabulkové stránkování.

Stránkování se počítá po řádcích. Zpráva rozdělená do více psk proto může na hranici stránky dočasně obsahovat jen část textu. Načtení další stránky její další části doplní ve správném pořadí bez opakování již načteného obsahu.

PodnětZpůsob načtení
První otevření, nový filtr nebo změna rodičovského kontextu.Nové načtení dat odpovídajících aktuálnímu kontextu a první stránce.
Běžná obnova z konektivity nebo serveru.Pouze zprávy s pdk > nejvyšší načtené pdk.
Starší historie.Další nativní rozsah řádků.
Editace nebo akce spuštěná z nástroje konkrétní zprávy v chatu.Celá použitá zpráva, tedy pdk = její klíč, včetně všech částí.

Inkrementální obnova předpokládá rostoucí klíče nových zpráv. Záměrně znovu nečte vzdálené úpravy ani přesuny do koše již načtených zpráv. Pro zobrazení stavu podle nového filtru se provede nové načtení.

Cizí přírůstek posune pohled dolů pouze při čtení konce konverzace. Při čtení historie zůstane pozice zachovaná a objeví se lokální indikátor Nové zprávy. Vlastní odeslání posune pohled na konec.

Propojení běžné tabulky s chatem​

Pokud běžná tabulka a chat používají stejný podklad, můžete po přidání položky v tabulce vyvolat kontrolu nových zpráv v chatu:

  1. Na zdrojové tabulce vytvořte propojení pro událost Přidání položky.
  2. Jako cíl zvolte Přehled » Data » [Součást] » Chat a příslušnou tabulku.
  3. Je-li cílový chat označen unikátním názvem, vyplňte jej také v propojení.
  4. V poli Spustit zvolte Obnovit obsah. Stejnému účelu slouží výslovná volba Doplnit nové zprávy.
<cxd:connection xmlns:cxd="http://www.flexideo.com/comex/definition"
event="itemadd"
target="comex.table.data:14028.chat"
run="refresh"/>

U chatu znamená Obnovit obsah kontrolu přírůstku, bez zahazování historie a přesouvání již seřazených bublin. Také volba Načíst nebo obnovit zprávy v běžné konektivitě doplňuje přírůstek; objekt propojení se nevyhodnocuje jako nový filtr.

Hledání lze připojit přes comex.table.form.filter. Odeslání filtru spustí nové načtení, aby i dříve načtené zprávy odpovídaly aktuálním podmínkám.

Odesílání a rozepsaný text​

Spodní vstup je dostupný, pokud definice nabízí povolený tabulkový nástroj typu new. Bez něj chat slouží ke čtení. K ukládání potřebuje standardní dokumentový formulář cílového typu a jeho editovatelné textové pole odpovídající textElement.

  • Enter odešle zprávu.
  • Shift+Enter vytvoří nový řádek. Text může mít více odstavců.
  • Během odesílání je vstup zamknutý.
  • Text se vyčistí až po potvrzeném uložení; při chybě nebo nepotvrzeném výsledku zůstane rozepsaný.

Délku a opakování textu určují dokumentová metadata. Uložení používá nativní dokumentový formulář, jeho kontroly a akce. Pokud je potřeba doplnit další povinné údaje nebo potvrdit uložení, zpřístupní se tentýž formulář v dialogu. Autora a datum i čas vytvoření poskytuje serverová datová vrstva.

Rozepsaný text se ukládá lokálně a přežije obnovení stránky. Je oddělen podle uživatele, instance komponenty a efektivního kontextu key/type; jiná podtabulka nebo rodičovský klíč má vlastní rozepsaný text. Při zakázaném lokálním úložišti zůstává text alespoň v otevřeném vstupu.

Nástroje zprávy​

Nabídka pod třemi tečkami vpravo nahoře v bublině je dostupná u každé zprávy. Obsahuje povolené řádkové nástroje podkladové definice, včetně jejich definovaných ikon. Respektuje jejich podmínky, skrytí a zakázání.

Na konci nabídky je vždy volba Zkopírovat zprávu, se stejnou ikonou kopírování jako v běžné tabulce. Je dostupná i bez řádkových nástrojů. Kopíruje aktuálně zobrazený text zprávy, tedy spojené načtené části psk včetně řádků a odstavců, bez autora, času a nabídky. U zprávy na hranici stránky nejprve načtěte potřebné části historie, pokud chcete zkopírovat celý její text.

Otevření nabídky jiné zprávy zavře předchozí nabídku, i mezi více chaty na stránce. Nabídku zavře také opětovné kliknutí na tři tečky, kliknutí mimo ni nebo klávesa Escape. Po Escape se fokus vrátí na tlačítko nabídky.

Editace používá běžný dokumentový dialog. Odebrání zprávy je možné pouze přes definovanou řádkovou akci; samotný chat žádnou univerzální mazací akci nepřidává. Zda aplikační akce zprávu přesouvá do koše nebo provádí jinou operaci, určuje její definice. Po dokončení vlastního nástroje chat znovu načte celé použité pdk; pokud jej SQL filtr už nevrací, zpráva z konverzace zmizí.

Vzhled a hlavička​

Hlavička přebírá název, popis a ikonu podkladové tabulky, stejně jako běžná tabulková komponenta. Skrytá nebo prázdná hlavička se řídí obecným nastavením komponenty.

Rohy bublin respektují aplikační nastavení corners a smoothCornersRadius přes společnou CSS proměnnou --smooth-corner. Ostré i oblé rohy tak odpovídají ostatním komponentám.

Barvy vycházejí ze společného vzhledu. V custom CSS je lze upravit na komponentě pomocí proměnných --chat-own-background, --chat-other-background, --chat-message-color, --chat-menu-background, --chat-menu-color, --chat-input-background, --chat-input-color, --chat-send-background a --chat-send-color.

Metody a události​

MetodaVolba v editoruVýznam
refreshObnovit obsah.Inkrementální kontrola nových zpráv.
loadNewMessagesDoplnit nové zprávy.Výslovná inkrementální kontrola nových zpráv.
loadDataNačíst nebo obnovit zprávy.V běžné konektivitě doplní přírůstek; skutečný filtr zahájí nové načítání.
sendMessageOdeslat rozepsanou zprávu.Odešle text ze spodního vstupu.
getPdkListSeznam načtených zpráv.Vrátí jedinečné klíče načtených zpráv s typem dokumentu a pohledovým typem.

Vedle obecných událostí komponenta nabízí refresh, itemAdd, itemAddEdit, itemEdit, itemEvent a itemAction. Přidání zprávy lze použít jako zdroj konektivity pro další součást stránky.

Aktuální rozsah​

První verze pracuje s prostým textem. Přílohy, vlákna odpovědí, reakce, trvalé označení přečtení a potvrzení doručení nejsou součástí tohoto modifikátoru. Indikátor nových zpráv je lokální; potvrzené uložení není potvrzením přečtení příjemcem.

Podporu znaků mimo BMP, například emoji, je nutné ověřit také v serverové ukládací a čtecí cestě. Klientské dělení textu zachovává páry Unicode, ale v dosavadním pilotu se tyto znaky po uložení z datové vrstvy nevracely. Toto omezení nelze odstranit samotným mapováním sloupců chatu.

Související dokumentace​