Complexe condities

Met beheulp van een Custom Xforms control kunt u ook compexe condities opgeven op basis waarvan bijvoorbeeld een pagina in het formuylier conditioneel wel/niet moet worden getoond.

Voor eenvoudige condities is het niet nodig om Custom Xforms te gebruiken: bij de keuze controls kunt u bij de eigenschappen opgeven bijvoorbeeld opgeven welke pagina/contrls wel/niet moeten worden getoond op basis van een gekozen waarde.

Maar indien een conditie bijvoorbeeld afhankelij kis van de keuze in twee keuzecontrols kan het onderstaande als voorbeeld worden gebruikt.

In dit voorbeeld wordt gebruik gemaakt van tekstcontrols ( maar dit kunnen evengoed keuzecontrols of andere input controls zijn ).

Maak een scherm et daarin drie  tekstcontrols.

Noem de velden resp invoer1, invoer2, conditioneelveld.

Geef als bijschrift resp. 1e invoer, 2e invoer en Conditioneel.

Overige eigenschappen hoeven niet te worden ingevoerd.

Het scherm toont dan als onderstaand:

 

De bedoeling is dat het veld Conditioneel alleen wordt getoond indien in :

1e invoer een A is ingevoerd

2e invoer een B is ingevoerd

In alle andere gevallen mag veld Conditioneel niet worden getoond.

 

Voer daartoe in het Custom Xforms control in het blok Model data in :

<xf:bind nodeset="instance()/conditioneelveld" relevant="if(instance()/invoer1='A' and instance()/invoer2='B', true(),false())"/> 

 

Toelichting:

in bovenstaande constructie wordt gebruik gemaakt van de relevant optie. De relevant optie toont een veld indien de expressie naar 'waar' ( true()) evalueert en toont een veld niet indien de expressie naar 'onwaar'  (fale()) evalueert.

In het voorbeeld wordt tevens gebruik gemaakt van een if statement. De algemene vorm van een if statement is: if (conditie , doe dit als conditie waar is , doe dit als condite onwaar is ).

if statements kunen worden 'genest', d.w.z. dat bijvoorbeeld in plaats van 'doe dit als conditie is onwaar', opnieuw een if statement kan worden opgevoerd.

Bovenstaande expressie had bijvoorbeeld ook kunnen worden opgevoerd ( met gelijkblijvend resultaat)  als :

<xf:bind nodeset="instance()/conditioneelveld" relevant="if(instance()/invoer1='A',if(instance()/invoer2='B', true(),false()),false())" xmlns:xf="http://www.w3.org/2002/xforms" />

In bovenstaand voorbeeld is ook gebruik gemaakt van de logische operator AND. Een andere vaak gebruikte logiche operator is OR.

 

Bij uitvoering van het formulier wordt het conditionele veld  aleen getoond indien resp A en B zijn ingevoerd.

In geval van andere invoer wordt het conditionele veld niet getoond:

 

 

In het voorgaande voorbeeld werd een veld op een pagina conditioneel wel of niet getoond.

Indien een gehele pagina conditioneel moet worden getoond is een speciale expressie nodig. Voor de verwijzing naar de wel/niet te tonen pagina dient gebruik te worden gemaakt van 

<xf:bind nodeset="instance('paging_state')/pages/page[@id='page_2']" relevant=.... ( waarbij de te tonen pagina wordt aangeduid via de naam van de pagina, in dit voorbeeld page_2).