Inhoud

Queries

Portaal beheerportaal-Nieuw. Tegel Queries.

Screenidentifiers:

De SQL-statements van deze tabel worden gebruikt:

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:

Voorbeeld

Een voorbeeld van een query is:

select 
  'Aantal: ' | | count(*) 
  from vwfrmomgorkestrator_adv 
  where trim(dvadviesbehandelaar) = trim(:keyaccount)

Deze query geeft het aantal openstaande adviezen, waarvoor de inlogger de behandelaar is.

Bij query's kunnen twee variabelen worden gebruikt:

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:

Queries voor tegelopschrift

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:

select 
    '<p style="color:red">' | | dvstatus | |'</p>' 
    | | '<br>startdatum: ' | | to_char(ddaanvraag,'dd-mm-yyyy') 
    | | '<br>fatale/streefdatum: ' 
    | | to_char(ddfataledatum,'dd-mm-yyyy') 
    | | case when ddingetrokken is not null 
            then '<br>ingetrokken: ' | | to_char(ddingetrokken,'dd-mm-yyyy') 
           else  
             '<br>besluit: ' | | to_char(ddbesluitdatum,'dd-mm-yyyy') 
           end
   from vwfrmomgvergunningen 
   where dnkeyomgvergunning = {id}

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

SELECT
       'Aantal: ' || count(*) from vwfrmomgorkestrator_lopend
        where (trim(dvibbcodemw) = trim(:keyaccount)
        or trim(dvcodeaccountman) = trim(:keyaccount))
maar onderstaande query geeft eenzelfde soort resultaat, maar dan in een fractie van de tijd
SELECT
       CASE
         WHEN count(*) < 5 THEN 'Aantal: ' || count(*)
         ELSE 'Aantal: 5 of meer'
       END opschrift
        FROM (select a.dnkey from tbomgvergunning a
              inner join tbinbehandelingbij b
              on (a.dnkey = b.dnkeyomgvergunningen and b.dlactief = 'T')
        where (trim(b.dvcodemedewerker) = trim(:keyaccount) or trim(a.dvcodeaccountman) = trim(:keyaccount))
              and a.ddbesluitdatum is null
              and a.ddblokkering is null
              and a.ddingetrokken is null
        limit 5) as c

In 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

<blok>
      <label>Hyperlink</label>
      <width>100</width>
      <height>40</height>
      <type>doorlopend</type>
      <notvisibleif>%query(omgeving_blokhyperlink)%</notvisibleif>
      <column value="dvhyperlink">

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:

select case when (dlmappenhyperlink = 'F') then 1 else 0 end from tbrechten 
           where dnkey = (select dnkeyrechten from tbmedewerkers where trim(dvcode) = trim(:keyaccount))

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

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:

<visible>%query(geefwaarderechtenkolom,'tbomgrechten.dlbomgbevgezedt')%</visible>

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:

De knop kan als volgt worden gedefinieerd:

<column>
     <regel>3</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 omgevingsloket</hint>
    <action>openTabPage(https://www.omgevingsloket.nl/BevoegdGezag/bevoegdgezag/AanvraagTab/Aanvraag/%query(omgeving_olonummer,%keypointer%)%/AanvraagGegevens)</action>
   </column>

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:

select dvlvoaanvraagnr from tbomgvergunning where dnkey = {id}

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:

https://www.omgevingsloket.nl/BevoegdGezag/bevoegdgezag/AanvraagTab/Aanvraag/123456/AanvraagGegevens

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:

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:

select 'postcode='| | coalesce(dvpostcode,'') from tbperceeladressen where dnkey = {id}

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:

select 'huisnummer=' | | coalesce(trim(dvhuisnummer),'') | | coalesce(dvhuisletter,'') from tbperceeladressen where dnkey = {id}

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:

http://www.ruimtelijkeplannen.nl/web-roo/roo/bestemmingsplannen?postcode=1074XK&amp;huisnummer=41

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:

https://kaart.pdok.nl/api/api.html?mloc=168875,382535&mt=mt3&loc=168875,382535&zoom=10&tekst=Locatie:%3C/BR%3E168875,382535

De action:

opentabpage(https://kaart.pdok.nl/api/api.html?mloc=%query(coordinaten,%keypointer%)%&amp;mt=mt3&amp;loc=%query(coordinaten,%keypointer%)%&amp;zoom=10&amp;tekst=Locatie:%3C/BR%3E%query(coordinaten,%keypointer%)%)

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

<column value="dvinvoerdropd">
                <regel>3</regel>
                <tagnaam>dvinvoerdropd</tagnaam>
                <label>%query(termijnstappen_mddc_getinvoerlabeldropd,%keypointer%)%</label>
                <divwidth>400</divwidth>
                <divheight>30</divheight>
                <edit>true</edit>
                <showhint>false</showhint>
                <wavetype>keuzelijst</wavetype>
                <source>generalwithoutemptyline</source>
                <filter>%query(termijnstappen_mddc_getinvoerquerydropd,%keypointer%)%</filter>
                <refresh>false</refresh>
                <backcolor/>
                <fontcolor/>
                <nullable>true</nullable>
                <icoon/>
                <visible>%query(termijnstappen_mddc_isinvoerdropdvsb,%keypointer%)%</visible>
   </column>

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

Waarschuwing

LET OP: 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):

Voorbeeld 1: invoegen tekst uit query zelf.

De verwijzing in het sjabloon kan zijn: <%query(apvoverig_tkstblk1,:keyvergunning)%>.

De query uit tbqueries waarnaar wordt verwezen via apvoverig_tkstblk1 kan zijn:

select case when (select dvcodesoortovverg from tbovvergunningen where dnkey = {id}) = 'O' 
              then  'Volgens artikel X van wet y zal de ontheffing ....'
              else ''::text
         end

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

select dvtekstblok from tbtekstblokken where lower(dvcode) = 
               case when (select dvcodesoortovverg from tbovvergunningen where dnkey = {id}) = 'O' 
                    then  'tkstblk_1'
                    when (select dvcodesoortovverg from tbovvergunningen where dnkey = {id}) = 'E' 
                     then  'tkstblk_2'
               else 'xxx'
               end

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