Last ned Presentasjon

Arena Kundereskontro
Gruppe 25
Andreas Åkesson
Roger Ommedal
Ashkan Vahidishams
Simen Trippestad
Gruppe 25 – Om oss
 Gruppemedlemmer:
 Andreas Åkesson
Roger Ommedal
Ashkan Vahidishams
Simen Trippestad
 Informasjonsteknologi
 Samarbeidet på tidligere prosjekter
Agenda
 Introduksjon
 Prosessen
 Løsningen
 Avslutning
Introduksjon
Oppdragsgiver - Kredinor
 Norges neste største infordringsselskap
 Mellom 400-500 ansatte
 IT avdeling på ca 30 stk
 Egenutviklede kjernesystemer
 Kontaktpersoner
 Ole Marius Thorstensen – IT sjef
 Øyvind Andersen - Systemarkitekt
Oppgaven – Arena Kundereskontro
 Bakgrunn for oppgaven
 Roger ansatt i Kredinor
 Kredinor hadde behov for å få utviklet en ny
reskontroløsning for bruk på tvers av systemene
 Dagens systemer:
 Vanskelig å hente ut samlet informasjon
 Enkelte transaksjoner kan korrigeres/slettes uten at historikk
lagres
 Hva er Arena?
Hva skal vi lage
 Arena Kundereskontro
 Et Klassebibliotek for bruk i andre system



Transaksjonsoversikt på tvers av systemer
Sikre pålitelighet
Sikre sporbarhet
 Generelt, ikke bransjespesifikt
 Visual Studio - C# .NET
 En klient som benytter klassebibliotek (test / demo)
 Alternativ
 Nytt intranett, web programmering
 Hvorfor
 Web side har vi laget før
 Klassebibliotek - mer utfordrende
 Lærerikt å programmere i c# .Net
Prosessen
Planlegging
 Mål:





Utarbeidelse av kravspesifikasjon
Valg av utviklingsmetodikk
Tidlig utgave av klassediagram
Begresning av omfang
Forsikring av nødvendig forankring
Utarbeidelse av nødvendige dokumenter og diagrammer
- Fremdriftsplan
- Sprint-oversikt
- Risikoanalyse
- Klassediagram
 Benyttede verktøy
- Yed
- Trello
Utviklingsprosessen
 Stadige endringer i kravspesifikasjon
 Tidlige sprinter preget av treg progresjon
 Utfordringer:




Milepælsplan som viser overordnet fremdrift
Paralellitet
Sporbarhet
Pålitelighet
Testing
 Brøt ned utfordringer i så små deler som mulig
Eksempel på Scrum-kort i trello
Scrum
 Hvorfor Scrum?
 Bruk av trello
 Sprint oversikt
 Stand-up møter
Gantdiagram som viser oversikt over sprinter, varighet og helhetlig prosess
Paralellitet
 Resultat av krav om høy ytelse
 Asynkron behandling
 Bruk av GUID
Tabellen er hentet fra Testrapporten og
viser ytelsesforhold sync vs. async
Sporbarhet
 Hvorfor sporbarhet?
 TransaksjonsID
 Forelder
 Barn
Modellen beskriver ønsket sporbarhet i løsningen
Pålitelighet
 Mulighet for feil i gammel løsning
 Samme fil kan leses inn flere ganger, vil gi redundans
 Checksum
 Hash av transaksjonsforespørsel
 Lokal database
 Hver klient har sin egen database
 Checksum lagres her
 Nye forespørsler kontrolleres mot databasen
Hvordan teste et klassebibliotek?
 Klassebibliotek => mangler brukergrensesnitt
 Via en klient => Web API
 Testprogram med utskrift til konsoll
 Enhetstester
Skjermutklipp fra Web-apiet som viser Import-XML viewet
Løsningen
Context
 EntityFramework
 En kontekst kan defineres som en klasse
 Grunnleggende data
 Info om forbindelse til database
 Hvilke objekter databasen inneholder
 Viktige funksjoner
 Refererer til ConnectionStringen
 Inneholder Metadata
 Holder Kontroll på endringer
Klassebibliotekets kontekst
 AKContext
 Sentralt
 RequestContext
 Lokalt
 ConnectionString
Klient
 Et system som tar klassebiblioteket i
bruk
 Klassebiblioteket må vite hvor
transaksjonen kommer fra
Implementasjon av klient
 Interface for klientene
 Hvorfor?
 Identifisering av klienter
 Mottak av transaksjonskvitteringer
 Opp til Klient å implementere funksjonalitet for
håndtering av kvitteringer.
Transaksjonsforespørsler
 Ankommer klassebiblioteket i XML format
 En forespørsel består av:
 TransactionRequest  TransactionData  PostingData –
Data om selve forespørselen
Data om Gitt Transaksjon
Data om gitt postering
 XML konverteres til et objekt som klassebiblioteket kan
behandle videre.
Håndtering av
Transaksjonsforespørsler
Trimming av forespørsel
Validering av transaksjoner
 Påkrevd for å sikre at en transaksjon er korrekt:
 I balanse
 Konto eksisterer
 Oppfylling av vilkår i bokføringsloven, derav pålitelighet
til data som lagres i databasen/modulen.
 Validering etter trimming for å spare ressurser
Lagring av transaksjon
 Etter validering blir transaksjonen forsøkt lagret.
 Ved vellykket lagring oppdateres den lokale Request
databasen.
 Dette for å unngå duplikat behandling dersom forespørsel
sendes inn på nytt.
 Til slutt sendes en kvittering til klienten med
transaksjonens unike ID.
Kvitteringer
 En tilbakemelding fra modulen der klient får vite:
 Vellykket postering
 Transaksjon er behandlet fra før
 Feilmelding
Kvitteringer - nytte
 Tilbakemelding etter behandling av transaksjon
 GUID dersom vellykket
 Beskrivende melding ved feil
 Gir klienten en mulighet til etterbehandling/loggføring.
Uttak til regnskapssystem
 Nåværende system (gammel løsning)
 Batch-jobb
 Kjøres som regel en gang per natt
 Sender inn en datastrøm (ny løsning)
 AccountingRequest blir skrevet som XML til strøm
 Posteringer med tilhørende transaksjonsinformasjon
 Posteringer blir merket som “eksportert” (timestamp)
 Kan også hente ut alt som er eksportert på en gitt dato
Web API
 Forlengelse av det opprinnelige prosjektet
 Klient som implementerer klassebiblioteket
 Benyttes til å teste ut og demonstrere funksjonaliteten
til klassebiblioteket
 ASP.NET Web API
 Rammeverk for å bygge RESTful Web API
 Returnerer JSON objekt
 Gjør data tilgjengelig for mange plattformer
 F.eks. en mobilapplikasjon
Eksempel på en forespørsel
GET /postings
Forespørsel
GET api/postings
Beskrivelse
Hente ut alle posteringer.
Response
Kode
Beskrivelse
200
Retunerer en liste med Posting.
POSTING MODEL
Svar
Array med posteringer (JSON)
Beskrivelse
En postering i modulen.
Eksempel
Type
application/json
{
"TransactionId" : "050fea39-b054-4d6f-bcd1-001b6f835362",
"AccountNo" : 2802,
"ParentTransactionId" : "050fea39-b054-4d6f-bcd1-001b6f835362",
"Amount" : -146.0,
"TransferedToAccountingSystem" : null,
"Transaction" : null,
"ParentTransaction" : null,
"Account" : null,
"Reference" : null
}
Bruk av Web API
Front End
 AngularJS
 Javascript MVC-rammeverk
 SPA (Single-page Application)
 Brukergrensesnitt i HTML
 Bootstrap CSS
 6 views
 En controller per view
Services
 Utfører forespørsler mot Web API
 Gjenbrukbar kode (DRY)
 En service kan brukes i flere controllers
 ngResource – modul til Angular som tilbyr interaksjon
mot RESTful services
.factory('Client', ['$resource', function ($resource) {
return $resource('api/Clients/:clientId', {}, {});
}]);
$scope.newClient = new Client({ Name: "Demo", Active: true});
$scope.registerDemoClient = function () {
$scope.newClient.$save();
};
Funksjonalitet
 Laste opp fil med flere transaksjoner eller registrere en
enkel transaksjon.
 Demonstrere sporbarheten ved hjelp av søk
 Administrere kontoer samt importere flere kontoer fra
fil
 Registrere nye klienter
 Laste ned fil med posteringer for regnskapssystem
Importering av filer
Polling av kvitteringer
 Etterspørr nye kvitteringer en gang i sekundet
 Rød: Opplasting av XML (skjer en gang)
Blå: Polling (skjer flere ganger)
Sporbarhet
Registrering av enkel transaksjon
Legge til postering/motpostere
Kontoadministrasjon
Registrering av ny klient
Uttak til regnskapssystem
<?xml version="1.0"?>
<accountingRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" count="4">
<postings>
<posting>
<date>2015-06-09T00:00:00+02:00</date>
<financial_year>2015</financial_year>
<financial_period>1</financial_period>
<account_no>1018</account_no>
<parent_guid>ea424dfa-ae01-4863-aa2a-974ee31424f3</parent_guid>
<amount>-2000</amount>
</posting>
<posting>
<date>2015-06-09T00:00:00+02:00</date>
Avslutning
Gruppens utbytte
 Lært mye om prosess, viktigheten av å ha et nøye
planlagt og gjennomtenkte prosjekt før man starter
 Lært programmering (.Net), fordeler med testdreven
utvikling og behovet for god dokumentasjon
 Lært å arbeide i prosjekt i næringslivet, både på godt
og vondt
 Krevende å oppfylle alle ønsker, mange som gjerne vil
komme med innspill. Kan bli mange endringer underveis
 Vanskelig å få allokert ressurser
 Lett for at det oppstår misforståelser – viktigheten av god
kommunikasjon
Nytteverdi for Kredinor
 Samlet oversikt over transaksjoner og historikk
 Mulighet for uthenting av data til regnskapssystem
 Produktet kan tas i bruk, men man ser at det
sannsynligvis trenger videreutvikling for at det skal
fungere optimalt
 Inneholder for lite informasjon
 Støtte ønsker om å ta ut informasjon om kunden /
oppdragsgiver, ikke bare transaksjonen, på tvers av
systemer
Gjort annerledes?
 Mer planlegging og avklaringer før kodestart
 Bedre og mer gjennomtenkte use-case, klassediagram,
etc.
 Enda tettere oppfølging mot oppdragsgiver og raskere
avklaringer
Konklusjon
 Vi har laget et produkt som samsvarer godt med det
oppdragsgiver i utgangspunktet ønsket seg
 Prosessen har vært litt «humpete»
 definitivt god lærdom å ta med seg til neste gang man skal
jobbe i et slikt prosjekt
 Utfordrende prosjekt
 Et produkt som ikke har noe grensesnitt for sluttbruker
 Vanskelig å demonstrere og systemteste
 Faglig vanskelig innhold
 transaksjon, postering, sporbarhet, pålitelighet etc.
?
Takk for oss!