Datastorer og data
Hvordan en skjerm laster, filtrerer og lagrer data — post- og liste-datastorer, nøkler, filtre, paginering og databindingene.
En skjerm snakker ikke direkte med databasen: den snakker med datastorer — skjermens databeholdere, som laster poster gjennom tabell-API-ene i appen. Widgetene bindes til datastorene: en Tabell viser radene fra en liste-datastore, feltene i et skjema leser og skriver i en post-datastore.
Dette er leddet mellom to kapitler: tabell-API-ene lages oppå datamodellen (kapitlet API-er & GraphQL); her bindes skjermen til dem.
De to typene datastore
| Type | Hva den laster | Til hva |
|---|---|---|
| Post | ÉN post (eller en ny, tom post) | Skjemaer: feltene bindes til feltene i posten, og til slutt lagres det. |
| Liste | En samling poster | Tabeller, lister, kort, diagrammer, kanbaner, kalendere. |
Datastorene kan bo på to steder:
- På skjermen — opprettet i inspektøren uten noe valgt, i kategorien Data. De er delte: flere widgets kan lese fra den samme, og det er det som brukes til skjemaer og til master–detalj-forhold.
- Inne i en widget — datawidgetene (Tabell, Diagram, KPI…) har sin egen datastore i kategorien Data hos seg. Det er det vanligste tilfellet for uavhengige rutenett og diagrammer.
Motoren er den samme begge steder; den eneste forskjellen ligger i verdikildene som er tilgjengelige i filtrene (se bindingene).
Opprette en datastore på skjermen
- Klikk på et tomt område på canvaset så inspektøren viser skjermen.
- I kategorien Data, klikk på + post eller + liste.
- Klikk på den opprettede datastoren for å åpne vinduet Konfigurer datastore.
- Gi den et Navn på datastoren — det er med dette navnet widgetene og
koden finner den (f.eks.
conta,contas). - Under Tabell-API, velg API-en som leverer dataene. Feltene i API-en blir tilgjengelige for kolonner, bindinger og filtre.

Nota
Uten publiserte tabell-API-er varsler velgeren: Ingen publiserte tabell-API-er i denne appen. Opprett først API-en oppå entiteten i modellen — det er et steg i kapitlet API-er & GraphQL.
Post-datastore — hvilken post som skal lastes
En post-datastore svarer på ett spørsmål: hvilken post? Svaret gis under Hvilken post som skal lastes (nøkkel):
- Klikk på + nøkkelfelt.
- Velg feltet (som standard primærnøkkelen), operatoren og verdien —
typisk en Param fra ruten: skjermen Ficha de Conta mottar
idi adressen og laster kontoen med den id-en. - Flere betingelser danner en sammensatt nøkkel — alle må stemme.
Uten betingelser laster datastoren en ny (tom) post — det er slik den
samme skjemaskjermen også tjener til å opprette: åpnet uten id, starter
den blank; lagret, gjør den innsettingen.
Liste-datastore — filtre og innlasting
Filtre (where)
Filtre (where) er betingelser som brukes hver gang dataene leses — det er her du begrenser hva som kommer fra databasen. Hver betingelse er felt / operator / verdi; + legg til filter legger til betingelser og + gruppe lager nestede undergrupper, med Alle (AND) eller Minst én (OR) som avgjør hvordan de kombineres.
Eksempel fra Gestão de Clientes: skjermen Contas filtrerer
estado eq "activa"; panelet «mine kontoer» legger til gestor eq →
Økt ▸ username.
Innlasting og side
| Alternativ | Hva det gjør |
|---|---|
| Last inn alt | Henter alle postene i filteret på én gang — sidebytte, sortering og filtrering på skjermen blir umiddelbart. |
| Én side om gangen | Går til serveren ved hvert sidebytte — for store tabeller, der det ikke gir mening å hente alt. |
| Per side | Hvor mange rader som vises av gangen på skjermen — ikke å forveksle med hvor mange poster som leses. |
| Last inn automatisk | Lese dataene så snart skjermen åpnes. Slå av hvis du heller vil laste først etter en handling (en «Søk»-knapp, for eksempel). |
Dica
Uansett modus, bruk Filtre (where) til å begrense hva som leses. «Last inn alt» med et anstendig filter er raskt; uten noe filter er det å be om hele tabellen.
Bindingene — hvor en verdi kommer fra
Hver gang et filter, en nøkkel eller en egenskap trenger en verdi, bruker du den samme brikken: bindingen. Den første velgeren sier kilden; resten endrer seg etter den:
| Kilde | Hva det er |
|---|---|
| Fast | En verdi skrevet der og da, lik for alle. |
| Param | En ruteparameter for skjermen (seksjonen Ruteparametere). |
| Økt | Et felt fra den påloggede brukeren (userId, username, name). |
| Tilstand | En verdi lagret i appens minne med keplin.state.set() — tilgjengelig på alle skjermer. |
| Datastore | Et felt fra en annen datastore på skjermen — grunnlaget for master–detalj. |
| Widget | Den nåværende verdien til en annen input-widget — grunnlaget for interaktive filtre. |
Kildene Datastore og Widget finnes bare i datastorene inne i widgets — de avhenger av resten av skjermen. I skjermens datastorer er det de fire første som gjelder.
Med disse brikkene bygges hverdagsmønstrene uten kode:
- Master–detalj — tabellen over salgsmuligheter for kontoen: i
datastoren til tabellen, filteret
contaId eq→ Datastore ▸conta▸id. Å velge en annen konto laster detaljen på nytt. - Tekstfilter — et Tekstfelt «søk» og, i datastoren til tabellen,
nome contains→ Widget ▸ feltet. (For å filtrere først ved klikk på en knapp gjøres det via hendelse — se Hendelser og SDK-et.)
Binde skjemafelt til en post
Hvert skjemafelt har, i kategorien Data, seksjonen Databinding: velg post-datastoren og feltet. Fra da av viser inputen den lastede verdien, og endringene blir liggende i datastoren — ulagret — til noen lagrer.
Det siste steget er en knapp hvis hendelse lagrer:
const ok = await keplin.data.store("conta").save();
if (ok) {
keplin.ui.toast("Gravado.", "success");
}
Denne koden er nøyaktig det den forhåndsdefinerte handlingen Lagre
datastore i hendelseseditoren setter inn for deg. save() validerer
først (påkrevde felt, regler, valideringsskript) og lagrer bare hvis alt
passerer; den gir tilbake true hvis den lagret.

Vinduet Konfigurer datastore, felt for felt

| Felt | Post | Liste |
|---|---|---|
| Navn på datastoren | ✓ | ✓ |
| Tabell-API | ✓ | ✓ |
| Hvilken post som skal lastes (nøkkel) | ✓ | — |
| Filtre (where) | — | ✓ |
| Innlasting / Per side | — | ✓ |
| Last inn automatisk | ✓ | ✓ |
Datastorer på offentlige skjermer
På en skjerm merket Offentlig skjerm (uten økt) kommer dataene kun fra API-er med offentlig lesing: velgeren viser bare dem, og en allerede valgt API som ikke er offentlig blir markert — Denne API-en har ikke offentlig lesing — på en skjerm uten økt laster den ikke data. Lesingen merkes som offentlig i API-editoren.
Dataene i koden
Alt datastorene gjør finnes også i SDK-et for hendelsene —
keplin.data.store("navn") gir tilbake datastoren etter navnet, med
reload(), setWhere(), get()/set()/save() og resten. Kapitlet
Hendelser og SDK-et går gjennom det.
Hvorfor ikke…?
- Hvorfor lastes det ikke data? Sjekk, i rekkefølge: er Last inn automatisk på? Finnes API-en du valgte, og er den publisert? På en offentlig skjerm, er lesingen i API-en offentlig? Ekskluderer filteret alt?
- Hvorfor åpnes alltid en tom post? Post-datastoren har ingen betingelser under Hvilken post som skal lastes (nøkkel) — eller parameteren som brukes i betingelsen kommer ikke fram i ruten.
- Hvorfor endret jeg modellen uten at den nye kolonnen vises? Datastoren tar vare på et bilde av feltene i API-en fra da du valgte den. Åpne Konfigurer datastore på nytt og velg API-en igjen for å oppdatere bildet.
- Hvorfor er pagineringen treg? Du står i Én side om gangen med mange turer til serveren — eller i Last inn alt uten filtre på en enorm tabell. Tilpass moduset til den virkelige størrelsen på dataene.