Naar hoofdinhoud gaan

Een weergave als raster tonen

Doel​

Zet een lijst met records op je portal zonder de lijst te tekenen — het eigen raster van het platform, met de kolommen die een weergave bepaalt.

Voordat je begint​

  • Een weergave op de tabel, met de kolommen die bezoekers moeten zien. Daar komen de kolomkoppen, de breedtes en de volgorde vandaan.
  • Een aangepaste API die de tabel opsomt, aangevinkt bij Wat het kan lezen van de portal. Zie Een app publiceren als portal voor hoe die lijst werkt.

Stappen​

  1. Zet in de app-designer Componenten → Tabelweergave of formulier op de plek waar de lijst moet komen.
  2. Kies op het tabblad Scherm de Tabel. Laat Weergave op De standaard van de tabel, of kies een van de weergaven van de tabel.
  3. Kies de Aangepaste API (portal) waar de rijen doorheen komen — bijvoorbeeld Notices (api:par_list_notices@1). Alleen contracten die op een GET antwoorden worden aangeboden, want een raster leest alleen.
  4. Publiceer en open de portal.

Dat is alles aan de tekenkant. Je kiest hier geen kolommen — dat heeft de weergave al gedaan.

Een raster stelt twee vragen, en de twee vakken beantwoorden er elk één. De tabel en de weergave bepalen wat er wordt getoond — de kolomkoppen, de breedtes, de volgorde — en het platform rekent dat uit voordat de pagina wordt geserveerd, zodat niets over de opbouw van je tabel een openbare browser bereikt. De aangepaste API bepaalt welke rijen, omdat op een portal elke leesactie via een contract gaat dat jij hebt geschreven. In de lijst met apps wordt het API-vak genegeerd en levert de tabel beide.

Wat de API moet doen​

Pagineren, en zeggen hoeveel het er zijn. Het raster vraagt telkens één pagina op en leest total om te weten of er een volgende is:

var page = runQuery({
entity: 'par_notice',
select: ['par_name', 'par_category', 'par_published_on'],
order: [{ field: 'par_published_on', descending: true }],
top: num(getInput('top')),
skip: num(getInput('skip'))
});

setOutput('rows', page);
setOutput('total', page.length());

Zonder total kan de paginering een laatste pagina niet van een volle onderscheiden, en biedt hij een Volgende aan die nergens heen leidt.

Een kolom die de weergave heeft en de API niet teruggeeft​

Die toont in elke rij een streepje. De weergave bepaalt de kopjes; de API bepaalt wat er in elke rij staat, en een veld dat de select weglaat, staat niet in de rij. Een kolom toevoegen is dus twee wijzigingen: de kolom in de weergave, en het veld in de select van de API.

Dat is opzet, geen vergissing. De weergave wordt gedeeld met de app binnen het platform, en een kolom die je daar voor je eigen mensen toevoegt, hoort dat veld niet aan vreemden te publiceren. Wat het platform verlaat, is wat de API selecteert.

Een raster zonder API verschijnt helemaal niet​

Laat Aangepaste API (portal) leeg, of noem er een die de portal niet heeft gekregen, en het raster wordt niet geserveerd — je krijgt geen raster in plaats van kolomkoppen boven een lege inhoud.

Dat is met opzet, en het is dezelfde regel die de rest van de portal volgt: een leeg raster leest als er zijn geen records, en dat is een andere bewering dan deze portal heeft ze nooit mogen tonen. Terugvallen op rechtstreeks lezen uit de tabel zou nog erger zijn — dat is precies de deur die §6.11.3 dichtdoet, via een andere route binnengekomen.

Waar de kolommen vandaan komen, en wanneer​

Uit de weergave, op het moment dat de portal wordt geserveerd. Bewerk de weergave, laad de portal opnieuw, en de kolommen veranderen — er hoeft niets opnieuw te worden gepubliceerd. Daarom vraagt een portalpagina het platform ook nooit wat er in een weergave zit: het antwoord komt met de pagina mee.

Noem je een weergave en verwijder je die later, dan zegt het raster dat hij niet beschikbaar is in plaats van stilletjes terug te vallen op de standaard. Jij hebt die kolommen gekozen, en een andere set die zonder waarschuwing op een openbare pagina verschijnt, is erger dan een raster dat eerlijk zegt dat het stuk is.

Wat een bezoeker er wel en niet mee kan​

Hij kan het lezen en er doorheen bladeren. Hij kan geen rijen selecteren, een record openen of een opdrachtbalk gebruiken — geen van die dingen bestaat hier. Elk ervan is een actie op een record, en wat een onbekende met een record mag doen, beslist je aangepaste API, niet een raster.

Wil je dat een bezoeker iets doet, teken dan een knop en geef hem een eigen rij op de toestemmingslijst.

Niet beschikbaar op een portal​

  • Een snel formulier (de oppervlakken Create/Edit). Een formulier heeft de verplichte regels, de keuzes en de plug-instappen van de tabel nodig, en niets daarvan hoort op een openbare site. Teken in plaats daarvan de velden en schrijf de aangepaste API achter je knop Opslaan — zie Bezoekers wijzigingen laten opslaan.
  • Een takenlijst. Een portalbezoeker is geen platformgebruiker en heeft geen inbox.

Beide melden dat op de pagina in plaats van stilletjes te mislukken.

Controleer of het werkte​

Open de portal zoals een onbekende dat zou doen. Het raster toont de kolommen van je weergave, met de kolomkoppen, en bladert door de records die de API teruggeeft. Bewerk daarna een van de kolomkoppen van de weergave en laad opnieuw — de portal volgt.