Inhoud

Documentsjablonen en Sjabloongroepen

Portaal beheerportaal-Nieuw. Tegels Documentsjablonen en Sjabloongroepen.

Screenidentifiers:

Vanaf versie 1.23 is het beheer van documentsjablonen gesplitst in het beheer van Sjabloongroepen (tbdocumentsoorten) en Documentsjablonen (tbdocumenten). De oude tegel Documentsjablonen is hernoemd naar Sjabloongroepen en zal worden gebruikt voor het beheer van sjabloongroepen. De (nieuwe) tegel Documentsjablonen is bedoelt voor het beheer van de documentsjablonen: het aanmaken van nieuwe sjablonen en het wijzigen ervan plus het koppelen aan sjabloongroepen.

Sjablonen zijn .odt of .dotx/.docx files waarin merge-coderingen zijn opgenomen die dynamisch worden gevuld met gegevens uit de database. Een sjabloon wordt opgeroepen met de menuoptie Creëer document op diverse plekken in de applicatie, mits de gebruiker documentcreatie-rechten heeft voor de betreffende module. Voor de sjabloondefinities en groep definities inzien en wijzigen moet de inlogger beheerrechten hebben: tbmedewerker.dnbeheerniveau = 99.

Alle kolommen en knoppen op de sjabloonschermen zijn dan toegankelijk.

Sjabloongroepen

De sjablonen kunnen worden gekoppeld aan 1 of meerdere groepen, waarbij een groep toegekend kan worden aan één of meer modules door middel van hun moduleletters. Daar waar de gebruiker uiteindelijk een menuoptie Creëer document tot zijn beschikking heeft is dus deze moduleletter bepalend voor de inhoud van de radiobuttonlist: kies sjabloonsoort.

Vervallen sjabloongroepen zijn niet zichtbaar voor de gebruiker bij de wizard creëer document. In het detailscherm van een sjabloongroep, wordt de lijst met gekoppelde sjablonen getoond. Door middel van de plus- dan wel de min-knop, kunnen sjablonen gekoppeld/ontkoppeld worden aan de sjabloongroep. Er valt alleen te kiezen uit sjablonen die qua module overeenkomen met de toebedeelde modules aan de sjabloongroep. Ook zijn altijd zichtbaar de sjablonen die al gekoppeld zijn (ongeacht of deze sjablonen later vervallen zijn/ de module gewijzigd is waardoor logischerwijs het sjabloon niet opnieuw te kiezen is bij de sjabloongroep). Het daadwerkelijk aanmaken/verwijderen van sjablonen gebeurd bij de sjablonenlijst.

Documentsjablonenlijst

In de lijst met documentsjablonen kunnen documentsjablonen verwijderd worden (inclusief parameters), nieuw aangemaakt en gekopieerd worden. Bij het maken van een kopie worden de parameters mee gekopieerd. Ook kan er op de lijst gefilterd en gezocht worden.

Sjabloondefinitie

In het detailscherm van een documentsjabloon kan men het sjabloon na aanmaken vervolgens koppelen aan de gewenste sjabloongroep(en) via het blok Sjabloongroep(en). Hierbij valt er te kiezen uit sjabloongroepen die niet vervallen zijn en waarvan de module van het sjabloon waar men op staat voorkomt in de modules van de sjabloongroep. Voor bestaande sjablonen kan via het detailscherm op dezelfde manier de koppeling aan sjabloongroepen gewijzigd worden. Met de komst van dit blok is het veld Sjabloongroep komen te vervallen.

Triggers in het menu opties rechtsboven

Triggers linksonder

Waarschuwing

LET OP: indien de gebruikte merge-coderingen waarden bevatten die niet door de spellingchecker heenkomen, dan moet het sjabloon opgeslagen zijn zonder spellingchecker!!!

Triggers rechtsonder

Kolommen

Formquery

Het resultaat van een formquery wordt gebruikt om merge-coderingen in de vorm van <1> of <301> in een sjabloon te vervangen met waardes uit de database.

Waarschuwing

LET OP: Zorg dat de spellingchecker uit staat EN zorg dat de coderingen in het sjabloon zonder opmaak zijn (dus echt elke code selecteren en opmaak wissen uitvoeren)
Tevens geldt dat indien er gebruik gemaakt wordt van input parameters, het gebruik van de LIKE operator NIET van toepassing is: in dat geval zal alles na karakter % opgevat worden als naam van een input parameter. Wil men toch zoeken op een gedeelte van een waarde gebruik dan substring selects

Een eenvoudig sjabloonvoorbeeld van een ontvangstbevestiging:

<101>
  <102>
  <103>
  <104>
  Rommeldam, <7>
  Betreft: <5> 
  <105>,
  Hierbij kan ik u mededelen dat uw aanvraag betreffende een omgevingsvergunning voor <1> op <2> te <3>, 
  in goede orde is ontvangen op <4>.
  De aanvraag wordt behandeld onder zaakcode <6>.
  Wij hopen de zaak binnen <8> dagen afgerond te hebben.
  Hoogachtend,
  Burgemeester en wethouders van Gemeente Rommeldam,
  namens dezen,
  hoofd afdeling Vergunningen,
  <201> <204> <203> <205>
  Email: <206>
  Tel: <202>

Bij het samenvoegen van een sjabloon met gegevens uit de database geldt het volgende:

De resultaat set van een formquery moet dus bestaan uit één rij. Als de query meer rijen oplevert wordt alleen de eerste rij gebruikt. De waardes uit de kolommen van die rij worden samengevoegd met merge-coderingen uit de bijbehorende dotx/odt/docx-file. OpenWave beschouwt elk getal tussen een “groter dan teken” (>) en een “kleiner dan teken” (<) als een te vervangen merge-code, bijv. <1> of <201> of <531>.

<WRAP>

</wrap>

Wanneer de samenvoegfunctie van OpenWave dus in de dotx/docx/odt-file de merge-code <304> tegenkomt zal hij deze merge-code vervangen door de waarde van de 4e kolom van de resultaat set van formquery-4. De merge-code <6> zal hij vervangen door de waarde van de 6e kolom van de resultaat set uit formquery-1.

In bovenstaand voorbeeld worden coderingen gebruikt uit groep formquery-1, formquery-2 en formquery-3.

Formquery-1 zou de volgende kunnen zijn (de aliassen - vanwege < en > tussen dubbele quootjes - verwijzen naar de merge-codering in het sjabloon. Niet verplicht wel handig):

Select
  a.DVAANVRAAGNAAM "<1>",
  a.DVOBJADRES "<2>",
  a.DVOBJPLAATS "<3>",
  a.DDAANVRAAG "<4>",
  a.DVSOORTAANVRAAG "<5>",
  a.DVZAAKCODE "<6>",
  fn_ddmaandjjjj(fn_vandaag(0)) "<7>"
  from
  VWFRMOMGVERGUNNINGEN a
  WHERE	DNKEYOMGVERGUNNING = :keyvergunning
Formquery-2:

SELECT 
  DVAVRBEDRIJF "<101>", 
  DVAVRTAV "<102>", 
  DVAVRADRES "<103>",
  DVAVRPOSTCODE | | ' ' | | DVAVRWOONPLAATS "<104>",
  DVAVRBRIEFAANHEF "<105>"
  FROM VWFRMOMGAVRCONTACTEN
  WHERE DNKEYOMGVERGUNNINGEN = :keyvergunning

Formquery-3:

Select
  case when a.DVGESLACHT='M' then 'dhr.'
       when a.DVGESLACHT='V' then 'mevr.'
       else '' end "<201>",
   a.DVTELEFOON ,
   a.DVTUSSENVOEGSEL,
   a.DVVOORLETTERS,
   a.DVIBBNAAMMW,
   a.DVEMAIL
   from VWFRMACTIEFINBEHBIJ a
   WHERE a.DNKEYOMGVERGUNNINGEN = :keyvergunning

Query-variabelen

OpenWave database functies

OpenWave heeft zelf een aantal functies op de database gedefinieerd - zoals fn_ddmaandjjjj() - die gebruikt kunnen worden in allerlei queries. Zie:OpenWave database functies.

Childquery

Het resultaat van een childquery wordt gebruikt om merge-coderingen in de vorm van een getal tussen accolades (zoals {1} en {2}) binnen tabellen van een sjabloon te vervangen met waardes uit de database. Van boven naar beneden zullen de {1} en {2} merge-coderingen van de eerste tabel in het sjabloon vervangen worden door childquery-1 en de merge-coderingen van de tweede tabel met die van childquery2 en zo verder. De tabel(len) in de sjabloonfile moeten uit twee regels bestaan: de eerste regel is voor de vaste labels en in de tweede regel komen dan de merge-coderingen. Het aantal regels dat de tabel uiteindelijk in het te genereren document gaat innemen is afhankelijk van het aantal rijen uit de resultaat set.

Het eenvoudige .docx voorbeeld van een ontvangstbevestiging is hieronder uitgebreid met een tabel waarin het de bedoeling is dat daar de onderdelen van de omgevingszaak worden opgesomd:

De childquery-1 kan er als volgt uitzien:

select 
  dvtoestemmingnaam,
  dvwerkzaamheden
  from vwfrmtoestemmingen
  where
  vwfrmtoestemmingen.dnkeyomgvergunningen = :keyvergunning
  and vwfrmtoestemmingen.ddvervallen is null

Waarschuwing

LET OP: Bij gebruik van .odt-sjablonen met Libre Office moeten in plaats van cijfers, letters gebruikt worden. Dus de notatie in een cel is dan {a}, {b} etc. Hiervoor moet ook een extra programma-instelling aangemaakt worden en aangevinkt: Sectie: Programma en Item: SamenvoegenTabellenMetLetters.

In de tabellen mogen meerdere merge-coderingen per cel gebruikt worden al of niet in combinatie met tekst:

LET OOK OP: Indien in het sjabloon een tabel is opgenomen in de header of footer dan geldt het volgende:

Speciale childquery: samenvoegen met externe bron

Het is mogelijk om delen van een sjabloon samen te voegen met gegevens uit een externe bron in plaats van met gegevens uit de OpenWave database. Dat kan vooralsnog alleen bij childqueries. OpenWave zal bij een childquery zoeken naar speciale gevallen die worden herkend aan een vaste formulering in die childquery. Momenteel zijn daartoe enkel de volgende mogelijkheden:

Speciale childquery: Opsommen aangewezen bijlages

De variabele :keysaangewezenbijlages kan gebruikt worden om in een childquery een resultaat set te verkrijgen van kaarten uit tbcorrespondentie (geregistreerde documenten) die de gebruiker heeft aangewezen als bijlages. De variabele :keysaangewezenbijlages worden door OpenWave on the fly vervangen door een opsomming van de dnkeys uit tbcorrespondentie die als bijlage zijn aangewezen gescheiden door een komma en tussen twee haakjes. De childquery is bijvoorbeeld als volgt gedefinieerd: select dvfilenaam, dvkenmerk from vwfrmcorrespondentie where dnkey in :keysaangewezenbijlages. OpenWave vervangt :keysaangewezenbijlages in de query door de opsomming zodat de geëvalueerde query bijvoorbeeld wordt: select dvfilenaam, dvkenmerk from vwfrmcorrespondentie where dnkey in (1208231,1207836). Indien geen bijlages aangewezen dan wordt :keysaangewezenbijlages vervangen door (null).

De query kan dan ook zijn:

select 
  'geen bijlage' 
  where not exists
  (select 1 from vwfrmcorrespondentie where dnkey in (:keysaangewezenbijlages )) 

 Union 

select 
  dvfilenaam 
  from vwfrmcorrespondentie 
  where dnkey in (:keysaangewezenbijlages)

Queries en gebruik van Xential

Queries worden gebruikt om een documentsjabloon te mergen met gegevens uit de database.
In het geval dat het OpenWave sjabloon een doorgeefluik is naar een Xential sjabloon (kolom dvnaaminexternsjablprog is dan gevuld), worden de resultsets van de queries gebruikt om een xml te construeren die Xential gebruikt om te mergen. Zie voor deze toepassing: Xential.

Formquery en childquery-verwijzingen naar tbqueries

De inhoud van de kolommen van de formqueries en childqueries kan ook bestaan uit een verwijzing naar een query in de beheertabel tbqueries. Zie: Queries
Hierdoor hoeft een query die in meerdere sjablonen gebruikt wordt maar eenmalig te worden gedefinieerd. De opmaak van de sjablonen wijzigt hierdoor niet.

Voorbeeld

formmquery_1 is bijvoorbeeld:

select dvzaakcode, dvaanvraagnaam from tbomgvergunning where dnkey = :keyvergunning

en formquery_2 is bijvootrbeeld

select dvbedrijfsnaam, dvachternaam from tbcontactadressen where dnkey = :keyadres

Deze twee select statements kunnen nu vervangen worden door de volgende:
De inhoud van formquery_1 wordt dan

%query(sjabloon_zaakgegevens,:keyvergunning)%

en die van formquery_2 wordt dan

%query(sjabloon_geadresseerdegegevens,:keyadres)%

In de tabel tbqueries dienen vervolgens twee kaarten aangemaakt te worden:
Eén met de naam sjabloon_zaakgegevens met de inhoud:

select dvzaakcode, dvaanvraagnaam from tbomgvergunning where dnkey = {id}

en één met de naam sjabloon_geadresseerdegegevens met als inhoud

select dvbedrijfsnaam, dvachternaam from tbcontactadressen where dnkey = {id}

Invoegen tekstblokken o.b.v. query-aanroep naar tbqueries

Er kan in het sjabloon een speciale vorm van merge-codering worden opgenomen die verwijst naar een kaart in tbqueries. In dat geval wordt die aangeroepen query geëvalueerd en het resultaat wordt op de bewuste plek in het sjabloon ingevoegd. Een dergelijke verwijzing ziet er als volgt uit:

Hier dus geen verwijzing naar een formquery of childquery bij het sjabloon, maar een verwijzing naar een kaart in tbqueries.

LET OP: De hier gebruikte merge-codering zal niet door de spellingchecker heenkomen, voor een goede werking zal het sjabloon daarom opgeslagen moeten zijn zonder spellingchecker!!!

Op grond van de eerste parameter (codevanquery in bovenstaand voorbeeld) wordt in tbqueries de kaart met dvcode = codevanquery gezocht en de bijbehorende query geëvalueerd, waarbij de variabele {id} in de query wordt vervangen door de tweede parameter (indien aanwezig). Die tweede parameter moet één van de bovenvermelde query-variabelen zijn (dus :keyvergunning of :keylocatie of :keyinrichting) en is dus afhankelijk van de tabel van waaruit het sjabloon benaderd wordt. Stel: de tabel is tbomgvergunning. Dan zal de tweede parameter :keyvergunning dus vervangen worden door de dnkey van tbomgvergunning van waaruit het document wordt gecreëerd.

Voorbeeld: de aangeroepen query met dvcode = omgeving_tkstblk_1 op grond van de aanroep <%query(omgeving_tkstblk_1,:keyvergunning)%> kan de volgende inhoud hebben:

select case when (select dvsoortproc from vwfrmomgvergunningen where dnkeyomgvergunning = {id}) = 'M' 
              then  'Dit is ten gevolge van artikel x van wet y' 
              else ''::text end

Hetgeen wil zeggen dat indien het zaaktype van de omgevingszaak waar je op staat van het type M (melding) is, druk dan de tekst Dit is ten gevolge van artikel x van wet y af. Anders, is het type anders dan M, druk dan niets af.

Datzelfde kan ook met hergebruik van blokken tekst door een verwijzing in de query naar tbtekstblokken:

select case when (select dvsoortproc from vwfrmomgvergunningen where dnkeyomgvergunning = {id}) = 'M' 
              then  dvtekstblok 
              else ''::text end 
         from tbtekstblokken where lower(dvcode) = 'tkstblk_1'

Hetgeen wil zeggen dat indien het zaaktype van de omgevingszaak waar je op staat van het type M (melding) is, druk dan de waarde van de kolom dvtekstblok van de tabel tbtekstblokken af waarbij dvcode = tkstblk_1. Anders, is het type anders dan M, druk dan niets af. Die kolom dvtekstblok kan gevuld zijn met een tekst van maximaal 4000 tekens.

In de tabel tbtekstblokken (beheertegel Tekstblokken) kunnen deze tekstblokken gedefinieerd worden die op bovenstaande wijze in meerdere sjablonen op conditie kunnen worden aangeroepen. Zie ook: Queries.

Invoegen plaatje o.b.v. query-aanroep naar tbqueries

Er kan in het sjabloon een speciale vorm van merge-codering worden opgenomen die verwijst naar een kaart in tbqueries t.b.v. opnemen plaatjes. In dat geval wordt die aangeroepen query geëvalueerd en het resultaat van die query MOET verwijzen naar een unieke dvcode uit de tabel tbimages. Het plaatje uit tbimages wordt op de bewuste plek in het sjabloon ingevoegd. Een dergelijke verwijzing ziet er als volgt uit:

LET OP: De hier gebruikte merge-codering zal niet door de spellingchecker heenkomen, voor een goede werking zal het sjabloon daarom opgeslagen moeten zijn zonder spellingchecker!!!

Op grond van de eerste parameter (codevanquery in bovenstaand voorbeeld) wordt in tbqueries de kaart met dvcode = codevanquery gezocht en de bijbehorende query geëvalueerd, waarbij de variabele {id} in de query wordt vervangen door de tweede parameter (indien aanwezig). Die tweede parameter moet één van de bovenvermelde query-variabelen zijn (dus :keyvergunning of :keylocatie of :keyinrichting) en is dus afhankelijk van de tabel van waaruit het sjabloon benaderd wordt.

Een voorbeeld van een query met dvcode = image_handtekening bij de sjabloonaanroep <%imagequery(image_handtekening,:keyvergunning)%>

select 
   case when dvgemeenteid = '0363' then 'HandtekeningY' 
        else 'HandtekeningX' 
  end
  from vwfrmomgvergunningen
  where dnkeyomgvergunning = {id}

De uitkomst van deze query waarbij {id} eerst is gesubstitueerd door de dnkey van de omgevingszaak levert dus een verwijzing naar een specifieke dvcode van tbimages op (beheer), namelijk of wel de image met dvcode = HandtekeningY ofwel dvcode = HandtekeningX. Aldaar moeten de twee gewenste plaatje geüpload zijn EN voorzien van de juiste hoogte en breedte in pixels.

Als er geen case when nodig is, dus als een bepaald plaatje er altijd onvoorwaardelijk in moet, dan is <%imagequery(codevanquery)%> voldoende, en in die codevanquery staat dan bijvoorbeeld: select 'ABC' als ABC de naam van de image is.

LET OP: de <%imagequery(xxxxx)%> moet in het MS-Word-sjabloon in de hoofdtekst staan, dus niet in een tekstblok of tabel of header of footer. LET OP 2: De regelafstand van het onderdeel <%imagequery …%> moet op ‘Enkel’ moet staan.

Tonen Wave briefnummer

(indien instelling Sectie: Documenten, Item: WaveBriefNummer is aangevinkt)

Indien gewenst kan er met de juiste instellingen een uniek briefnummer door OpenWave gecreëerd worden bij aanmaken van de brief. Als je dit nummer in het sjabloon wilt tonen dan kan dit door in het sjabloon de verwijzing <%teller%> te zetten op de plek waar je het briefnummer wilt tonen.

Voorbeeld: stel de instellingen zijn als volgt WaveBriefnummer staat aan, Getal1 = 78, Getal2 = 5 en Tekst = 'OW'. Het unieke briefnummer waarmee <%teller%> in het document vervangen zal worden is 'OW00079'.

Indien Getal1 van Sectie: Documenten Item: Documentregistratie de waarde 1 heeft, dan wordt het gecreëerde document op basis van dit sjabloon automatisch op geslagen in de geregistreerde documenten (tbcorrespondentie), waarbij de kolom dvbriefcode de waarde van deze teller krijgt (ongeacht of deze teller in het sjabloon is opgenomen).

Tonen externe documentidentifier

De string <%ExtDocIdent%> (let op kamelennotatie) zal worden vervangen door de externe documentidentifier die verkregen wordt door een Stuf Zaak/DMS genereerdocumentidentificatie-bericht. Alleen van toepassing indien automatische opslag in een DMS via stufzaak/DMS. Wanneer OpenWave geen externe documentidentifier kan bemachtigen, wordt de string <%ExtDocIdent%> vervangen door een lege string.

Tonen gecrypte versie van een kolomwaarde

Verder kan de encryptiemethode worden aangeroepen vanuit het documentsjabloon. De string <%strEncrypt(:columnname)%> in een sjabloon wordt bij het creëren van een document als volgt geïnterpreteerd. Het programma zal columnname interpreteren als een kolomnaam uit de hoofdtabel van het sjabloon. De waarde van die kolom wordt gecrypt volgens de ingestelde methode (zie: 2-way encryptie van externe wachtwoorden) en deze gecrypte waarde wordt in het document opgenomen op de betreffende plaats. Voorbeeld: <%strEncrypt(:dnkey)%>.

Sjabloon-parameters

De substrings in de formqueries ingesloten door %-tekens (bijvoorbeeld %datumvanaf%) heten parameters. Deze worden bij het uitvoeren van het SQL-statement automatisch vervangen door een bedoelde waarde. Hoe dat gebeurt wordt gedefinieerd met de kolommen van de tabel tbdocparameters.

Uitzondering hierop zijn de hierboven behandelde strings <%query(codevanquery)%>, <%iamgequery(codevanquery)%>, <%Teller%> en <%strEncrypt(:dnkey)%>. Elke query kan 0 of meer parameters hebben.

Waarschuwing

LET OP: Indien er gebruik gemaakt wordt van input parameters, is het niet mogelijk om de LIKE operator te gebruiken in ALLE Form query's: in dat geval zal alles na karakter % opgevat worden als naam van een input parameter. Wil men toch zoeken op een gedeelte van een waarde gebruik dan substring selects

Parameterkolommen

Voorbeeld gebruik verschillende soorten (types) parameters

Stel: een sjabloon ziet er als volgt uit:

Rommeldam, <1>
  Betreft: <2> 
  Hier volgt een aantal invoerparameters:
  Een code uit een medewerkerslijst <3>
  Een invoerdatum omgezet naar tekst <4>
  Een invoer getal (integer): <5>
  Een invoer van een getal (float) omgezet naar een bedrag <6>
  en de invoer van zomaar een string <7>

en de bijbehorende formquery als volgt:

Select
   fn_ddmaandjjjj(fn_vandaag(0)) "<1>"
   a.DVSOORTAANVRAAG "<2>",
   %Medewerker% "<3>",
   fn_ddmaandjjjj(to_date(%Zomaardatum%,'yyyy-mm-dd')) "<4>",
   %Zomaareeninteger% "<5>",
   fn_bedrag(cast(%Zomaareenfloat% as double precision)) "<6>",
   %Zomaareenstring% "<7>"
  from
  VWFRMOMGVERGUNNINGEN a
  WHERE	DNKEYOMGVERGUNNING = :keyvergunning
LET HIER OP DAT:

Er zijn dus 5 invoerparameters:

Dat resulteert bij het genereren van het document tot een invoerscherm:

En het te genereren document ziet er dan zo uit:

Rommeldam, 01 mei 2017
  Betreft: reguliere procedure 
  Hier volgt een aantal invoerparameters:
  Een code uit een medewerkerslijst MDH
  Een invoerdatum omgezet naar tekst 21 april 2017
  Een invoer getal (integer): 34
  Een invoer van een getal (float) omgezet naar een bedrag 123,69
  en de invoer van zomaar een string altijd is Kortjakje ziek