Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

...

Code Block
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

Code Block
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

Code Block
languagexml
$datofelt + xs:yearMonthDuration('P3Y')

Træk to måneder fra en dato

Code Block
languagexml
$datofelt - xs:yearMonthDuration('P2M')

Læg fire dage til en dato

Code Block
languagexml
$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

Code Block
languagexml
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

  1. Først laves datoen om til en tekststreng via /text() funktionen

  2. Herefter udtrækkes de første syv tegn af datoen som tekststreng via substring(.., 1, 7) svarende til år og måned for datoen

  3. Så sættes den forkortede tekststreng sammen med strengen ‘-01’ som erstatning for den dato der blev skåret fra

  4. 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

Code Block
languagexml
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

Code Block
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

Code Block
substring('0101610246', 1, 6)
Note

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

Code Block
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

Code Block
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

Code Block
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

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

Code Block
fr:mode() != 'pdf'