Innledning
Altinns regelmotor (Altinn Rule Engine/ARE) tilbyr en alternativ måte å utføre utregning, validering og overføring av verdier mellom skjema.
På denne siden:
Enkelt sagt er det en «motor» som kan opprette, lese, oppdatere og slette felter på tvers av flere ulike skjema (representert med xml). Samtidig kan den verifisere at skjema (xml-dokumentet) samsvarer med det som er spesifisert som lovlig (xsd-spesifikasjonen).
Regelmotoren tilbyr et sett med regler som du som tjenesteutvikler kan benytte deg av. Dette gjør du ved å definere hvilke skjema og regler du vil bruke i et xml-dokument. Dokumentet må følge det oppsettet som det er bestemt at enn slik regelfil skal ha.
Tegnveiledning for denne håndboken
I eksemplene i denne håndboken bruker vi ellipse-tegnet (…) for å markere at det på denne plasseringen skal være noe mer. Hva som skal stå der blir forklart i andre eksempler. Selve ellipse-tegnet skal ikke være med i regelfilen, og må fjernes dersom eksemplene skal brukes. Dette er gjort for at eksemplene i størst mulig grad skal vise bare det som blir forklart i hver enkelt eksempel.
Ta i bruk regelmotoren
Før du kan ta i bruk regelmotoren må du ha opprettet en tjeneste og en utgave for skjemaet du tenker å bruke den på. Du må også ha en tjeneste og en utgave for alle underskjema du har tenkt å bruke. Alle skjema som du gjør bruk av i reglene dine må finnes tilgjengelig i tjenestens skjemasett for at regelen skal kunne slå til. Har du ikke lagt til skjemaet vil ikke regelfilen feile, men regler som bruker skjemaet vil ikke kunne tre i kraft.
Lage regelfil
Regelfilen må lages i xml-format. Dersom du ikke kjenner til dette formatet bør du først lese innføring i xml. For at en xml-fil skal kunne godkjennes som en regelfil av Altinn må den følge en rekke regler for hvordan den er satt opp. Disse reglene er definert i Regelmotor.xsd.
Altinn regelfilen må ha en rotnode med navn AltinnRuleEngine
. Denne rotnoden må ha attributtene name
og version
definert. AltinnRuleEngine-elementet må inneholde nodene «Description», «Configuration» og «Rules» i akkurat den
rekkefølgen.
1. Rammestruktur for regelfilen
<?xml version="1.0" encoding="utf-8" ?>
<AltinnRuleEngine name="test" version="1">
<Description>
…
</Description>
<Configuration>
…
</Configuration>
<Rules>
…
</Rules>
</AltinnRuleEngine>
Description-noden blir brukt til å gi en beskrivelse av hele regelsettet som er definert i regelfilen. Innholdet her skal være en tekst.
2. “Description”-noden
<Description>
This is used to give a description of the rule set.
</Description>
Sette opp hva som skal påvirkes
Configuration
Configuration-noden blir brukt til å fortelle hvilke skjema som skal brukes i regelsettet. Her kan du også legge til de kodelistene som du har tenkt å bruke.
Noden kan inneholde fire elementer, Forms, Codelists,
AttachmentTypes og FormDependencies.
Forms må alltid være der og må stå først. Codelists, AttachmentTypes og FormDependencies er
valgfri. Ingen av disse nodene kan være brukt mer enn en gang.
3. “Configuration”-noden
<Configuration>
<Forms>
…
</Forms>
<AttachmentTypes>
…
</AttachmentTypes>
<Codelists>
…
</Codelists>
<FormDependencies>
…
</FormDependencies>
</Configuration>
Forms
Forms-noden blir brukt til å fortelle hvilke skjemaer som blir brukt i regelsettet. Noden må inneholde minst ett
Form
-element. Du kan legge inn så mange Form-element du vil. Skjemaene du legger inn her må være inkludert i
skjemasettet for hovedutgaven. Merk at regelfilen ikke vil feile om et skjema mangler, men regler som
bruker skjemaet vil bli ignorert om skjemaet mangler.
Dersom du har et skjema som blir brukt av mange regler, kan du med fordel legge det til som standard. Dette gjør du ved
å legge til attributtet default
i Forms-noden med skjema-iden som verdi (se eksempelet over).
Form-noden må inneholde attributtene «dataFormatId», «calculationEngine» og «validationEngine» for å være gyldig. DataFormatId er id-en for skjemaet, og denne vil du finne i xsd-en til skjemaet eller i TUL på utgavearbeidsflaten (se figur 1).
CalculationEngine og validationEngine har begge de samme fire alternativene.
Alternativ | Beskrivelse |
---|---|
AltinnRuleEngine | Skjemaet skal bare bruke Altinns regelmotor |
InfoPath | Skjemaet skal bare bruke InfoPath |
Both | Skjemaet skal bruke både InfoPath og Altinn regelmotor |
None | Skjemaet skal ikke bruke noen av delene |
calculationEngine
blir brukt til å fortelle om skjemaet skal bruke InfoPath eller Altinns regelmotor for utregninger.
validationEngine
blir likeledes brukt for å fortelle hva som skal brukes til valideringer.
I tillegg kan du bruke det valgfrie attributtet name
. Dette attributtet vil ikke bli brukt av regelmotoren, men du kan
legge inn navnet på skjemaet for å gjøre regelfilen enklere å lese.
4. “Forms”- og “Form”-nodene
<Forms default="1">
<Form dataFormatId="1"
calculationEngine="AltinnRuleEngine"
validationEngine="InfoPath" />
<Form dataFormatId="2"
calculationEngine="Both"
validationEngine="None" />
</Forms>
AttachmentTypes
AttachmentTypes –elementet er valgfritt og brukes til å definere vedleggstyper som kan bli benyttet i tjenesten og som er brukt i regelmotoren for validering. Eksempel:
<AttachmentTypes>
<AttachmentType name="AT01_Cycle01"/>
<AttachmentType name="AT02_Cycle01"/>
<AttachmentType name="AT03_Cycle01"/>
<AttachmentType name="AT04_Cycle01"/>
<AttachmentType name="AT06_Cycle01"/>
</AttachmentTypes>
Se utvidede beskrivelser for oppsett av vedleggsvalidering
FormDependencies
FormDependencies-noden blir brukt til å fortelle hvilke eksterne skjema som skal lastes inn som en del av skjemasettet (hvis tilgjengelig), og hvordan disse skal lastes. Noden må inneholde minst ett «FormDependency» element, men det er ingen begrensning på hvor mange elementer som kan legges inn.
Eksempel på oppsett:
<FormDependencies>
<FormDependency type="FirstArchivedForFirstENK">
<Param name="serviceCode" value="123" />
<Param name="serviceEdition" value="1234" />
<Condition type="Equals" type="orid(9999)" value="myValue" form="111" />
</FormDependency>
</FormDependencies>
FormDependency-elementene har et type
-attributt som sier hvordan det eksterne skjemaet skal lastes inn. Pr. 30.09.2015
støttes kun FirstArchiveForFirstENK
som en gyldig type.
Avhengighetstypen FirstArchivedForFirstENK laster inn det mest nylig arkiverte elementet av en gitt type for det første enkeltmannsforetaket til den nåværende avgiveren. Hvis de gitte conditions er oppfylt og et gyldig skjema er funnet legges skjemasettet inn den vanlige listen med skjema som om det var en del av skjemasettet det jobbes med – og det kan skrives regler som benytter seg av dette skjema på samme måte som for andre skjema. Det er et krav at skjema som lastes tilhører samme tjenesteeier som tjenesten avhengigheten er definert i.
FormDependency støtter også conditions på samme måte som øvrige regler i regelfilen.
Codelists
Codelists-elementet er valgfritt, men om du har det med så må det inneholde minst en Codelist-node. Dette elementet må
du bruke dersom du vil ta i bruk kodelister i skjemaet. Codelist-noden må ha attributtene name
og lang
, og kan i
tillegg ha det valgfrie attributtet version
. Name brukes til å angi navnet på kodelisten, mens lang brukes til å
angi hvilken språkversjon av kodelisten som brukes. Version kan brukes dersom du vil bruke en spesiell versjon av
kodelisten. Dersom du utelater det attributtet vil siste versjon automatisk bli brukt.
«Lang» har disse alternativene:
lang | Språk |
---|---|
1033 | Engelsk |
1044 | Bokmål |
2068 | Nynorsk |
5. “Codelists”- og “Codelist”-nodene
<Codelists>
<Codelist name="ASF_Land" lang="1044" />
</Codelists>
Sette opp regler
Rules
-noden blir brukt til å sette opp de reglene du vil bruke. Denne noden er obligatorisk og det kan bare være en av
den. Den må inneholde minst en Rule
-node, men det er ingen øvre grense. Det kan være lurt å legge inn en kommentar
over hver regel der du forteller hva regelen skal gjøre.
Rule
«Rule»-noden må ha det obligatoriske attributtet type
og kan i tillegg ha det valgfrie attributtet description
.
Description-noden blir brukt til å gi en beskrivelse av regelen. Type-noden bruker du til å fortelle hvilken type regel
dette er.
6. “Rules”- og “rule”-nodene
<Rules>
<!-- Comments can be useful for explaining what the rule is for -->
<Rule type="SetFieldValue" description="This is a rule to set the value of a field">
…
</Rule>
</Rules>
For Rules har type
-attributtet disse alternativene:
Overføringer:
- CalculateResult - Gjør utregninger og overfører resultatet til et felt i skjema.
- RemoveFieldElement - Fjerner et felt dersom ett eller flere vilkår er til stede.
- RemoveParentPost - Fjerner foreldreposten til et gitt felt dersom ett eller flere vilkår er til stede.
- SetFieldValue - Setter verdi til et felt basert på ett eller flere vilkår.
- TransferResult - Setter resultatet av en utregning som verdi i et felt.
- TransferValue - Flytter en verdi fra et felt til et annet felt.
- TransferTransformedResult - Setter sammen verdiene fra flere felter og overføre resultatet til ett enkelt felt som en kommaseparert liste.
- TransferSingleExternalValue - Overfører en gitt ekstern verdi, dette er verdier som ikke ligger som en del av skjemadataen, men som kan settes eksplisitt i implementasjonen for f.eks lasting eksterne skjema.
Valideringer:
- SimpleValidation - Sjekker at et felt følger de vilkår som du har satt opp.
WebSA-spesifikke regeltyper:
- websa:InternalRF1224Calculations
- websa:TransferSumToChildcare
- websa:TransferFromNO1ToRF1224
- websa:TransferSumToTravelDeduction
- websa:TransferFromRF1084ToRF1030
- websa:TransferSumToWizard
- websa:TransferFromRF1084ToRF1175
- websa:ValidatePost337StandardDeductionTempStay
- websa:TransferFromRF1125ToRF1030
- websa:ValidateRF1219TransferToWizard
- websa:TransferSumFrom0402
- websa:TransferFromRF1224ToRF1030
- websa:ValidateRF1224BelongsToPost0402
- websa:ValidateOnePrimaryDwelling
En «Rule»-node og dens innhold definerer en regel, og bestemmer hva denne regelen skal gjøre. Elementene som er tillatt inne i Rule-noden er Source, Target, Param, Condition, Texts, ErrorTextValueFields og caption. Ingen av disse elementene er obligatoriske og foruten «Texts» har de ingen øvre grense på antall. «Texts» kan det bare være en av. Disse elementene bruker du til å fortelle hvordan regelen skal virke. Selv om ingen av dem er obligatoriske, vil det være nødvendig med noen av dem avhengig av regelen du vil lage.
7. Innhold i «Rule»-noden
<Rule type="RemoveFieldElement">
<Source/>
<Target/>
<Param/>
<Condition/>
<ErrorTextValueFields/>
<caption/>
<Texts>
…
</Texts>
</Rule>
Source
Source-noden blir brukt til å fortelle om hvilken kilde som skal brukes. «Form»-attributtet forteller hvilket skjema det er snakk om. «Field» forteller hvilket felt det er. Du kan bruke enten OR-id-attributtet, eller XPath for å identifisere feltet. Eventuelt kan du bruke «property(…)» for å hente fra et egendefinert felt («my»-felt). «addFields»-attributtet blir brukt dersom verdien fra felter skal summeres før overføring. «subtractFields»-attributtet blir brukt dersom verdien fra felter skal trekkes fra før overføring. «multiplyFields»-attributtet blir brukt dersom verdien fra felter skal multipliseres før overføring. «divideFields»-attributtet blir brukt dersom verdien fra felter skal divideres før overføring. Funksjonaliteten til addFields, subtractFields, multiplyFields og divideFields er slik at verdien fra alle feltene som ligger i hver liste vil bli «påført» totalverdien før overføring. Det vil si at alle feltene i addFields vil bli summert og så vil alle feltene i subtractFields bli trukket fra summen man fikk fra addFields. Så vil den nye summen bli multiplisert med alle feltene i multiplyFields og så til slutt vil den nye summen bli dividert med alle feltene i divideFields.
Eksempel:
Det skal overføres en verdi fra felt1 til felt2.
Og verdien skal adderes med 2 felter (felt3 og felt4) og multipliseres med 2 felter (felt5 og felt6) og så til
slutt divideres med 2 felter (felt7 og felt8).
Da vil det matematiske utrykket for denne overføringen bli slik:
Felt2 = (((felt1 + felt3 + felt4) * felt5 * felt6) / felt7) / felt8
«SumRecurringFields» forteller om overføringen skal summere repeterende felt eller ikke før overføringen. «Multiple» forteller om modergruppa kan få verdier fra flere kilder. Dersom regelen skal bruke skjemaet du har satt til å være standardskjema i Forms-noden (se Forms side 10), er det ikke nødvendig å oppgi et source-element.
8. “Source”-noden
<Rule type="TransferResult">
<Source form="1"
field="/Skjema/Utregninger/Utregning1/belop1"
addFields="/Skjema/Utregninger/Utregning1/belop2"
subtractFields="/Skjema/Utregninger/Utregning1/belop3"
multiplyFields="/Skjema/Utregninger/Utregning1/belop4"
divideFields="/Skjema/Utregninger/Utregning1/belop5"
multiple="false"
sumRecurringFields="false" />
</Rule>
Target
Target-noden blir brukt til å fortelle om målet for regelen. «Form»-attributtet forteller hvilket skjema det er snakk om. «Field» forteller hvilket felt det er. «Index» er indeksen til målfeltet. «Value» brukes om du vil sette en fast verdi.
9. “Target”-noden
<Rule type="RemoveFieldElement">
<Target form="2"
field="/Skjema/Adresseopplysninger/Postadresse/Adresse2"
index="1"
value="2" />
</Rule>
Param
Param-noden blir brukt til å gi parameter til regelen. Denne har to attributter, som begge er obligatoriske. «Name»-attributtet blir brukt til å fortelle hva slags parameter dette er. Det er bare et begrenset antall navn som er lovlig å ha her. Se tabellen under for en oversikt. «Value»-attributtet brukes for å fortelle hvilken verdi denne parameteren har.
10. “Param”-noden
<Rule type="RemoveFieldElement">
<Param name="IgnoreGUID" value="true" />
</Rule>
Gyldige verdier i name
-attributtet til “Param”:
- IgnoreGUID - Denne bestemmer om regelmotoren skal ta hensyn til sourceFormGuid når den gjør overføringen.
- RemoveOnMismatch - Forteller om målfeltet skal bli tømt dersom betingelsene ikke inntreffer.
- RemoveFieldIfConditionsFail - Dette avgjør om felt som ikke innfrir betingelsene for verdioverføring skal slettes.
- SignStorageHint - Denne forteller om den overførte verdien skal bli lagret spesifikt som en positiv eller negativ verdi.
- TransferRecurringFields - Avgjør om repeterende felt skal overføres.
- TransferType - Avgjør typen overføring.
- AlwaysRun - Bestemmer om en overføringsregel i tillegg til å kjøres i utregningsprosessen også skal kjøres i valideringsprosessen.
- IgnorePrefill - Avgjør om et felt kan slettes selv om det er merket som pre-utfylt.
- RemoveDirtyField - Avgjør om såkalte «skitne felt» (felter som har blitt skrevet til i løpet av prosessen) skal fjernes eller ikke.
- DoNotIgnoreZeroValue - Avgjør om verdien 0 skal overføres eller ikke.
- InsertEmptyIfNotCalculated - Avgjør om 0 skal brukes som verdi dersom skjemaet ikke inneholder et eller flere felter som er nødvendige for å regne ut verdien i feltet.
- PercentageTransfer - Denne definerer hvor stor del av verdien som skal overføres.
- PurgeOldTransfers - Denne brukes når det er ønskelig at gamle overføringer skal slettes før nye gjennomføres.
- SetValueForMultiplePosts - Denne brukes til å definere om oppdatering av feltverdi skal gjøres til alle målfelter i samme skjema.
WebSA-spesifikke:
- IndustryTypes
- MaxDeduction
- ValueType
- MaxDistance
- MinimumTollAndFerryDeduction
- Deductible
- NormalRate
- OverMaxDistanceRate
- BaseRate
For detaljer se Regler.
Condition
«Condition»-noden brukes til å fortelle hvilke betingelser som må være til stede for at regelen skal bli tatt i bruk. «Type»-attributtet er det eneste som er obligatorisk. Her er det et begrenset sett med typer du har lov til å bruke (se tabellen under). «Check»-attributtet bruker du til å fortelle hvilke felt som skal sjekkes. Skal du ha flere felter, må du skille de med komma. «Value»-attributtet brukes i de betingelsene som krever sammenligning med en verdi. «Codelist»-attributtet bruker du til å fortelle hvilke kodelister det er snakk om i de betingelsene som handler om kodelister. «Form»-attributtet skal fortelle hvilket skjema det er snakk om. «FieldIndex» skal du bruke til å legge inn indeks for feltet som betingelsen gjelder.
11. “Condition”-noden
<Rule type="RemoveFieldElement">
<Condition type="AnyFieldEquals"
check="/Skjema/Adresseopplysninger/Postadresse/Land"
codelist="ASF_Land"
fieldindex="1"
form="1"
value="NO" />
</Rule>
Gyldige verdier i type
-attributtet for “Condition”:
Navn | Blir sann dersom |
---|---|
AnyFieldEquals | Et av de gitte feltene har samme verdi som den gitte verdi |
AnyFieldNotEquals | Et av de gitte feltene har ikke samme verdi som den gitte verdi |
AnyFieldHasValue | Et av de gitte feltene har en verdi. |
AnyFieldHasValueIgnoreZero | Et av de gitte feltene har en verdi, og 0 er ikke en verdi. |
AnyFieldIsEmpty | Et av de gitte feltene er tomme. |
AnyFieldIsMissing | Et av de gitte feltene mangler i skjema-xml-en. |
AnyFieldIsPositive | Et av de gitte feltene har en positiv verdi. |
AnyFieldExists | Et av de gitte feltene eksisterer. |
CodeExistsInCodelist | En verdi finnes i en kodeliste. |
CodeNotInCodeList | Den gitte koden ikke finnes i den gitte kodelisten. |
ContainsAny | Feltet inneholder en av de gitte verdiene. |
Equals | Feltet har samme verdi som den gitte verdi. |
NotEquals | Feltet ikke har samme verdi som den gitte verdi. |
Exists | Feltet eksisterer i skjema-xml-en. |
GreaterThan | Feltets verdi er større enn den gitte verdi. |
HasAnyForm | Skjemasettet har et av de gitte skjemaene. |
HasForm | Skjemasettet inneholder det gitte skjemaet. |
HasValue | Feltet har en verdi. Tallet 0 er regnet som en verdi. |
HasValueIgnoreZero | Feltet har en verdi Tallet 0 er ikke regnet som en verdi. |
IsEmpty | Feltet er tomt eller har 0 som verdi. |
IsEmptyWithZeroValue | Et felt er tomt. Tallet 0 blir regnet som en verdi. |
IsNegative | Feltet har en negativ verdi. |
IsNonValidSSN | Feltet har en verdi som ikke passer formatet for personnummer. (Sjekker ikke om noen faktisk har dette personnummeret) |
IsPositive | Feltet har en positiv verdi, og 0 er ikke regnet som positiv verdi. |
IsPositiveIncludingZero | Feltet har en positiv verdi, og 0 er regnet som positiv verdi. |
LessThan | Feltets verdi er mindre enn den gitte verdi. |
MissingForm | Skjemasettet ikke inneholder det gitte skjemaet. |
SumEquals | Summen av de gitte felt er lik den gitte verdi. |
SumNotEquals | Summen av de gitte felt ikke er lik den gitte verdi. |
SumNotEqualsWithRange | Dersom summen av feltene ikke er innenfor et verdiområde. |
ValueFoundMoreThanOnceInFields | Den gitte verdien finnes i mer enn ett av feltene. |
ValueNotInCodeList | Feltet har en verdi som ikke er lik en verdi fra den gitte kodelisten. |
IsValidSSN | Feltet inneholder en verdi som passer til formatet for personnummer. (Sjekker ikke om noen faktisk har dette personnummeret) |
IsNonValidSSN | Feltet ikke inneholder en verdi som passer til formatet for personnummer. |
IsValidOrgNr | Feltet inneholder en verdi som passer formatet for organisasjonsnummer. |
IsNonValidOrgNr | Feltet inneholder en verdi som ikke passer formatet for organisasjonsnummer. |
IsNonValidEmail | Sjekker om verdien er en gyldig epostadresse. |
IsMissing | Feltet ikke finnes i skjema-xml-en |
IsPrefilled | Feltet er forhåndsutfylt. |
NotPrefilled | Feltet ikke er forhåndsutfylt(virker bare i selvangivelsen [APE-skjema]) |
AnyFieldNotEquals | Et av de gitte feltene ikke har samme verdi som den gitte verdi |
AnyFieldExists | Et av de gitte feltene eksisterer. |
NotExists | Feltet ikke eksisterer. |
NoneFieldHasValue | Ingen av feltene har en verdi. |
HasAttachment | Sjekker om et gitt vedlegg finnes for et skjema. |
HasAnyAttachment | Sjekker om noen av vedleggene eksisterer fra en gitt liste av vedlegg |
MissingAttachment | Sjekker om et gitt vedlegg mangler for et skjema |
MatchPattern | Feltet matcher et regulært uttrykk. |
DoesNotMatchPattern | Feltet ikke matcher et regulært uttrykk. |
NotEqualAcrossMultipleForms | En verdi ikke er lik over flere skjema. |
For detaljer se Betingelser.
Texts
Texts-noden blir brukt til å legge inn valideringstekster som skal bli vist dersom valideringen feiler. Texts-noden skal inneholde «Text»-noder med den teksten du vil ha. «Lang»-attributtet er obligatorisk for text-nodene og lovlige verdier er «1033» (engelsk), «1044» (bokmål) og «2068» (nynorsk).
12. “Texts”- og “Text”-nodene
<Rule type="RemoveFieldElement">
<Texts>
<Text lang="1033">You have not filled out the necessary text.</Text>
<Text lang="1044">Du har ikke fylt ut nødvendig tekst.</Text>
<Text lang="2068">Du har ikkje fylt ut nødvendig tekst.</Text>
</Texts>
</Rule>
ErrorTextValueFields
ErrorTextValueFields-noden kan du bruke dersom du vil bruke verdier fra felt i feilmeldingsteksten.
I denne noden definerer du hvilke felt du vil hente verdier fra.
Deretter må du legge inn markør i teksten der du vil ha verdien fra feltet vist.
Dette gjør du ved å bruke {0}
, der tallet refererer til indeksen for feltet i den kommaseparerte lista du lager i «fields».
{0}
vil da bety det første feltet du har listet opp, {1}
vil bety det andre feltet du har listet opp og så videre.
13. “ErrorTextValueField”- og “Text”-nodene
<Rule type="RemoveFieldElement">
<ErrorTextValueFields fields="/Skjema/Adresseopplysninger/Postadresse/Land">
<Texts>
<Text lang="1033">The value {0} is not valid.</Text>
<Text lang="1044">Verdien {0} er ikke gyldig.</Text>
<Text lang="2068">Verdien {0} er ikkje gyldig.</Text>
</Texts>
</Rule>
Caption
Caption blir brukt til å legge inn hjelpetekst ved valideringer.
14. “Caption”-nodene
<Rule type="RemoveFieldElement">
<caption>
<Texts>
<Text lang="1033">The value is not valid.</Text>
<Text lang="1044">Verdien er ikke gyldig.</Text>
<Text lang="2068">Verdien er ikkje gyldig.</Text>
</Texts>
</caption>
</Rule>
Kombinere nodene til en regelfil
En regelfil får du ved å kombinere alle elementene nevnt over på rett måte i forhold til det du ønsker.
15. Eksempel på en enkel regelfil
<?xml version="1.0" encoding="UTF-8"?>
<AltinnRuleEngine name="Testtjeneste" version="Beta">
<Description>
Dette er et eksempel på å sette verdi i et felt ved hjelp av en regel.
</Description>
<Configuration>
<Forms>
<Form name="Testtjenesteskjema"
dataFormatId="1"
validationEngine="AltinnRuleEngine"
calculationEngine="AltinnRuleEngine" />
</Forms>
</Configuration>
<Rules>
<!-- For å sette verdien 0 i felt «Utbetaling1» dersom felt "Krav1" ikke har noen verdi -->
<Rule type="SetFieldValue" description="For å sette verdi om den mangler">
<Source form="1" />
<Target form="1"
field="/Skjema/Tilbakebetaling/Utbetaling/Utbetaling1"
value="0" />
<Condition type="IsMissing"
check="/Skjema/Tilbakebetaling/Krav/Krav1" />
</Rule>
</Rules>
</AltinnRuleEngine>
Dette eksempelet viser en enkel regelfil som bruker ett enkelt skjema. Den har en regel som setter en verdi i et felt («Utbetaling1») dersom et annet felt mangler («Krav1»).
Eksempel med flere skjema
16. Eksempel på regelfil med to skjema og to regler
<?xml version="1.0" encoding="UTF-8"?>
<AltinnRuleEngine name="TestTjeneste" version="Beta">
<Description>
Dette er et eksempel på å sette verdi i et felt ved hjelp av en regel.
Og flytte en verdi fra et skjema til et annet med en annen regel.
</Description>
<Configuration>
<Forms>
<Form name="Testtjenesteskjema"
dataFormatId="1"
validationEngine="AltinnRuleEngine"
calculationEngine="AltinnRuleEngine" />
<Form name="Testtjeneste underskjema1"
dataFormatId="2"
validationEngine="AltinnRuleEngine"
calculationEngine="AltinnRuleEngine" />
</Forms>
</Configuration>
<Rules>
<!-- For å sette verdien 0 i felt «Utbetaling1» dersom felt «Krav1» ikke har noen verdi -->
<Rule type="SetFieldValue" description="For å sette verdi om den mangler">
<Source form="1" />
<Target form="1"
field="/Skjema/Tilbakebetaling/Utbetaling/Utbetaling1"
value="0" />
<Condition type="IsMissing"
check="/Skjema/Tilbakebetaling/Krav/Krav1" />
</Rule>
<!-- Flytte verdi fra felt «Navn» i skjema 2 til felt «Navn» i skjema 1 -->
<Rule type="TransferValue" description="">
<Source form="2"
field="/Skjema/Personopplysninger/Navn"
sumRecurringFields="false"
multiple="false" />
<Target form="1" field="/Skjema/Ansvarlig/Navn" index="0" />
<Condition type="HasValue" check="/Skjema/Personopplysninger/Navn" form="2" />
</Rule>
</Rules>
</AltinnRuleEngine>
Dette eksempelet viser en regelfil som har fått en regel og et skjema i tillegg til første eksempel. Den nye regelen sjekker først om feltet «Navn» i skjema 2 har en verdi, og dersom den har en verdi blir denne verdien kopiert til felt «Navn» i skjema 1.
Rekkefølge på regler
Reglene vil bli utført i den rekkefølgen de står i regelfilen. Derfor er det viktig at du setter de opp i den rekkefølgen som passer for ditt formål. For eksempel er det viktig å tenke på rekkefølgen dersom flere regler bruker verdien fra samme felt. Dersom den ene regelen setter en verdi i feltet og en annen regel bruker verdien fra det samme feltet, kan resultatet bli forskjellig avhengig av rekkefølgen det skjer på. Tenk deg at regel 1 henter verdi fra A og legger den sammen med verdi fra B og legger resultatet i C. Regel 2 trekker 100 fra verdien i B dersom A er større enn 10. Dersom regel 1 kjører først vil ikke regel 2 ha noen innvirkning på summen som blir lagt i C. Dersom regel 2 kjører først vil regel 1 bruke de verdiene som er resultat av regel 2.
Regel 1 kjører før regel 1:
Start | Etter at regel 1 er kjørt | Etter at regel 2 er kjørt |
---|---|---|
A = 20 B = 1800 C = 0 | A = 20 B = 1800 C = 1820 | A = 20 B = 1700 C = 1820 |
Regel 2 kjører før regel 1:
Start | Etter at regel 2 er kjørt | Etter at regel 1 er kjørt |
---|---|---|
A = 20 B = 1800 C = 0 | A = 20 B = 1700 C = 0 | A = 20 B = 1700 C = 1720 |
Bruke regelfilen i en tjenesteutgave
For å ta i bruk regelfilen i en tjenesteutgave må du laste opp filen i utgaven. Dette gjør du ved å gå inn på Metadatafiler-siden.
Inne på «Metadatafiler»-siden så må du først sjekke ut, velge «Regler og kalkyler (for Altinn regelmotor)» og så klikke på «Browse»-knappen. Du finner så fram til der du har lagret filen og laster den opp. Filen vil da dukke opp under «Metadatafiler» nederst på siden. Deretter må du sjekke inn for å lagre endringen. Neste gang du migrerer tjenesteutgaven vil regelfilen følge med.
Det blir ikke gjort noen validering av filen du laster opp. Det er derfor fullt mulig å laste opp en feilaktig regelfil. Vær derfor nøye med å sjekke at regelfilen din er korrekt.