Een rapport maken
Doel
Van een ontworpen sjabloon een rapport maken dat gebruikers kunnen uitvoeren: afgedrukt voor één record ("druk deze factuur af") of over een hele lijst, vanaf de opdrachtbalk, in de app die ze al open hebben.
Waaruit een rapport bestaat
Twee helften, en ze komen samen bij een naam.
- Het sjabloon — de pagina: de banden, de tabellen, het logo, het watermerk. Ontworpen in de grafische designer en geëxporteerd als JSON, dat je hier plakt.
- De datasets — de rijen die het vullen. Elke dataset noemt een opgeslagen query of bevat een eigen query, onder een naam waarnaar het sjabloon verwijst.
Een rapport bevat geen eigen gegevens. Alles wat het afdrukt, is een query, uitgevoerd wanneer iemand op Afdrukken drukt, onder diens machtigingen. Twee mensen die hetzelfde rapport afdrukken, zien elk de records die zij mogen zien — een rapport is een opmaak over je gegevens, nooit een manier om te omzeilen wie ze mag lezen.
Vereisten
- Je bent aangemeld als maker, met een oplossing en een omgeving geselecteerd.
- De opgeslagen query's die je rapport gaat gebruiken, bestaan al (of je schrijft de query ter plekke).
- Je hebt een sjabloon dat uit de designer is geëxporteerd.
Stappen
- Open je oplossing en kies Rapporten.
- Selecteer Nieuw en geef het een weergavenaam — de logische naam vult zichzelf in.
- Vul de datasets in. Voor elke dataset:
- Naam — hoe het sjabloon deze rijen noemt. De repeater van het sjabloon noemt hem, dus de twee moeten exact overeenkomen.
- Opgeslagen query — de vraag die de dataset vult, gekozen uit de opgeslagen query's van de omgeving in plaats van getypt. Elke optie zegt welke tabel de query leest, want een weergavenaam onderscheidt er zelden twee. Schrijf eerst de vraag — zie Een query opslaan.
- Recordveld — optioneel; zie hieronder.
- Plak de JSON van het sjabloon.
- Selecteer Opslaan. Het platform controleert of het rapport goed gevormd is, of elke query een geldige query is en of elke query hier echt zou draaien — elk veld, elke join en elke meetwaarde tegen de echte tabellen van deze omgeving. Een verkeerd gespeld veld wordt nu geweigerd, in plaats van ontdekt door wie op Afdrukken drukt.
De eerste dataset is de primaire. De tabel ervan is waar het rapport over gaat: die bepaalt welke records en welke lijsten het rapport op hun opdrachtbalk aanbieden, en het is de dataset die het huidige filter van een lijst meekrijgt.
Eén record afdrukken
Stel het recordveld in op een dataset en het rapport kan voor één record worden afgedrukt.
- Op de primaire dataset is dat meestal
id— "deze factuur". - Op een onderliggende dataset is het het zoekveld terug naar het bovenliggende record —
par_invoiceidop de regels, zodat het afdrukken van factuur 42 de regels van factuur 42 afdrukt en geen andere. - Laat je het leeg, dan maakt het voor de dataset niet uit vanuit welk record je afdrukt. Zo kan één rapport een enkele factuur afdrukken naast een tabel met de wisselkoersen van deze maand.
Er een uitvoeren
Een rapport bereik je bewust — niets zet een knop op een tabel alleen omdat een rapport die tabel noemt. Drie ingangen:
- Vanuit de navigatie van de app, als een maker het rapport daar heeft geplaatst. Het opent over de hele tabel.
- Vanuit een opdracht die een maker heeft getekend op een formulier of een weergave, met Een rapport uitvoeren als gedrag. Ingedrukt op een geopend record drukt het dat record af; ingedrukt op een lijst gaat het over de hele tabel. Zie Een knop iets laten doen.
- Vanuit een dashboardwidget die het noemt.
In alle gevallen opent het rapport als eigen scherm, met de navigatie van de app er nog naast en het adres in de adresbalk — dus een rapport waarnaar je kijkt, kun je vernieuwen, als bladwijzer opslaan of naar een collega sturen. Een rapport dat door een opdracht is geopend, heeft een knop ← aan het begin van de werkbalk van de viewer, die teruggaat naar het scherm waarop de knop werd ingedrukt.
De zoekopdracht en het filter van een lijst gaan niet mee. Een rapport wordt aangesproken met zijn eigen naam, en een filter is niet iets wat een adres kan meedragen; wil je over een kleinere set records rapporteren, geef het filter dan aan het rapport.
Een rapport op het scherm lezen
De viewer opent op één pagina tegelijk, met een zoom waarbij een hele pagina past, en met Afdrukken aan het eind. Vier bedieningselementen veranderen wat je ziet:
- Pagina's — Eén pagina met een paginaknop (zo lees je een rapport) of Alle pagina's, scrollend (zo controleer je een rapport voor het afdrukken). Bij Alle pagina's verdwijnt de paginaknop, want die zou een tweede antwoord zijn op de vraag waar je bent.
- Zoom — Pagina passend, Breedte passend of Werkelijke grootte. Passend betekent passend, in beide richtingen: een pagina die smaller is dan je venster, wordt vergroot tot hij het vult, want daar is de opdracht naar genoemd. Werkelijke grootte is het antwoord als je 1:1 wilt.
- Volledig scherm — vult het venster met het rapport. Esc verlaat het. Het rapport blijft binnen de app, dus meldingen en de rest van het product blijven werken terwijl het open is.
- Afdrukken.
Afdrukken levert elke pagina op volledige grootte, niet alleen de pagina op het scherm en niet op de zoom waarmee je las, en zonder de eigen knoppen van de viewer. Het papier heeft het formaat waarvoor het rapport is ontworpen — een A4-rapport wordt op A4 afgedrukt, van rand tot rand, zonder koptekst, voettekst, URL of paginanummer van de browser in de marge, want het vel heeft geen marge waarin die kunnen worden afgedrukt.
Heb je kop- en voetteksten in het afdrukvenster van je browser aangezet, dan krijg je die nog steeds — die instelling is van jou, en het platform overschrijft haar niet. Zet daar "Kop- en voetteksten" uit.
Een rapport is tekst, geen afbeelding ervan
Je kunt elke tekst in een rapport selecteren en kopiëren, en Zoeken in je browser (Ctrl+F / ⌘F) doorzoekt de pagina waarop je bent. Een schermlezer leest het rapport voor in plaats van een afbeelding aan te kondigen. Niets hiervan is een instelling: een rapportpagina is gewone tekst op de pagina, en daardoor worden Perzische en Arabische regels ook correct weergegeven als ze een Latijnse productcode of een prijs bevatten — de browser zet de gemengde tekst zelf in de juiste volgorde.
Zoeken doorzoekt de pagina's die op het scherm staan. Bij Eén pagina is dat de pagina die je leest; schakel over naar Alle pagina's om het hele rapport in één keer te doorzoeken.
Datums, getallen en cijfers
Een rapport drukt datums af in dezelfde kalender en hetzelfde patroon als het raster ernaast, en getallen met dezelfde cijfers — Perzische cijfers en Jalali-datums voor een Perzische tenant. Dit stel je niet per rapport in: het komt uit Instellingen → Kalender en de landinstelling van de tenant, zodat een rapport niet kan afwijken van de rest van het product.
Het tussen omgevingen verplaatsen
Een rapport is een oplossingsonderdeel, ondergebracht onder de tabel waarover het gaat. Voeg het aan je oplossing toe vanuit de lijst Onderdelen beheren van die tabel, en het wordt samen met al het andere geëxporteerd en geïmporteerd — inclusief het sjabloon, dat binnen het rapport meereist in plaats van ernaast.
De opgeslagen query's reizen ook mee en worden ervoor geïmporteerd: een rapport wordt geweigerd als het een query noemt die de doelomgeving niet heeft — de eerlijke fout, in plaats van een rapport dat wordt geïmporteerd en dan niets afdrukt.
Problemen oplossen
- "The template is not valid JSON." — wat je hebt geplakt, is afgekapt of bevat een los teken. Het vak herformatteert niet wat je typt, dus wat je ziet, is wat is verstuurd.
- "A report needs at least one dataset." — een datasetrij telt alleen mee met zowel een naam als een opgeslagen query; een half ingevulde rij wordt genegeerd.
- "Dataset 'rows' must name exactly one of 'savedQuery' or 'query'." — je hebt ze allebei opgegeven, of geen van beide.
- "…names the saved query 'x', which does not exist in this environment." — controleer de spelling, of voeg de query aan de oplossing toe zodat hij meereist.
- "Unknown field …" — de query noemt een veld dat niet op zijn tabel staat. Herstel de query, niet het rapport.
- Het rapport wordt afgedrukt, maar de pagina is leeg. — de repeater van het sjabloon noemt een dataset die het rapport niet definieert. De namen moeten exact overeenkomen.
- "This report's template could not be laid out." — de engine kon er geen pagina's van maken. Exporteer opnieuw vanuit de designer; een met de hand bewerkt sjabloon gaat makkelijk kapot.
- Er verschijnt geen rapportopdracht op het record. — niets genereert er een. Teken een knop en geef die Een rapport uitvoeren, of plaats het rapport in de navigatie van de app.
- Het rapport opende maar toont elk record. — het werd uitgevoerd vanuit een lijst, of vanuit een record dat nooit is opgeslagen. Alleen een opgeslagen, geopend record beperkt een rapport.