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

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.

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.

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 of true (het blok is NIET zichtbaar) danwel 0 of false (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(), waarbij de string %keypointer% vervangen zal worden door de dnkey van de actieve rij uit de tabel.

indelingSectie: Inspecties en Item: ExtraOnderwerpVeldeninspecties_extra_ow

select
case
when d1logic = 'F' and {id} = '1' then 'true'
when d1logic = 'F' and {id} = '0' then 'false'
when d1logic = 'T' and {id} = '0' then 'true'
when d1logic = 'T' and {id} = '1' then 'false'
else 'false'
end
from tbinitialisatie where upper(dvsectie) = 'INSPECTIES' and upper(dvitem)= 'EXTRAONDERWERPVELDEN'

MDDC_geefInspTrajectDetail.xmlinspecties_extra_ow

<blok>
<label>Indeling</label>
<width>105</width>
<height>85</height>
<type>doorlopend</type>
<notvisibleif>%query(inspecties_extra_ow,'0')%</notvisibleif>
<column value="dnkeyinspaanleiding">
<regel>1</regel>
.....

MDDC_geefInspTrajectDetail.xmlinspecties_extra_ow

<blok>
<label>Indeling</label>
<width>105</width>
<height>170</height>
<type>doorlopend</type>
<notvisibleif>%query(inspecties_extra_ow,'1')%</notvisibleif>
<column value="dnkeyinspaanleiding">
<regel>1</regel>
......

Zie verder voorbeelden 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

Een query kan worden gebruikt om de inhoud van de tag label contextgevoelig te maken.

Voorbeeld: wanneer in de schermkolomdefinitie van een detailscherm staat <label>Datum %query(omg_labelbesluit)%</label> zal het programma dynamisch het label samenstellen met de tekst 'Datum ' + daarachter het resultaat van de geëvalueerde query uit de tabel tbqueries met dvcode = omg_labelbesluit.

Indien de contextgevoeligheid is gebaseerd op andere informatie uit de kaart die getoond wordt (de query zal dan bestaan uit select x from y where dnkey = {id}) dan moet een tweede parameter %keypointer% meegegeven worden: <label>Datum %query('omg_labelbesluit,%keypointer%)%</label>. De variabele {id} uit de query zal vervangen worden met de primary key (dnkey) van de kaart waar je op staat.

Zie de voorbeelden hieronder bij action.

Visible

Een query kan worden gebruikt om een kolom contextgevoelig in het scherm op te nemen. In de schermkolomdefinitie (zowel voor kolommen van een lijst- als die voor het detailscherm) kan tag <visible> opgenomen zijn. Indien deze optionele tag de waarde false of 0 heeft dan moet de betreffende kolom NIET worden opgenomen. Indien deze optionele tag de waarde true of 1 heeft, of indien de tag niet bestaat, dan wordt de kolom wel opgenomen.

Een query kan worden gebruikt om de inhoud van de tag contextgevoelig de waarde true of false te geven. Voorbeeld: wanneer in de schermkolomdefinitie van een detailscherm staat <visible>%query(kolomXzichtbaar,%keypointer%)%</visible> zal het programma de tag visible vullen met de waarde die komt uit de aangeroepen geëvalueerde query. Indien die waarde ongelijk aan 'true' is dan moet de kolom NIET worden opgenomen.

De query zal dan bestaan uit zoiets als select case when x then 'true' else 'false' from y where dnkey = {id}) waarbij {id} onder water wordt vervangen door de dnkey van kaart waar je op staat (de parameter %keypointer% in de aanroep). Indien de query niet valide is, dan wordt de tag gevuld met 'false'.

Er bestaat een systeemquery met dvcode = geefWaardeRechtenkolom die makkelijk toegang geeft tot het rechtensysteem van OpenWave en false of true retourneert. Voorbeeld is het zichtbaar zijn van de knop wijzig bevoegd gezag in het detailscherm van de omgevingszaak. In de schermkolomdefinitie is de tag visible als volgt:

De query kijkt voor de betreffende inlogger naar de waarde van de kolom tbomgrechten.dlbomgbevgezedt.

Edit

Een query kan worden gebruikt om de tag edit contextgevoelig de waarde true of false te geven.

Voorbeeld: wanneer in de schermkolomdefinitie van een detailscherm staat <edit>%query(omgeving_mddc_schermknopolo,%keypointer%)%</edit> zal het programma het attribuut edit vullen met de waarde die komt uit de aangeroepen geëvalueerde query.

De query zal dan bestaan uit zoiets als select case when x then 'true' else 'false' from y where dnkey = {id}) waarbij {id} onder water wordt vervangen door de dnkey van kaart waar je op staat (de parameter %keypointer% in de aanroep). Indien de query niet valide is, dan wordt het attribuut edit gevuld met 'false'.

Er bestaat een systeemquery met dvcode = geefWaardeRechtenkolom die makkelijk toegang geeft tot het rechtensysteem van OpenWave en false of true retourneert. Zie hierboven bij visible: geefwaarderechtenkolom.

Backcolor / Fontcolor

Een query kan worden gebruikt om de tags backcolor en fontcolor contextgevoelig de waarde true of false te geven. Het resultaat van de query moet gevuld zijn met standaard html colorname (https://www.w3schools.com/colors/colors_names.asp).

Action

Een action kan in een schermkolomdefinitie worden gekoppeld aan een schermknop. Bijvoorbeeld een knop achter de kolom OLO-nummer in de omgevingsdetailkaart waarmee het OLO-loket met de juiste aanvraag wordt geopend afhankelijk van het OLO-nummer op de kaart: Of een knop die een PDOK-kaart opent op basis van de coördinaten van het bijbehorende locatie adres. Die action is dus contextgevoelig.

Voorbeeld 1: ga naar OLO-loket op juiste aanvraagnummer

De URL daartoe is: https://www.omgevingsloket.nl/BevoegdGezag/bevoegdgezag/AanvraagTab/Aanvraag/?????/AanvraagGegevens

Waarbij op de plaats van de vraagtekens een valide OLO-aanvraagnummer moet worden gevuld. Dat lossen we op door:

een knop te definiëren op het detailscherm van de omgevingszaak met een action waarin bovengenoemde URL wordt gedefinieerd

in de URL een queryverwijzing te maken teneinde het juiste OLO-aanvraagnummer op te halen

een query te maken die het gevraagde OLO-nummer retourneert.

De knop kan als volgt worden gedefinieerd:

Een action die begint met de functie openTabPage laat het programma als het ware de inhoud van openTabPage() intikken in de URL-editbox van de browser met als gevolg dat in een nieuw browsertabblad de gevraagde site wordt geopend. In de URL is het OLO-nummer opgenomen door een verwijzing naar een query met dvcode = omgeving_olonummer. Die query ziet er als volgt uit:

Aangezien in de query de variabele {id} is opgenomen die vervangen moet worden door de dnkey van de betreffende omgevingszaak, is de aanroep naar de query voorzien van een tweede parameter %keypointer% dus: %query(omgeving_olonummer,%keypointer%)%.

Stel het OLO-nummer is '123456' dan zal het uiteindelijke resultaat van het indrukken van de schermknop zijn het openen van de URL:

Voorbeeld 2: ga naar ruimtelijke plannen op grond van adresgegevens

De URL daartoe is: http://www.ruimtelijkeplannen.nl/web-roo/roo/bestemmingsplannen?xxxx&amp;yyyy Waarbij op de plaats van de xxxx de tekst 'postcode='+ een valide postcode moet worden ingevoerd en op de plaats van de yyyy moet de tekst 'huisnummer=' + een huisnummer en eventueel een huisletter worden ingevoerd.

Dat lossen we op door:

een knop te definiëren op het detailscherm van het locatie adres met een action waarin bovengenoemde URL wordt gedefinieerd

in de URL een queryverwijzing te maken teneinde de tekst 'postcode=' + de gewenste postcode op te halen

in de URL een queryverwijzing te maken teneinde de tekst 'huisnummer=' + een huisnummer en huisletter op te halen

een query te maken die de gevraagde postcode informatie retourneert

een query te maken die het gevraagde huisnummerinformatie retourneert.

De knop kan als volgt worden gedefinieerd:

<column>
<regel>1</regel>
<tagnaam/>
<label/>
<divwidth>20</divwidth>
<divheight>30</divheight>
<edit>true</edit>
<showhint>false</showhint>
<wavetype>schermknop</wavetype>
<source></source>
<filter>enable</filter>
<refresh>false</refresh>
<backcolor/>
<fontcolor/>
<nullable>true</nullable>
<icoon>14</icoon>
<align/>
<pretext/>
<posttext/>
<hint>ga naar ruimtelijke plannen</hint>
<action>openTabPage(http://www.ruimtelijkeplannen.nl/web-roo/roo/bestemmingsplannen?%query(locatie_postcode,%keypointer%)%&amp;%query(locatie_huisnr,%keypointer%)%)</action>
</column>

In de URL is het postcodegedeelte opgenomen door een verwijzing naar een query met dvcode = locatie_postcode. Die query ziet er als volgt uit:

Aangezien in de query de variabele {id} is opgenomen die vervangen moet worden door de dnkey van de betreffende locatie (tbperceeladressen), is de aanroep naar de query voorzien van een tweede parameter %keypointer%, dus: %query(locatie_postcode,%keypointer%)%.

In de URL is het huisnummergedeelte opgenomen door een verwijzing naar een query met dvcode = locatie_huisnr. Die query ziet er als volgt uit:

Aangezien in de query de variabele {id} is opgenomen die vervangen moet worden door de dnkey van de betreffende locatie (tbperceeladressen), is de aanroep naar de query voorzien van een tweede parameter %keypointer%, dus: %query(locatie_huismummer,%keypointer%)%.

Stel de postcode van de locatiekaart waarvandaan de knop wordt aangesproken = 1074XK en het huisnummer = 41, dan zal een URL geopend worden met:

Voorbeeld 3 Open een PDOK-kaart op basis van een coördinatenpaar

De URL van bijvoorbeeld het x, y punt (168875,382535) op een PDOK-kaart is:

De action:

De query coördinaten moet dus als resultaat een x- en een y-coördinaat teruggeven (in rijksdriehoek) gescheiden door een komma.

Filter

Een query kan worden gebruikt om de inhoud van de tag filter contextgevoelig te maken.

Voorbeeld: wanneer bij een processtap een extra invoerkolom is gedefinieerd van type dropdown, dan wordt de bijbehorende query voor het dropdownlijstje in het beheer bij de definitie van de procestap gedefinieerd. Deze wordt bij het binnenhalen van een proces vervolgens gekopieerd naar de tabel tbtermijnbewstappen om de kolom dvinvoerdropd aldaar met een dropdowwnlijstje te kunnen vullen. Om nu - dynamisch - het juiste dropdownlijstje te krijgen is de kolom dvinvoerdropd in de schermkolomdefinitie van het detailscherm van een processtap als volgt gedefinieerd (inclusief contextgevoelige zichtbaarheid en label):

Nullable

Een query kan worden gebruikt om de inhoud van de tag nullable contextgevoelig te maken.

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

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

<%query(apvoverig_tkstblk1,:keyvergunning)%>

Hetgeen betekent dat indien het zaaktype van de APV/Overige vergunning waar vandaan het document wordt gecreëerd van het soort 'O' is dat alleen dan de tekst Volgens artikel X van wet y zal de ontheffing …. zal worden ingevoegd.

Voorbeeld 2: invoegen tekst uit de tabel tekstblokken via de query

Hetgeen betekent dat indien het zaaktype van de APV/Overige vergunning waar vandaan het document wordt gecreëerd van het soort 'O' is dat dan de inhoud van de kolom dvtekstblok uit de tabel tbtekstblokken (beheer) met dvcode = tkstblk_1 wordt afgedrukt.

Indien soort = 'E' wordt de inhoud van de kolom dvtekstblok met dvcode = tkstblk_2 afgedrukt. En anders niets.

Zie voor invoegen plaatjes op basis van query onder Kopje: Invoegen plaatjes op basis van een query-aanroep naar tbqueries die verwijst naar tbimages bij Documentsjablonen.

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