Avancerede XPath operationer
På denne side findes en række mere avancerede XPath operationer som du kan bruge i dine blanketter.
Formler med gentaget data
Hvis man bruger repeated grids, så kan det ofte være svært, at lave formler som $feltA + $feltB + $feltC, da man som designer ikke ved, hvor mange gentagelser brugeren ender med at lave. Så kan man i stedet lave formler med listeoperationer
I Blanketmotorens sandkasse finder du en blanket med navnet Lidt forskellige tips og tricks med lister fra repeated grids, hvor du kan se eksempler på formler med gentaget data, som også er beskrevet nedenfor
Læg en liste af tal sammen
Hvis et repeated grid eksempelvis har et talfelt med navnet gebyr, så kan du i et andet felt få summen af alle disse felter med formlen
sum($gebyr)
Bemærk: For at formlem skal virke, så skal alle gebyrfelterne være udfyldt, så overvej enten at give dem en initial value eller finde en måde at sikre, at felterne altid har en værdi
Liste af tekstværdier
Hvis et repeated grid eksempelvis har et tekstfelt med navnet bilmaerke, så kan du i et Plain Text Area lave en liste af disse værdien ved formlen (hvor codepoints-to-string(10)) repræsentere et linjeskift
string-join($bilmaerke, codepoints-to-string(10))
Tælle antal gentagelser med specifik værdi
Hvis et repeated grid eksempelvis har et felt med navnet biltype, som kan have værdien lastbil, så kan du tælle antallet af gentagelser med værdien lastbil med følgende formel
count($biltype[. = 'lastbil'])
Formler med datoer
Foruden de få eksempler med valideringer af datoer beskrevet her, så er flere forskellige muligheder for at regne med datoer, heriblandt lægge faste tidsintervaller til og trække fra for eksempelvis at få en dato ét år efter en anden dato.
Du finder i Blanketmotorens sandkasse et blanket med navnet Blanket med lidt forskellige tips og tricks omkring datofelter, hvor du kan se nedenstående eksempler i praksis
Læg tidsperioder til en given dato
En meget praktisk funktion ifm. logik i blanketter er at kunne justere end given dato med et fast tidsinterval som dage, måneder og år, enten ved at lægge perioden til eller trække den fra. Til dette kommer XPath med to hjælpsomme funktioner xs:yearMonthDuration og xs:dayTimeDuration, der kan bruges som illustreret nedenfor
Læg tre år til en dato
$datofelt + xs:yearMonthDuration('P3Y')
Træk to måneder fra en dato
$datofelt - xs:yearMonthDuration('P2M')
Læg fire dage til en dato
$datofelt + xs:dayTimeDuration('P4D')
Den første dato i måneden for en given dato
Der kan nogle gange være behov for at udregne den 1. i en måned baseret på en anden dato, hvilket der ikke umiddelbart er nogen oplagt XPath funktion til at beregne, men dog er noget som kan løses ved at lege lidt med datoerne som tekststrenge
xs:date(concat(substring($dato-til-manipulation/text(), 1, 7), '-01'))
Formlen består her af en række skridt indefra og ud i formlen ovenfor
Først laves datoen om til en tekststreng via /text() funktionen
Herefter udtrækkes de første syv tegn af datoen som tekststreng via substring(.., 1, 7) svarende til år og måned for datoen
Så sættes den forkortede tekststreng sammen med strengen ‘-01’ som erstatning for den dato der blev skåret fra
Slutteligt bruges funktionen xs:date til at lave tekststrengen tilbage til en dato
Formatering af datoer
Det kan ofte være interessant at formatere datoer forskelligt enten for at øge læsbarheden eller for at skjule eller vise relevante dele af en dato. Her kan man bruge XPath funktionen format-date, hvor du kan se en lang række eksempler herinde https://www.w3.org/TR/xslt20/#date-time-examples
Et af de mest nyttige eksempler er nok at præsentere en dato pænt med ord, som kan gøres på følgende måde
format-date($datofelt, '[D]. [MNn] [Y]', 'da', (), ())
Formler med tekststrenge
Nedenfor finder du en række forskellige XPath formler til at manipulere med og udtrække data af tekststrenge
Sammensætning af tekststrenge
Hvis du vil sammensætte to eller flere tekststreng, så kan du bruge XPath funktionen concat, hvor du angiver de tekststrenge eller henvisninger til tekstfelter, der skal sættes sammen, eksempelvis
concat($felt1, '-', $felt2)
Her vil værdierne af de to felter blive sat sammen med en bindestreg i mellem
Bemærk: Hvis du skal sammensætte en række tekstfelter fra et repeated grid, så kig ovenfor under Formler med gentaget data
Udsnit af tekststrenge
Hvis du har behov for at udtrække en del af en tekststreng, eksempelvis en dato fra et CPR-nummer, så kan du bruge XPath funktionen substring, hvor du skal angive, hvilket tegn, der skal være det første i den nye streng og hvor lange den nye streng skal være.
I eksemplet nedenfor returneres eksempelvis strengen 010161
substring('0101610246', 1, 6)
Til forskel fra de fleste programmeringssprog starter XPath nummeringen ved 1 og ikke 0, dvs. første tegn i en tekststreng har positionen 1
Deling af tekststrenge
Hvis du vil dele en tekststreng i én eller flere dele og placere i andre felter, kan du bruge funktionen xxf:split, hvor du skal angive hvilket tegn, der skal fungere som skel ,og herefter kan tilgå de enkelte elementer i listen
Nedenstående to formler vil eksempelvis give hhv 010161 og 0246
xxf:split('010161-0246', '-')[1]
xxf:split('010161-0246', '-')[2]
Denne funktionalitet kan eksempelvis også bruges på værdien af en dropdown, hvor alle valgmulighederne er en kombination af to eller flere elementer, og du vil have det valgte resultat delt ud i separate felter
Tæl antal ord i en tekststreng
Splitfunktionen ovenfor kan også bruges til at tælle antallet af ord i en tekststreng ved at splitte på et mellemrum. Herfra kan funktionen count tælle, hvor mange elementer der er opstået efter splittet
count(xxf:split(.,' '))
Andre nyttige funktioner
Nedenfor vedligeholdes en liste af nyttige XPath funktioner som kan bruges i forskellige sammenhænge
fr:lang()
Funktionen fortæller, hvilket sprog brugeren udfylder blanketten på og kan bruges til at tilpasse blanketter efter anmelders sprog, eksempelvis kan nedenstående bruges til at vise et felt, som kun skal være der, hvis blanketten udfyldes på engelsk
fr:lang() = 'en'
fr:mode()
Funktionen fortæller, hvor i livsforløbet blanketten er i og kan have følgende værdier
Værdi | Beskrivelse |
---|---|
new | Første gang brugeren tilgår blanketten |
edit | Ved genoptagelse af kladde eller tryk på redigering fra opsummeringssiden |
test | Testvinduet i Blanketdesigneren |
view | Opsummeringssiden |
PDF’en |
Funktionen kan bruges til at lave regler baseret på blankettens tilstand og er især nytter ift. visningsregler, hvor nedenstående eksempelvis skjuler et felt i PDF’en, men viser det alle andre steder
fr:mode() != 'pdf'