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

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):
- Klicka på + nyckelfält.
- Välj fältet (som standard primärnyckeln), operatorn och värdet — vanligtvis en
Param från rutten: skärmen Kontouppgifter tar emot
idi adressen och laddar kontot med det id:t. - 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 eq → Session ▸ username.
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 eq→ Datastore ▸conta▸id. Att välja ett annat konto laddar om detaljen. - Textfilter — en Textruta ”sök” och, i tabellens datastore,
nome contains→ Widget ▸ 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.

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

| 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.