openwave:1.35:applicatiebeheer:instellen_inrichten:schermdefinitie:scherminfomatie_voor_standaard_insertschermen

Dit is een oude revisie van het document!


Scherminformatie voor standaard insert- en kopieer

Bij de definitie van een standaardlijst (beheertegel Tabellen Standaardapi) kan bij de definitie van een insert-of kopieerknop een verwijzing staan naar een kaart in tbscreencolumns met daarin gedefinieerd de opmaak van een insertscherm voor de betreffende tabel.

Die verwijzing staat bij de insertknopdefinitie als tweede parameter indien de action bij die insertknop is gedefinieerd als startWizard en de eerste parameter de waarde insertSysStandardRow heeft.

Die verwijzing staat bij de kopieerknopdefinitie als tweede parameter indien de action bij die kopieerknop is gedefinieerd als startWizard en de eerste parameter de waarde kopieerSysStandardRow heeft.

De kaart met de insert- of kopieerscherminformatie in tbscreencolumns heeft een naam (dvscreenfilename) met prefix 'MDWC_insert“ en die eindigt op '.xml', waarbij het tussenliggende gedeelte bij voorkeur wordt gevuld met de tabelnaam waarop de insert gaat plaatsvinden. Het kopieer- en insertscherm mogen dezelfde zijn, maar hoeft niet!!

De kolom tbscreencolumns.dvclassname heeft dezelfde waarde als die van de bijbehorende lijst (van daaruit wordt de insert of kopieer gedaan) en dvviewname heeft de naam van de tabel waarop de insert/kopieer wordt gedaan. De plaats en inhoud van de insert- of kopieerscherm kolommen worden, net als bij een lijst- of detailscherm, geregeld in het text-veld dvscreenxml met een xml-opmaak.

Binnen de root-tag <document> wordt één blok <columns> gedefinieerd en binnen het blok <columns> worden vervolgens één of meer blokken <column> gedefinieerd..

Indien het gaat om een insert die plaatsvindt op een dochtertabel is de waarde van de foreign key al geregeld in de derde parameter van de definitie van de insertknop bij de standaardtabel.

Bij een kopieeractie is die derde parameter de dnkey van de kaart die gekopieerd moet worden.

De kolommen van de tabel waarop de insert plaatsvindt waarvoor geldt dat zij in de databasedefinitie:

  • als verplicht zijn gemarkeerd (not null)
  • maar geen defaultwaarde hebben
  • en geen foreign key zijn

die kolommen moeten in de xml-string worden opgenomen (de niet verplichte kolommen mogen natuurlijk ook).

Voor een kopieeractie geldt dit niet (alle not null kolommen hebben een waarde op de te kopiëren kaart).

De opmaak van het insert- en kopieerscherm (de xml) is hetzelfde als die van een detailscherm, waarbij:

  • echter geen blokken bestaan
  • op elke regel slechts één kolom kan voorkomen
  • de variabele %keyparent% desgewenst gebruikt kan worden in <filter>
  • de variabele %keyaccount% desgewenst gebruikt kan worden in <filter>
  • de variabele '%tagid(xxx)%' desgewenst gebruikt kan worden in <filter>. LET OP de apostrofjes: deze horen erbij. Deze variabele wordt vervangen door een eerder gekozen waarde in de tagnaam xxx (meestal dus een veldnaam)
  • onderaan een extra tag <default_value> kan worden toegevoegd
  • de tagnaam per definitie verwijst naar een veldnaam van de tabel waarop de insert wordt toegepast (dus NIET die van de view) tenzij de tagnaam begint met de tekst 'tag'. In dat geval interpreteert OpenWave deze tag als: deze tagnaam hoef niet aan de database te worden doorgegeven, is geen database-veldnaam.

Sedert OpenWave versie 1.34 is het mogelijk om kopieerwizards automatisch uit te voeren zonder dat er een scherm wordt weergegeven.

Om deze functionaliteit te gebruiken, moet de derde parameter – die normaal gezien enkel de verwijzing bevat naar de dnkey van de te kopiëren regel – worden uitgebreid.

Dit gebeurt door een puntkomma ( ; ) toe te voegen, gevolgd door de waarde no_screen.

In de praktijk krijgt de parameter dan de volgende vorm: {id};no_screen

Voor deze functionaliteit is het van belang dat een wizard enkel zonder invoerscherm kan worden uitgevoerd wanneer in de bijbehorende <xml> geen blok aanwezig is met de tag:

<visible>True</visible>

De xml opmaak moet aan het volgende schema voldoen: Validatieschema voor insertSysStandardRow en deleteSysstandardRow

Voorbeeld

<?xml version="1.0" encoding="UTF-8"?>
  <document>
    <!--aangeroepen vanuit api insertSysStandardRow-->
    <!--element tagnaam (m.u.v. tagnaam tag) verwijst naar de kolomnamen van tbprodwkpklant-->
    <columns>
        <column>
            <regel>1</regel>
            <tagnaam>tag</tagnaam>
            <label>Module</label>
            <divwidth>200</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>true</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>generalwithoutemptyline</source>
            <filter>select 'W' id, 'W: Omgeving' omschrijving from tbportalnames where
                dlisbegin = 'T' union select 'H' id, 'H: Handhaving' omschrijving from
                tbportalnames where dlisbegin = 'T' union select 'O' id, 'O: APV/Overig'
                omschrijving from tbportalnames where dlisbegin = 'T' union select 'I' id,
                'I: Info-Aanvragen' omschrijving from tbportalnames where dlisbegin = 'T'
                union select 'E' id, 'E: Milieu/gebruik' omschrijving from tbportalnames
                where dlisbegin = 'T' union select 'C' id, 'C: Horeca' omschrijving from
                tbportalnames where dlisbegin = 'T'</filter>
            <nullable>false</nullable>
            <icoon/>
        </column>
        <column>
            <regel>2</regel>
            <tagnaam>dnkeyproducten</tagnaam>
            <label>Product</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>true</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>generalwithoutemptyline</source>
            <filter>select a.dnkey id,  a.dvproductcode | | ' - '  | | coalesce(a.dvproductoms,'')  omschrijving from vwfrmkopproductenzaaktypes a  where (a.ddvervallen is null or a.ddvervallen >= fn_vandaag(0)) 
                and a.dvmoduleletter = '%tagid(tag)%' order by a.dvproductcode </filter>
            <nullable>false</nullable>
            <icoon/>
         </column>
        <column>
            <regel>3</regel>
            <tagnaam>dnkeysubproducten</tagnaam>
            <label>Subproduct</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>true</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>generalwithemptyline</source>
            <filter>select a.dnkey id,  a.dvsubproductcode | | ' - '  | | coalesce(a.dvsubproductoms,'')  omschrijving from tbsubproducten a  where (a.ddvervallen is null or a.ddvervallen >= fn_vandaag(0)) 
                and a.dnkey in (select b.dnkeysubproducten from tbsubproductdef b where b.dnkeyproductdef in (select c.dnkeyproductdef from tbproducten c  where c.dnkey = '%tagid(dnkeyproducten)%')) order by a.dvsubproductcode </filter>
            <nullable>true</nullable>
            <icoon/>
        </column>
        <column>
            <regel>4</regel>
            <tagnaam>dnkeyproductklanten</tagnaam>
            <label>Klant</label>
            <divwidth>300</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>true</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>generalwithoutemptyline</source>
            <filter>select dnkey id, dvklantoms omschrijving from tbproductklanten where ddvervallen is null or ddvervallen >= fn_vandaag(0) </filter>
            <nullable>false</nullable>
            <icoon/>
        </column>
        <column>
            <regel>5</regel>
            <tagnaam>dnkeyproductwerkpakketten</tagnaam>
            <label>Werkpakket</label>
            <divwidth>300</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>true</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>generalwithoutemptyline</source>
            <filter>select dnkey id, dvwerkpakketoms omschrijving from tbproductwerkpakketten where ddvervallen is null or ddvervallen >= fn_vandaag(0) </filter>
            <nullable>true</nullable>
            <icoon/>
        </column>
        <column>
            <regel>6</regel>
            <tagnaam>dvactiviteitcode</tagnaam>
            <label>Activiteitcode</label>
            <divwidth>150</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>false</showhint>
            <wavetype>string</wavetype>
            <source></source>
            <filter></filter>
            <nullable>true</nullable>
            <icoon/>
            <default_value>Weetniet</default_value>
        </column>
    </columns>
  </document>

Voorbeeld

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <!--aangeroepen vanuit api insertSysStandardRow-->
    <!--element tagnaam verwijst naar de kolomnamen van tbKopsrttoestproduct-->
    <permissions>
        <permission type="execute">
            <query>select case when '{dnkeyproducten}' = '' and '{dnkeyteams}' = '' then  'false' else 'true' end</query>
            <errormessage>Het product en/of een team is verplicht</errormessage>
        </permission>
    </permissions>
    <columns>
        <column>
            <regel>1</regel>
            <tagnaam>dnkeysoortomgverg</tagnaam>
            <label>Kies (dso-)omgevingzaaktype</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>false</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>GeneralWithoutEmptyLine</source>
            <filter> select a.dnkey id, a.dvomschrijving || ' - ' || coalesce(a.dvdsotype,'')
                omschrijving from tbsoortomgverg a where a.dvdsotype is not null and a.ddvervaldatum
                is null and a.dnkey not in (select dnkeysoortomgverg from tbkopsrttoestproduct where
                dnkeysrttoestemming = %keyparent%) order by omschrijving</filter>
            <nullable>false</nullable>
            <icoon/>
            <pattern/>
        </column>
        <column>
            <regel>2</regel>
            <tagnaam>dnkeyproducten</tagnaam>
            <label>Kies product</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>false</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>GeneralWithoutEmptyLine</source>
            <filter> select a.dnkey id, coalesce(a.dvproductoms,'') omschrijving from
                vwfrmkopproductenzaaktypes a where (a.ddvervallen is null or a.ddvervallen >
                fn_vandaag(0)) and a.dnkeysoortomgverg = %tagid(dnkeysoortomgverg)% order by
                omschrijving</filter>
            <nullable>true</nullable>
            <icoon/>
            <pattern/>
        </column>
        <column>
            <regel>3</regel>
            <tagnaam>dnkeysubproductdef</tagnaam>
            <label>Kies subproduct</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>false</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>GeneralWithEmptyLine</source>
            <filter> select a.dnkey id, coalesce(a.dvsubproductoms,'') omschrijving from
                vwfrmkopprodsubprod a where (a.ddvervallen is null or a.ddvervallen >
                fn_vandaag(0)) and a.dnkeyproductdef = (select dnkeyproductdef from tbproducten where dnkey = %tagid(dnkeyproducten)%) order by
                omschrijving</filter>
            <nullable>true</nullable>
            <icoon/>
            <pattern/>
        </column>
        <column>
            <regel>4</regel>
            <tagnaam>dnkeyteams</tagnaam>
            <label>Kies zaakverantw. team</label>
            <divwidth>400</divwidth>
            <divheight>30</divheight>
            <edit>true</edit>
            <showhint>false</showhint>
            <wavetype>keuzelijst</wavetype>
            <source>GeneralWithEmptyLine</source>
            <filter> select a.dnkey id, coalesce(a.dvteamnaam,'') omschrijving from
                tbteams a where (a.ddvervaldatum is null or a.ddvervaldatum >
                fn_vandaag(0)) order by  omschrijving</filter>
            <nullable>true</nullable>
            <icoon/>
            <pattern/>
        </column>
    </columns>
</document>

Bovenstaan voorbeeld geeft aan hoe met het blok Permissions te regelen is dat een controle op invoer van meerdere kolommen wordt gedaan voordat een nieuwe kaart wordt opgeslagen.
Van belang hierin is het attribuut type. Zie ook hierboven de xsd-verwijzing. Het attribuurt type kan zijn “execute” of “start”. Bij execute wordt de controle van de query uitgevoerd wanneer de gebruiker op uitvoeren heeft geklikt. Bij start wordt deze controle bij aanvang van de insertwizard uitgevoerd (dus zonder dat iets is ingevuld).
De query (kan ook een verwijzing zijn naar een dvcode van tbqueries, bijv <query>%query(MijnQuery)%</query>)
De query moet als resultaat 'true' of 'false' hebben (dus als string).
Indien het resultaat 'false' dan wordt de errormessage op het insertscherm getoond.

De tagnamen die gebruikt worden in het blok columns van de MDWC_***.xml moeten in de query geschreven worden tussen twee quotes en daarbinnen tussen twee accolades zoals '{dnkeyproducten}' en '{dnkeyteams}' in bovenstaand voorbeeld.
De waarde van de tag moet altijd gevalueerd worden in de query als een string. Dus NIET: select case when '{dnkeyproducten}' is 3 MAAR WEL select case when '{dnkeyproducten}' is '3' of convert-functies toepassen zoals in onderstaande voorbeelden.
Let speciaal op check op nullwaardes.

permission met datumcheck

<permissions>

      <permission type="execute">
          <query>select case when to_date('{ddmelddatum}','yyyy-mm-dd') &gt;  fn_vandaag()) then  'false' else 'true' end</query>
          <errormessage>De melddatum kan niet in de toekomst liggen</errormessage>
      </permission>
  </permissions>

permission met getalcheck

<permissions>

      <permission type="execute">
          <query>select case when cast('{dninvoergetal}' as integer) &gt; 10 then 'false'
              else 'true' end</query>
          <errormessage>Invoergetal mag niet groter dan 10 zijn</errormessage>
      </permission>
  </permissions>

permission met check op nullwaarden

<permissions>

      <permission type="execute">
          <query>select case when '{dninvoergetal}' = ''  and '{ddmelding}' != ''  then 'false'
              else 'true' end</query>
          <errormessage>Invoergetal mag niet leeg zijn als datum melding gevuld is</errormessage>
      </permission>
  </permissions>

In de query worden de variabelen %keyparent% vervangen door de dnkey van de parenttabel (indien aanwezig) en %keyaccount% met de dvcode van de ingelogde medewerker.

  • openwave/1.35/applicatiebeheer/instellen_inrichten/schermdefinitie/scherminfomatie_voor_standaard_insertschermen.1792055659.txt.gz
  • Laatst gewijzigd: 2026/10/15 11:14
  • door Paul de Boer