Queries
Portaal beheerportaal-Nieuw. Tegel Queries.
Screenidentifiers:
- MDLC_getQueriesList.xml
- MDDC_getQueryDetail.xml
De SQL-statements van deze tabel worden gebruikt:
- om opschriften of staaf- of taartdiagrammen te genereren voor tegels
- om bepaalde scherminformatie in detailschermen per blok (on)zichtbaar te maken
- om inhoud van schermattributen in detailschermen zoals labels of actions, context-afhankelijk te maken
- om blokken tekst in te voegen in een document gemaakt vanuit een sjabloon.
- om resultsets te genereren ten behoeve van merge bij documentsjablonen
Voor querybeheer moet de inlogger beheerrechten hebben: tbmedewerker.dnbeheerniveau = 99 (of hoger). Alle kolommen en knoppen zijn dan toegankelijk.
Een aantal query's in deze tabel is noodzakelijk voor het programma. Dit zijn de query's die het vakje systeem aangevinkt hebben staan. De waarde van het systeem-aanvinkvakje kan niet worden gewijzigd met OpenWave. Aangevinkt betekent dat bij database-updates van OpenWave de bijbehorende query gewijzigd kan worden. Door gebruikers aangemaakte query's (met systeem = niet aangevinkt) zullen bij updates onaangetast blijven.
Aan de query worden de volgende eisen gesteld:
- EN de query moet met 'select' beginnen
- EN er mag GEEN puntkomma (';') in voorkomen (vanwege het gevaar voor SQL-injectie).
Voorbeeld
Een voorbeeld van een query is:
Deze query geeft het aantal openstaande adviezen, waarvoor de inlogger de behandelaar is.
Bij query's kunnen twee variabelen worden gebruikt:
- :keyaccount zal worden vervangen door tbmedewerkers.dvcode van de inlogger
- {id} wordt:
- vervangen met de dnkey van tbomgvergunning of tbhandhavingen of tbmilinrichtingen of tbovvergunningen of tbmilvergunningen wanneer de query gebruikt wordt op een zaak- of inrichtingsportaal als tegelopschrift
- vervangen met de dnkey van de kaart die hoort bij de basistabel van het detailscherm van waaruit de query wordt aangeroepen als onderdeel van schermattributen bij de schermkolomdefinitie
- vervangen met de dnkey van de kaart van de tabel waaruit een document wordt gecreëerd.
OpenWave heeft zelf een aantal functies op de database gedefinieerd - zoals fn_ddmaandjjjj() - die gebruikt kunnen worden in allerlei queries. Zie: OpenWave database functies.
De query heeft in de kolom dvcode een unieke, maar editbare, identifier, waarmee de query kan worden aangeroepen.
Tot slot KAN het evalueren van een query aan rechten worden gekoppeld. Dat wordt per query geregeld met de velden rechtentabelnaam en rechtenkolomnaam. De inlogger is via zijn rechtengroep verbonden met tbrechten of tbomgrechten, tbhorrechten, tbmilrechten, tbmilvergrechten, tbhhrechten, tbovrechten, tbinforechten. Dat zijn de mogelijke waardes van kolom rechtentabelnaam. De kolom rechtenkolomnaam verwijst naar een van de veldnamen van die rechtentabellen. De waarde van die veldnaam is F of T. Indien F dan wordt de query niet uitgevoerd. En als deze kolommen worden leeggelaten is er dus geen extra restrictie en wordt de query altijd geëvalueerd.
De kijkrechten op de modules:
- Omgevingszaken: tbrechten en dlaomgvsb
- Handhavingen: tbrechten en dlahahvsb
- APV/Overige: tbrechten en dlaovvvsb
- Objecten/inrichtingen: tbrechten en dlamilinrvsb
- Milieu/gebruik: tbmilvergrechten en dlamilvergvsb
Common table expressie WITH gebruik in queries
WITH mag gebruikt worden in queries waarbij het volgende geldt:
- de query moet beginnen met WITH
- in de gehele query mag NIET de substring update of insert of delete of merge voorkomen.
- haakjes (of) mogen alleen voor de syntax gebruikt worden: dus niet select d1logic val)1 en ook niet: where lower(dvsectie) = 'ad)viezen'
- na het sluithaakje van de with expressie begint de query met select
- er mag GEEN puntkomma (';') in de query voorkomen.
Voorbeeld
with const as (select d1logic val1 from tbinitialisatie where lower(dvsectie) = 'adviezen' and upper(dvitem) = 'RETOURISGELEVERD') select case when (SELECT val1 FROM const) = 'F' then to_char(coalesce(ddadvadvies,ddvervallen),'dd-mm-yyyy') || ' ' || dvadvinstantie else to_char(coalesce(ddadvdatering,ddvervallen),'dd-mm-yyyy') || ' ' || dvadvinstantie end from vwfrmadviezen where dnkeyomgvergunningen = {id} and case when (SELECT val1 FROM const) = 'F' then ((ddadvadvies is not null) or (ddvervallen is not null)) else ((ddadvdatering is not null) or (ddvervallen is not null)) end order by 1 LIMIT 4
Queries voor tegelopschrift
Het resultaat van een query (dus de evaluatie van het select-statement) mag in dit geval maar uit één kolom bestaan.
De aanroep van het SQL-statement vindt plaats via de tegeldefinitie van de tegel waarop het dynamische opschrift moet verschijnen door het vullen van de kolom Tegelopschrift dynamisch met API gettilecontent of getFlexChart() (zie Portal tegel).
Een voorbeeld van een dynamisch tegelopschrift is de waarde getTileContent(omgeving_status,{id}). De codering omgeving_status verwijst naar een uniek codering in de tabel tbqueries. Het SQL-statement dat aldaar staat zal worden gebruikt om het dynamische deel van het tegelopschrift te genereren.
Die parameter {id} kan gebruikt worden bij tegels op de zaakportals (dus niet bij opening of beheer). Deze wordt vervangen door de primary key van het betreffende zaakportaal (de identifier die opgenomen is in de URL van de portaalpagina). Indien de resultaat set uit meerdere regels bestaat, zal OpenWave deze aan elkaar plakken gescheiden door een puntkomma, zodat elke regel ook een regel op de tegel wordt.
Met HTML-code kan die éne resultaatkolom van een query toch in twee regels op een tegel getoond worden door op de gewenste plek bijvoorbeeld <br> in te voegen. Bovendien kunt u ook andere HTML-code gebruiken bijvoorbeeld kleur:
Het resultaat als tegelopschrift is bijvoorbeeld:
Wanneer een query niet valide SQL-code gebruikt zal het programma - bij gebruik voor tegelopschrift - het resultaat vervangen door 'fout:xml': dat zal dan op de betreffende tegel verschijnen.
Voorbeeld belang snelheid
Dynamische tegelkopschriften kunnen het uitschrijven van een portaal behoorlijk vertragen.
De volgende query zal traag zijn
maar onderstaande query geeft eenzelfde soort resultaat, maar dan in een fractie van de tijdIn het beheerportaal bij de definitie van de portalen (portalnames) staat (sinds versie 1.30.1) onderaan het detailschem van een portaaldefinitie een knop waarmee de duur van het uitvoeren van de dynamische tegelopschriften voor dat portaal kan worden gemeten.
Queries voor tonen van een diagram als tegelopschrift
Het gaat hierom dat de query een JSON-string genereert die OpenWave via de charts.js library rendert naar een staaf-, lijn- of taartdiagram.
Zie hiervoor Grafieken.
Query's om blokken onzichtbaar te maken in detailscherm
Zie Scherminformatie voor detailschermen. In de tags van een blok van een detailscherm kan (hoeft dus niet) de tag <notvisibleif> opgenomen worden (onder de tag <type>). De inhoud van de tag verwijst naar een bepaalde query. Zo zal <notvisibleif>%query(omgeving_hyperlink)%</notvisibleif> verwijzen naar een rij in tbqueries met dvcode = omgeving_hyperlink.
De bijbehorende query wordt geëvalueerd. De uitkomst van de query moet 1 (het blok is NIET zichtbaar) of 0 (WEL zichtbaar) zijn. Voorbeeld:
Indien wordt verwezen naar een niet bestaande query of het element is leeg of indien error bij evaluatie of uitkomst is <> 1 dan beschouwt het programma de uitkomst van de query als 0 (het blok is wel zichtbaar).
Indien in de aangeroepen query gebruik wordt gemaakt van de variabele {id} dan moet een tweede parameter worden toegevoegd aan de functie query() bestaande uit de string %keypointer%. Zie voorbeeld hieronder bij Query's voor contextafhankelijke attributen.
Query's voor contextafhankelijke schermkolommen
Vooralsnog wordt een queryaanroep ondersteunt bij de tags label, edit, backcolor, fontcolor, visible en action en filter.
Label
Visible
Edit
Backcolor / Fontcolor
Action
Voorbeeld 1: ga naar OLO-loket op juiste aanvraagnummer
Voorbeeld 2: ga naar ruimtelijke plannen op grond van adresgegevens
Voorbeeld 3 Open een PDOK-kaart op basis van een coördinatenpaar
Filter
Nullable
Query's voor invoegen tekstblokken bij sjablonen
Zie ook kopje Invoegen tekstblokken op basis van een query-aanroep naar tbqueries bij Documentsjablonen. De query wordt in het documentsjabloon wordt aangeroepen door met de merge-codering<%query(param1,param2)%>.
Bijvoorbeeld: <%query(apvoverig_tkstblk1,:keyvergunning)%>.
Waarschuwing
De hier gebruikte merge-codering zal niet door de spellingschecker heenkomen, voor een goede werking zal het sjabloon daarom opgeslagen moeten zijn zonder spellingschecker!
Param1 wordt opgezocht in de kolom dvcode van tbqueries. Die query wordt geëvalueerd waarbij de string {id} in de query - indien aanwezig - eerst wordt vervangen door de waarde van param2. Param2 is dus optioneel.
Param2 zal meestal gevuld worden met de dnkey van de kaart van waaruit het document wordt gecreëerd. In het sjabloon wordt dit opgegeven door param2 één van de volgende waardes te geven (er zijn geen andere mogelijkheden voor param2):
- :keyvergunning (staat voor de dnkey van een zaak: tbovvergunningen, tbomgvergunning, tbmilvergunningen, tbhandhavingen, tbbouwvergunningen, tbhorecavergunningen en tbinfoaanvragen)
- :keyadvies
- :keyinspectie
- :keyinspectiebezoek
- :keyinrichting (staat voor de dnkey van de inrichting)
- :keyadres (staat voor de dnkey van een aangewezen contactpersoon)
- :keybezwaarberoep
- :keylocatie (staat voor de dnkey van de locatie van de zaak/inrichting).
Voorbeeld 1: invoegen tekst uit query zelf
Voorbeeld 2: invoegen tekst uit de tabel tekstblokken via de query
Query's als vervanging voor formqueries en childqueries bij definitie document- en emailsjablonen
De inhoud van de kolommen van de formqueries en childqueries uit de definitie document- en emailsjablonen (beheer) kan ook bestaan uit een verwijzing naar een query in deze tabel tbqueries.
Hierdoor hoeft een query die in meerdere sjablonen gebruikt wordt maar eenmalig te worden gedefinieerd. De opmaak van de sjablonen wijzigt hierdoor niet. In tbqueries kan bovendien een select statement ingevoerd worden van onbeperkte grootte.
Zie het kopje formquery en childquery-verwijzingen naar tbqueries bij Documentsjablonen en Sjabloongroepen