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!
© Copyright 2024