KEPLIN Docs

Datastorer och data

Hur en skärm laddar, filtrerar och sparar data — post- och listdatastorer, nycklar, filter, sidindelning och databindningarna.

En skärm talar inte direkt med databasen: den talar med datastorer — databehållare på skärmen som laddar poster via appens tabell-API:er. Widgetarna binds till datastorerna: en Tabell visar raderna från en listdatastore, och ett formulärs fält läser och skriver i en postdatastore.

Det här är länken mellan två kapitel: tabell-API:erna skapas ovanpå datamodellen (kapitlet API:er & GraphQL); här binds skärmen till dem.

De två typerna av datastore

Typ Vad den laddar Till vad
Post EN post (eller en ny, tom post) Formulär: fälten binds till postens fält, och i slutet sparar man.
Lista En samling poster Tabeller, listor, kort, diagram, kanban-tavlor, kalendrar.

Datastorer kan leva på två ställen:

  • På skärmen — skapade i inspektorn utan markering, i kategorin Data. De är delade: flera widgetar kan läsa från samma, och det är det man använder för formulär och för master–detalj-relationer.
  • Inuti en widget — datawidgetarna (Tabell, Diagram, KPI…) har sin egen datastore i sin kategori Data. Det är det vanligaste fallet för fristående rutnät och diagram.

Motorn är densamma på båda ställena; den enda skillnaden ligger i vilka värdekällor som är tillgängliga i filtren (se bindningarna).

Skapa en datastore på skärmen

  1. Klicka på en tom yta på canvasen så att inspektorn visar skärmen.
  2. Klicka på + post eller + lista i kategorin Data.
  3. Klicka på den skapade datastoren för att öppna modalen Konfigurera datastore.
  4. Ge den ett Datastorens namn — det är med det namnet widgetarna och koden hittar den (t.ex. conta, contas).
  5. Välj under Tabell-API det API som levererar data. API:ets fält blir tillgängliga för kolumner, bindningar och filter.

Kategorin Data på skärmen Kontouppgifter: postdatastoren, listdatastoren och knapparna + post / + lista.
Kategorin Data på skärmen Kontouppgifter: postdatastoren, listdatastoren och knapparna + post / + lista.

Nota

Utan publicerade tabell-API:er varnar väljaren: Inga publicerade tabell-API:er i den här appen. Skapa först API:et ovanpå modellens entitet — det är ett steg i kapitlet API:er & GraphQL.

Postdatastore — vilken post som ska laddas

En postdatastore svarar på en fråga: vilken post? Svaret ger du i Vilken post som ska laddas (nyckel):

  1. Klicka på + nyckelfält.
  2. Välj fältet (som standard primärnyckeln), operatorn och värdet — vanligtvis en Param från rutten: skärmen Kontouppgifter tar emot id i adressen och laddar kontot med det id:t.
  3. Flera villkor bildar en sammansatt nyckel — alla måste matcha.

Utan villkor laddar datastoren en ny (tom) post — det är så samma formulärskärm också duger till att skapa: öppnad utan id börjar den blank; sparad gör den en infogning.

Listdatastore — filter och laddning

Filter (where)

Filter (where) är villkor som tillämpas varje gång data läses — det är här man begränsar vad som kommer från databasen. Varje villkor är fält / operator / värde; + lägg till filter lägger till villkor och + grupp skapar nästlade undergrupper, där Alla (AND) eller Någon (OR) avgör hur de kombineras.

Exempel från Kundhantering: skärmen Konton filtrerar estado eq "activa"; panelen ”mina konton” lägger till gestor eqSessionusername.

Laddning och sida

Alternativ Vad det gör
Ladda allt Hämtar alla poster i filtret på en gång — att byta sida, sortera och filtrera på skärmen blir omedelbart.
En sida i taget Går till servern vid varje sidbyte — för stora tabeller, där det inte är rimligt att hämta allt.
Per sida Hur många rader som visas åt gången på skärmen — inte att förväxla med hur många poster som läses.
Ladda automatiskt Läser data så snart skärmen öppnas. Stäng av om du hellre laddar först efter en åtgärd (en ”Sök”-knapp, till exempel).

Dica

Använd Filter (where) för att begränsa vad som läses, oavsett läge. ”Ladda allt” med ett vettigt filter är snabbt; utan filter alls är det att be om hela tabellen.

Bindningarna — varifrån ett värde kommer

Varje gång ett filter, en nyckel eller en egenskap behöver ett värde använder du samma del: bindningen. Den första väljaren anger källan; resten ändras efter den:

Källa Vad det är
Fast Ett värde som skrivs på plats, lika för alla.
Param En parameter från skärmens rutt (avsnittet Ruttparametrar).
Session Ett fält från den inloggade användaren (userId, username, name).
Tillstånd Ett värde som sparats i appens minne med keplin.state.set() — tillgängligt på alla skärmar.
Datastore Ett fält från en annan datastore på skärmen — grunden för master–detalj.
Widget Det aktuella värdet i en annan inmatningswidget — grunden för interaktiva filter.

Källorna Datastore och Widget finns bara i datastorer inuti widgetar — de beror på resten av skärmen. I skärmens egna datastorer finns de fyra första.

Med de här delarna bygger man vardagens mönster utan kod:

  • Master–detalj — kontots tabell med affärsmöjligheter: i tabellens datastore, filtret contaId eqDatastorecontaid. Att välja ett annat konto laddar om detaljen.
  • Textfilter — en Textruta ”sök” och, i tabellens datastore, nome containsWidget ▸ rutan. (För att filtrera först vid ett knapptryck gör man det via en händelse — se Händelser och SDK:t.)

Binda formulärfält till en post

Varje formulärfält har, i kategorin Data, avsnittet Databindning: välj postdatastoren och fältet. Därefter visar inmatningsfältet det laddade värdet och ändringarna stannar i datastoren — osparade — tills någon sparar.

Sista steget är en knapp vars händelse sparar:

const ok = await keplin.data.store("conta").save();
if (ok) {
  keplin.ui.toast("Sparat.", "success");
}

Den här koden är exakt vad den fördefinierade åtgärden Spara datastore i händelseredigeraren infogar åt dig. save() validerar först (obligatoriska fält, regler, valideringsskript) och sparar bara om allt passerar; den returnerar true om det sparades.

Skärmen Kontouppgifter: formulärfält bundna till postdatastoren, redo att sparas.
Skärmen Kontouppgifter: formulärfält bundna till postdatastoren, redo att sparas.

Modalen Konfigurera datastore, fält för fält

Modalen Konfigurera datastore: API, nyckel/filter, laddning och sida.
Modalen Konfigurera datastore: API, nyckel/filter, laddning och sida.

Fält Post Lista
Datastorens namn
Tabell-API
Vilken post som ska laddas (nyckel)
Filter (where)
Laddning / Per sida
Ladda automatiskt

Datastorer på publika skärmar

På en skärm som är markerad Publik skärm (utan session) kommer data bara från API:er med publik läsning: väljaren visar bara dessa, och ett redan valt API som inte är publikt markeras — Det här API:et har ingen publik läsning — på en skärm utan session laddas inga data. Läsningen markeras som publik i API-editorn.

Data i koden

Allt som datastorerna gör finns också i händelsernas SDK — keplin.data.store("namn") returnerar datastoren via dess namn, med reload(), setWhere(), get()/set()/save() och sällskap. Kapitlet Händelser och SDK:t går igenom det.

Varför inte…?

  • Varför laddas inga data? Kontrollera, i tur och ordning: är Ladda automatiskt påslaget? Finns det valda API:et, och är det publicerat? Är API:ets läsning publik, om skärmen är publik? Utesluter filtret allt?
  • Varför öppnas alltid en tom post? Postdatastoren har inga villkor under Vilken post som ska laddas (nyckel) — eller så kommer inte parametern som villkoret använder fram i rutten.
  • Varför dyker den nya kolumnen inte upp när jag ändrat modellen? Datastoren sparar en ögonblicksbild av API:ets fält från när du valde det. Öppna Konfigurera datastore igen och välj API:et på nytt för att uppdatera bilden.
  • Varför är sidindelningen långsam? Du kör En sida i taget med många vändor till servern — eller Ladda allt utan filter i en enorm tabell. Anpassa läget till datamängdens verkliga storlek.