Valideringer
Designet til Compose har blitt oppdatert. Siden kan inneholde skjermbilder av det gamle designet, men informasjonen er oppdatert. Vi takker for din tålmodighet mens vi oppdaterer bildene!
For å ha høy nytte av datafangsten i Compose må dataene ha høy kvalitet. For å sørge for at sluttbrukere oppgir riktige svar i prosessene bør valideringer brukes på spørsmålselementer.
Valideringer definerer et format som et svar fra en sluttbruker må følge. Hvis svaret ikke følger formatet gis sluttbrukeren en feilmelding og forhindres fra å fullføre prosessen. Compose har innebyggede valideringer, tekst, heltall, desimal og dato, (for tekstsvar) samt at du kan opprette egne valideringer i Valideringsbyggeren. Hyppig brukte valideringer som e-post, personnr., og organisasjonsnr. finnes på bunnen av denne siden. I denne veiledningen vil vi opprette en e-post-validering med et skript og en integrasjon.
Velg arbeidsområdet/mappen hvor du ønsker å lagre valideringen ved å navigere i oversikten. Trykk Ny validering-knappen i toppmenyen for å opprette en ny validering.
I menyen kan du velge om valideringen skal gjelde filer eller tekstsvar. I dette eksempelet skal vi validere en e-postadresse, altså et tekstbasert svar. Velg derfor tekst som type, gi valideringen et navn og trykk OK.
Valideringen vises i arbeidsområdet. Dobbeltklikk på den for å åpne den i valideringsbyggeren.
En validering kan defineres med to metoder – med et Groovy-skrip eller med en respons fra en integrasjon. Vi starter med å definere en validering med et Groovy-skript.
Validering med Groovy-skript
I valideringsbyggeren er tre menyer – Rediger, Produksjon og Språk. Gå til Rediger-menyen. Så lenge valideringen ikke har blitt publisert før vil alle egenskaper kunne endres. Behold for nå standardinnstillingene med grunnvalidering som tekst, og at teksten må ha mellom 1 og 200 tegn.
Trykk på Skript-fanen. Lim inn eller skriv et skript i valideringskodevinduet og trykk deretter Lagre kladd-knappen. (Nederst på siden finnes et utvalg av skript du kan kopiere og lime inn i skriptvinduet.)
Hvis du ønsker å teste hvilke verdier som følger valideringsreglene du har satt, trykk Test-knappen for å åpne en testemeny. Oppgi en e-postadresse og trykk Test. I Status-feltet får du se om adressen bestod eller feilet (passed/failed) valideringskoden. Trykk Lukk for å lukke testemenyen.
I tilfellet sluttbrukeren oppgir et svar som ikke følger valideringen vil en valideringsfeilmelding vises for sluttbrukeren. Den kan se slik ut:
Feilmeldingen kan tilpasses i feltet Beskjed til sluttbruker hvis valideringen feiler.
Det er også mulig å tilby valideringen med flere språk (hovedsakelig feilmeldingen) ved å legge til flere språk i Språk-menyen. Bruk av språk demonstreres i brukerveiledningen Språk i skjema.
Med flere språk konfigurert kan oversettelsene av feilmeldingen enkelt vises ved å trykke på flagg-ikonet.
Dersom du er fornøyd med innstillingene kan du lagre kladden og trykke Publiser-knappen. Trykk OK for å bekrefte publiseringen. Valideringen er nå publisert og tilgjengelig i alle skjema innenfor arbeidsområdet den ligger i.
Den publiserte valideringen vises i Produksjon-menyen. Skjemaene hvor valideringen brukes vises i listen Valideringen brukes her:.
Hvis du redigerer kladden til en publisert validering og gjør endringer du angrer, kan du trykke Last inn fra publisert-knappen. Innstillingene i kladden vil bli satt til innstillingene fra den publiserte valideringen.
Validering fra integrasjonskall
En integrasjon kan brukes til å definere et format, men også for å sjekke hvorvidt svaret som valideres er en del av et register. Hvis f.eks. en sluttbruker skal opprette et unikt brukernavn, kan en integrasjon sjekke hvorvidt brukernavnet er tilgjengelig eller ikke.
For å bruke en integrasjon i en validering trenger du en tidligere opprettet og versjonert integrasjon (se mappen Integrasjoner og automatisk utfylling med veiledninger for å starte byggingen av integrasjoner). I Rediger-menyen, velg integrasjon-fanen og trykk bla gjennom for å velge en integrasjon til valideringen.
Integrasjonen må være i samme arbeidsområde som valideringen. Velg integrasjonen du vil bruke og trykk OK.
Du kan endre versjonen til integrasjonen hvis den har blitt versjonert flere ganger. Dersom du ønsker at valideringen oppdateres automatisk hver gang en mindre endring av integrasjonen versjoneres, huk av Bruk høyeste mindre versjon automatisk. Slik vil du kun måtte oppdatere valideringen hvis større endringer gjøres med integrasjonen.
Gå inn i forespørsel-variabler-menyen og knytt integrasjonens forespørsel-variabel til inndataen som skal valideres (siden det er inndataen fra sluttbrukeren som skal valideres).
Gå deretter inn i svar-variabler-menyen og velg svar-variabelen som indikerer hvorvidt inndataen består/feiler valideringen.
Hvis svaret fra integrasjonen er 0 eller false, regnes valideringen som feilet. Alle andre verdier tolkes som en bestått validering. (Hvis andre verdier skal tolkes som feilet validering, må verdien til svar-variabelen konverteres i integrasjonsbyggeren.) Før du publiserer valideringen kan den testes på samme måte som for valideringen definert med Groovy-kode i eksempelet over.
Tilpass valideringsfeilmeldingen og språk på lik linje som eksempelet over. Husk å lagre kladden og publiser valideringen ved å trykke på Publiser-knappen.
Valideringen kan nå brukes av alle skjema i samme arbeidsområde.
Bruk av valideringer i skjema
For å bruke en validering trengs et skjema med minst et spørsmålselement (se veiledningen Bygg et skjema for å komme i gang med skjema). Velg spørsmålet med svaret du vil validere. Under Svarfelt i panelet med Egenskaper kan du velge valideringen du har opprettet i nedtrekkslisten.
Lagre skjemakladden og forhåndsvis den for å teste valideringen i et eksempel-grensesnitt:
Under er noen eksempler på skript som kan brukes til å definere valideringer i dine egne arbeidsområder.
Valideringer – Skript
Norske personnummer
if (!value.matches("[0-9]{11}")) {
return false;
}
int d1 = value[0].toInteger()
int d2 = value[1].toInteger()
int m1 = value[2].toInteger()
int m2 = value[3].toInteger()
int y1 = value[4].toInteger()
int y2 = value[5].toInteger()
int i1 = value[6].toInteger()
int i2 = value[7].toInteger()
int i3 = value[8].toInteger()
int c1 = value[9].toInteger()
int c2 = value[10].toInteger()
// Validate checksum c1
int c1calc = (((3 * d1) + (7 * d2) + (6 * m1) + m2 + (8 * y1) + (9 * y2) + (4 * i1) + (5 * i2) + (2 * i3)) % 11);
if (c1calc > 0) {
c1calc = 11 - c1calc;
}
if (c1 != c1calc) {
return false;
}
// Validate checksum c2
int c2calc = (((5 * d1) + (4 * d2) + (3 * m1) + (2 * m2) + (7 * y1) + (6 * y2) + (5 * i1) + (4 * i2) + (3 * i3) + (2 * c1)) % 11);
if (c2calc > 0) {
c2calc = 11 - c2calc;
}
if (c2 != c2calc) {
return false;
}
return true;
E-post (samme som dette eksempelet)
if (!value.matches("[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\\.[A-Za-z0-9-]+)*\\.[a-z]{2,6}")) {
return false;
} else if (value.length() > 254) {
return false;
} else if (value.indexOf("@") > 64) {
return false;
} else if (value.endsWith("test")) { // Adresser med suffikset "test" brukes til testeformål og er ikke gyldige
return false;
}
return true;
Legg merke til at et par ulovlige adresser kan slippes gjennom siden toppnivådomener kun sjekkes for å ha mellom 2 og 6 tegn. Valideringen støtter heller ikke internasjonale toppnivådomener.
Norske bankkontonumre
Norske bankkontonumre har 11 siffer og det siste sifferet er en sjekksum av de tidligere sifrene:
if (!value.matches("[0-9]{11}")) {
return false;
}
int checksum = value[10].toInteger();
int sum = 0;
int[] calculationWeights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
for (int i = 0; i < 10; i++) {
int part = value[i].toInteger();
sum += part * calculationWeights[i];
}
int calculatedChecksum = sum % 11;
if (calculatedChecksum != 0) {
calculatedChecksum = 11 - calculatedChecksum;
}
return checksum == calculatedChecksum;
Her er et par eksempler på hvordan kontonumrene kan se ut:
63450603017
63450618340
63450609198
63450602142
63450711464
Norske organisasjonsnumre
Følgende skript kan brukes for å validere norske organisasjonsnumre.
def result = false
if (value != null) {
def valueAsString = value.replaceAll(" ", "")
if (valueAsString.length() == 9) {
def weights = [3, 2, 7, 6, 5, 4, 3, 2]
def total = 0
for (def i = 0; i < weights.size(); i++) {
total += (valueAsString[i].toInteger() * weights[i])
}
def remainder = (total % 11)
if (remainder != 1) {
def controlNumber = (remainder == 0 ? 0 : (11 - remainder))
result = (controlNumber == valueAsString[8].toInteger())
}
}
}
return result
Skriptet kan validere organisasjonsnumre med følgende format (altså med mellomrom):
123 456 785
913 459 393
913 459 504
Dersom det er ønskelig å validere organisasjonsnumre uten å tillate mellomrom, kan koden under brukes:
def result = false
if (value != null) {
def valueAsString = value.toString()
if (valueAsString.length() == 9) {
def weights = [3, 2, 7, 6, 5, 4, 3, 2]
def total = 0
for (def i = 0; i < weights.size(); i++) {
total += (valueAsString[i].toInteger() * weights[i])
}
def remainder = (total % 11)
if (remainder != 1) {
def controlNumber = (remainder == 0 ? 0 : (11 - remainder))
result = (controlNumber == valueAsString[8].toInteger())
}
}
}
return result
Sifre (0-9)
Uten mellomrom
value.matches("[0-9]*")
Med mellomrom
value.matches("^[0-9\\s]*[0-9]+[\\s]*\$")