Indholdsfortegnelse 3. Forretningslogik... 2 3.1 Domænemodel... 2 3.1.1 BBR-domænemodel... 2 3.1.1.1 er i BBR-domænemodel... 3 3.1.2 Adressedomænemodel... 7 3.1.2.1 er i adressedomænemodellen... 8 3.1.3 Modtageboks-domænemodel... 11 3.1.3.1 er i modtageboks-domænemodel... 11 3.2 Service Interface Lag... 12 3.2.1 Service Contract... 12 3.2.2 Service Adapter... 12 3.3 Validering... 12 3.3.1 Kontrol af relationer i databasen... 12 3.3.2 Logiske kontroller... 13 3.3.3 Sandsynlighedskontroller... 13 3.3.4 Konsistenstjek... 13 3.4 Forretningsregler... 13 Version 7.0 Side 1 af 13
3. Forretningslogik I det følgende beskrives forretningslagets forskellige moduler og komponenter. Forretningslaget er dels opdelt i lag, dels i moduler og entiteter samt de operationer og de betingelser, der skal være opfyldt for at operationerne kan udføres, dvs. validering. Der gøres opmærksom på, at der her er tale om et levende dokument, idet specielt forretningsregler samt ServiceLag vil være genstand for stadig revision, efterhånden som BBR-klientens behov for services og detaljerne i forretningsreglerne kortlægges. 3.1 Domænemodel I den tilbudte løsning (p. 8ff) er forretningslogikken delt op i en række moduler med forskellig funktionalitet. Nedenfor er denne opdeling yderligere detaljeret ved at beskrive en række domænemodeller for de centraler områder for forretningslogikken: BBR, Adresse og Modtageboks. Domænemodelbegrebet svarer på mange måder til den logiske datamodel og dens entiteter, men domænemodellen er udvidet med en række operationer, der kan udføres på de pågældende entiteter samt nogle relationer mellem dem. I det følgende vises en grafisk fremstilling af modellerne for hver af de tre nævnte områder, og de involverede entiteter og de operationer der virker på de enkelte entiteter, bliver beskrevet. Alle kald i Service Interface Laget vil benytte sig af operationer i domænemodellen. Ud over operationerne indeholder entiteterne også datamodellens logiske attributter. De er ikke beskrevet yderligere i dette afsnit, men er indeholdt i bilag C i forbindelse med beskrivelsen af den logiske validering på enkeltfelter. Uanset hvilken datamodificerende operation, der vil blive kaldt, vil den logiske validering altid blive foretaget. Af hensyn til overskueligheden er entiteten Notater udeladt fra den grafiske oversigt, da denne knyttes til stort set alle entiteter. 3.1.1 BBR-domænemodel BBR-domænemodellen består af flg. entiteter Version 7.0 Side 2 af 13
Figur 3.1. Domænemodel for BBR 3.1.1.1 er i BBR-domænemodel Grund Se beskrivelse i afsnit 3.1.2.1 er i adressedomænemodellen Matrikel ter en ny matrikel i en kommune ter oplysninger om en matrikel ter en matrikel Version 7.0 Side 3 af 13
Henter matrikeloplysninger via id Henter matrikeloplysninger via matrikelnr. og -bogstav Kommune ter en ny kommune ter oplysninger ter en kommune Henter oplysninger via ID Henter oplysninger via kommunenr. Bygning Sag(0-Mange) TekniskAnlæg (0-Mange) Opgang (0 Mange) Etage (0 Mange) Brugsenhed (0- Mange) ter en ny bygning på en grund HentTekniskeAnlæg HentOpgange HentEtager HentByggesager HentBrugsenheder ter oplysningerne om en bygning ter en bygning Henter en bygnings oplysninger via Henter en bygnings oplysninger via den brugervendte nøgle (Kommunenr, ejendomsnr og bygningsnr) Henter en bygnings tekniske anlæg Henter en bygnings opgange Henter en bygnings etager Henter byggesagerne på en bygning Henter brugsenhederne i en bygning TekniskAnlæg Version 7.0 Side 4 af 13
Sag (0 Mange) ter et nyt TekniskAnlæg på en grund ter oplysningerne om et TekniskAnlæg ter et TekniskAnlæg HentByggesager Henter et TekniskAnlægs oplysninger via Henter et TekniskAnlægs oplysninger via den brugervendte nøgle (Kommunenr, ejendomsnr og nr) Henter byggesagerne på et TekniskAnlæg Sag ter en ny sag ter oplysninger om sag, herunder status, mv. ter en sag Henter oplysningerne om en sag Opgang Enhed (0 Mange) Sag (0 Mange) ter en ny opgang i en bygning HentEnheder ter oplysningerne om en opgang ter en opgang Henter oplysningerne om en opgang via Henter oplysningerne via den brugervendte nøgle (adressen) Henter en opgangs enheder Etage Sag (0 Mange) Version 7.0 Side 5 af 13
HentEnheder HentRum Enhed (0 Mange) Rum (0 Mange) ter en ny etage i en bygning ter oplysningerne om en etage ter en etage Henter oplysningerne om en etage via Henter en etages enheder Henter en opgangs rum Rum Sag (0 Mange) ter en nyt rum på en etage ter oplysningerne om et rum ter et rum Henter oplysningerne om et rum via Enhed Sag (0 Mange) Rum (0 Mange) ter en ny enhed på en etage HentRum ter oplysningerne om en enhed ter en enhed Henter oplysningerne om en enhed via Henter oplysningerne om en enhed via den brugervendte nøgle (Enhedsadressen) Henter en enhedens rum Brugsenhed Sag (0 Mange) Version 7.0 Side 6 af 13
ter en ny brugsenhed ter oplysningerne om en brugsenhed ter en brugsenhed Henter oplysningerne om en brugsenhed via Henter oplysningerne om en brugsenhed via den brugervendte nøgle (adressen) Geometri ter et nyt geometriske punkt/område ter de geometriske oplysninger ter en geometrisk punkt/område Henter de geometriske oplysninger via 3.1.2 Adressedomænemodel Figur 3.2. Domænemodel for Adresser. Version 7.0 Side 7 af 13
3.1.2.1 er i adressedomænemodellen Grund Bygning (0-Mange) TekniskAnlæg (0-Mange) Sag (0-Mange) Adgangsadresse (0-Mange) ter en ny grund i en kommune HentBygninger HentTekniskeAnlæg HentAdresser ter oplysningerne om grunden ter en grund Henter oplysningerne om en grund via Henter oplysninger om en grund via den brugervendte nøgle Henter bygningerne på grunden Henter de tekniske anlæg på grunden Henter adgangsadresser knyttet til grunden AdgangsAdresse AdresseSagsoplysninger (0 Mange) Geometri (0-1) ter en ny adgangsadresse i en kommune HentEnhedsAdresser ter oplysningerne om adgangsadressen ter en adgangsadresse Henter oplysningerne om en adgangsadresse via Henter oplysninger om en adgangsadresse via den brugervendte nøgle Henter adgangsadressens enhedsadresser Version 7.0 Side 8 af 13
HentAdresseSagsoplysninger Henter en adgangsadresses adressesagsoplysninger EnhedsAdresse AdresseSag (0 Mange) HentAdresseSagsoplysninger ter en ny enhedsadresse på en adresse ter oplysningerne om enhedsadressen ter en enhedsadresse Henter oplysningerne om en enhedsadresse via Henter oplysninger om en enhedsadresse via den brugervendte nøgle Henter en enhedsadresses adressesags-oplysninger AdresseSag Indeholder Enhed-eller adgangsadresse (Netop 1) ter en ny sag på en adresse ter oplysningerne om adressesagen ter en adressesag Henter oplysningerne om en Adressesag via Henter oplysninger om en Adressesag via den brugervendte nøgle Indeholder Notat ter et nyt notat til adgangs-eller enhedsadressen ter et notat ter et notat Vej (fra CPR) Version 7.0 Side 9 af 13
Indeholder HentAdresser Adresse (0 Mange) ter en ny vej i en kommune ter oplysningerne om vejen ter en vej Henter oplysningerne om en vej via Henter en vejs adresser Postdistrikt ter et nyt postdistrikt i en kommune ter oplysningerne om postdistriktet ter et postdistrikt Henter oplysningerne om et postdistrikt via Postnummer ter et nyt postnummer i en kommune ter oplysningerne om postnummer ter et postnummer Henter oplysningerne om et postnummer via Indeholder Geometri ter et nyt geometriske punkt/område ter de geometriske oplysninger ter et geometrisk punkt/område Version 7.0 Side 10 af 13
Henter de geometriske oplysninger via 3.1.3 Modtageboks-domænemodel Figur 3.3. Domænemodel for amodtageboks Denne domænemodel (Figur 3.3) for Modtageboksen vil blive opdateret i forbindelse med den udvidede funktionalitet der indarbejdes i Modtageboksen. 3.1.3.1 er i modtageboks-domænemodel ModtageBoks ter en ny modtageboks ter oplysningerne om modtageboksen ter en modtageboks Henter oplysningerne om en modtageboks via ModtagBoksData ter et nyt sæt af data til modtageboksen ter et sæt modtageboksoplysninger ter et sæt modtageboksoplysninger Henter oplysningerne om modtagboksdata via den tekniske nøgle Version 7.0 Side 11 af 13
3.2 Service Interface Lag Som beskrevet i kapitel 2. Systemarkitektur udstilles forretningslogikken som WCF-services i Service Interface Laget. Service Interface Laget består af to komponenter: Service Contract og Service Adapter. Komponenterne beskrives i det følgende. 3.2.1 Service Contract Service Contract komponenten indeholder beskrivelser af, hvilke operationer og hvilke data der skal udveksles. Dette er helt analogt til en webservice beskrevet med WSDL (Web Services Description Language). Udvalget og formen af de enkelte services dikteres af de forretningsprocesser, som BBR-klienten og kommuneklienten (eksterne OIOXML-snitflader) skal understøtte. Når disse er endeligt fastlagt vil systembeskrivelsen blive udvidet med beskrivelser af de nødvendige services. Typisk vil der for hver entitet være behov for services til søg, hent, opret, ret og slet, men forretningsprocesserne kan sagtens diktere at der forekommer services med flere forskellige entiteter. 3.2.2 Service Adapter Service Adapter-komponenten indeholder selve implementationen af de services, der er beskrevet i Service Contract-komponenten. Den enkelte service implementerer sin funktionalitet ved at tilgå en instans af domænemodellen, beskrevet andet steds i dette kapitel. Service implementationen har endvidere ansvar for at styre transaktionsscope. Dette er især vigtigt når flere entiteter indgår i en given operation. Serviceimplementationen skal også fange de eventuelle fejl, der kan komme fra domænemodellen, og omsætte dem til beskeder som er gyldige i henhold til servicekontrakten. 3.3 Validering Validering af data kan inddeles i 4 forskellige kategorier: 1. Kontrol af relationer i databasen (krav 11.1) 2. Logiske kontroller (krav 11.3 og 11.5) 3. Sandsynlighedskontroller (krav 11.5) 4. Konsistentjek (krav 11.5). De 4 kategorier vil blive implementeret som programmatiske kontroller i forretningslaget på applikationsserveren. Desuden vil transaktionsscope i service interface laget og referentiel integritet i databasen sikre konsistensen i databasen. 3.3.1 Kontrol af relationer i databasen Da relationer implicerer entiteter fordelt over flere fysiske tabeller i databasen, er det ikke tilstrækkeligt med den programmatiske kontrol i forretningslaget. En yderligere sikring indbygges i databasen i form af referentiel integritet, hvilket garanterer, at de relationer, der oprettes i databasen, er valide. Det vil ikke være muligt at oprette en reference til en anden entitet uden at den pågældende entitet eksisterer. Når der skal gennemføres en opdatering over flere tabeller sikrer det transaktionsscope, der etableres i servicelaget, at opdateringerne alle foretages Version 7.0 Side 12 af 13
eller alle afvises. Dette sikrer igen konsistensen således, at en opdatering ikke kun kan gennemføres delvist med referencer til ikke-eksisterende entiteter til følge. Dette gælder for referencerne inden for BBR-domænet. Relationerne til de eksterne systemer valideres ligeledes, men her er der ikke samme garanti for, at relationen efterfølgende er valid, da den ligger udenfor BBR-domænet. Her vil der blive gennemført periodevise batchkørsler for at tjekke konsistensen. 3.3.2 Logiske kontroller De logiske kontroller kan deles op i 1. Simple valideringer såsom tjek af datatype, værdisæt (f.eks. kodeværdier samt fra- og til-værdier), og formater (f.eks. datoformat). Værdierne for de enkelte entiteters datafelter er angivet i Bilag C. Datatypen vil dog allerede være tjekket i præsentationslaget, da det ikke er muligt for præsentationslaget at kalde applikationslaget via en WCF service uden at datatypen er korrekt. 2. Kontekstafhængige feltvalideringer. Her menes felter hvor valideringen påvirkes af indholdet i andre felter i samme eller anden entitet eller af den operation validering indgår i. Bilag A indeholder de kontekstafhængige feltvalideringer som er implementeret i BBR. 3.3.3 Sandsynlighedskontroller Sandsynlighedskontroller implementeres i forretningslaget. Sandsynlighedskontrollen defineres i metadatabasen og består af en kontekstbeskrivelse og en validering. I kontekstbeskrivelsen defineres det udtryk der skal aktivere den tilhørende validering. I kontekstbeskrivelsen kan indgå and- og or-operatorer. Sandsynlighedskontroller er vedlagt i Bilag B. Desuden er der vedlagt en oversigt over sammenhængen mellem den fysiske og logiske datamodel i Bilag E. 3.3.4 Konsistenstjek Konsistenstjek er tjek der sørger for dataintegriteten i forhold til de eksterne systemer. Når udvekslingen af data foregår synkront og realtime, foretages valideringen i forretningslaget. Noget af dataudvekslingen med CPR foretages asynkront, og derfor er det nødvendigt at foretage et periodevist tjek i form af en batchkørsel. 3.4 Forretningsregler De forretningsregler, som er indeholdt i systemet, beskrives i de forskellige afsnit af systembeskrivelsen, hvor de naturligt hører hjemme. Dog er der en mindre gruppe specifikke forretningsregler, der vil blive implementeret, som ikke er beskrevet andre steder. Disse forretningsregler er opsamlet i Bilag D. Version 7.0 Side 13 af 13