Blanketter i Blanketmotoren er bygget op som XML-data og Orbeon Forms, der ligger i kernen af Blanketmotoren understøtter en masse muligheder for at indlejre logik i de enkelte blanketter via sproget XPath. Logikken kan bruges til en lang række til, bl.a.
Felter med beregnede værdier baseret tidligere indtastninger
Validering af brugerinput
Vise/skjule felter
Gøre felter skrivebeskyttede
Indholdsfortegnelse
Hvad er XPath?
XPath er et sprog, der anvendes til at navigere mellem elementer og attributter i et XML dokument.
Læs en kort introduktion til Xpath her.
Ønsker I at dykke længere ned i redigering af XML, kan vi anbefale Notepad++, der er et gratis redskab til koderedigering.
XPath operatorer
Operator | Beskrivelse | Eksempel |
---|---|---|
+ | Addition af værdier | 6 + 4 $felt + $felt2 |
- | Subtraktion af værdier | 6 - 4 $felt1 - $felt2 |
* | Multiplikation af værdier | 6 * 4 $felt1 * $felt2 |
div | Division af værdier | 6 div 4 $felt1 div $felt2 |
= | Lighedsudtryk | $felt1/text() = ‘abc’ $skiftkommune = 'ja' |
= ( ) | Tjek om værdien ligger i en liste | $felt1 = ('a', ‘b', 'c’) |
!= | Ikke-lighedsudtryk | $beloeb != 1000 $felt2 != $felt1 |
< | Mindre end | $beloeb < 5000 |
<= | Mindre end eller lig med | $beloeb <= 5000 |
> | Større end | $beloeb > 5000 |
>= | Større end eller lig med | $beloeb >= 5000 |
or | Eller – enten det ene eller det andet udtryk skal være opfyldt | $beloeb > 5000 or $momsfri = 'ja' |
and | Og – begge udtryk skal være opfyldt | $beloeb < 5000 and $told != 'nej' |
not | "not" kan bruges til at validere, hvis et udtryk ikke opfyldes | Eksempel 1: I følgende valideres der, hvis feltets indhold er "æ": $control-1 = 'æ' I følgende valideres der ikke, hvis feltet er "æ": not ($control-1 = 'æ')
I følgende valideres der, hvis feltet indeholder "æ": contains($control-1, 'æ') I følgende valideres der, hvis feltet ikke indeholder "æ": not (contains($control-1, 'æ')) |
Eksempler på valideringsregler
Blanketmotoren tilbyder rig mulighed for at opsætte valideringsregler på de enkelte felter i blanketten
Datoer
De mest almindelige valideringsregler på datofelter går på, hvorvidt en dato ligger før eller efter en anden dato, eksempelvis dags dato.
I tabellen nedenfor ses et par eksempler på, hvordan valideringsregler for datoer kan se ud
Regel | Formel |
---|---|
Dato må ikke være efter 22. juni 2022 | . <= xs:date('2022-06-22') |
Dato skal være før 22. juni 2022 | . < xs:date('2022-06-22') |
Dato må ikke være efter dags dato | . <= current-date() |
Dato må ikke være mere end 7 dage efter dags dato | days-from-duration(. - current-date()) <= 7 |
Tekstfelter
De mest almindelige valideringsregler på tekstfelter går på enten længden af feltet eller hvorvidt værdien af feltet har et bestemt mønster, eks. 8 cifre til et CVR-nummer.
Længden af feltet kan valideres med indbyggede valideringsregler i Orbeon, mens at formatet af et tekstfelt kan valideres ved at bruge såkaldte Regex-udtryk (https://en.wikipedia.org/wiki/Regular_expression ) og functionen matches som i eksemplerne nedenfor
Regel | Formel |
---|---|
CVR- eller telefonnummervalidering (8-cifre) | matches(., '^\d{8}$') |
CPR-validering (6 + 4 cifre med bindestreg) | matches(., '^\d{6}-\d{4}$') |
CPR-validering (6 + 4 cifre uden bindestreg) | matches(., '^\d{10}$') |
CPR-validering (6 + 4 cifre og valgfri bindestreg) | matches(., '^\d{6}-?\d{4}$') |
Kun bogstaver og tal | matches(., '^[A-Za-z0-9]+$') |
Kun bogstaver | matches(., '^[A-Za-z]+$') |
Når man skal til at lave disse Regex-udtryk til sine valideringer, så kan et værktøj som eksempelvis https://regex101.com/ være nyttigt til at teste og forstå, hvad de enkelte dele af udtrykket betyder.
Tjekbokse
Hvor dropdowns og radio buttons bar har en enkelt strengværdi og derfor kan valideres med de generiske operatorer beskrevet ovenfor, så opfører tjekbokse sig lidt anderledes
Regel | Formel |
---|---|
Single-checkbox er markeret | . = true() |
Single-checkbox er ikke markeret | . = false() |
Værdien A er valgt blandt flere tjekbokse | contains(., 'A') |
Mindste to valgmuligheder valgt | count(xxf:split(., ' ')) >= 2 |