STAGE EINDWERK
Studiegebied Bachelor Afstudeerrichting Academiejaar Student
Handelswetenschappen en bedrijfskunde Toegepaste Informatica Toegepaste Informatica 2009-2010
Bart Vercruysse
Webontwikkeling
EEN WEBAPPLICATIE ALS ALTERNATIEF VOOR SPREADSHEETS HET GESTRUCTUREERD REGISTREREN VAN DE KOSTEN VAN EEN VLOOT BINNEN KLEINE TRANSPORTBEDRIJVEN
Stageplaats
Omni-Soft Brugge BVBA Oostende
Howest – de Hogeschool West-Vlaanderen Rijselstraat 5- 8200 Brugge – T 050 38 12 77 – F 050 38 11 71
[email protected] – www.howest.be
2 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
1. INTRODUCTIE 1.1 VOORWOORD Tijdens de voorgaande 5 semesters van de opleiding kregen we als student regelmatig de kans individueel of in groep een softwareontwikkelingsproject onder handen te nemen. Deze projecten, hoewel zeer leerrijk en boeiend, blijven altijd iets artificieels hebben. De opdracht is vaak mooi afgelijnd en de omstandigheden zijn nagenoeg ideaal. De stageperiode was voor mij dan ook de ideale gelegenheid de aangeleerde technieken en verworven vaardigheden in het echte bedrijfsleven uit te proberen. Het was een boeiende, leerrijke ervaring. Het gaf me de kans zelf te ervaren dat in de “echte” informaticawereld het constant maken van compromissen tussen productiviteit en functionaliteit een noodzaak is. In dit document vindt u een volledig verslag terug van het project die mij werd toevertrouwd tijdens de stageperiode. Ik probeer hier te verklaren hoe het project tot stand is gekomen en geef een overzicht van het uiteindelijke resultaat. Ik hoop via dit werk hoofdzakelijk mensen met interesse voor webdevelopment en het ontwikkelen van applicaties ter vervanging van spreadsheets aan te spreken. Daarnaast hoop ik ook het stagebedrijf aan de nodige informatie te helpen om vlot met de implementatie van het project te kunnen starten. Een bedanking aan mijn stagebegeleider Dirk Vandycke is hier zeker op zijn plaats. Niet alleen voor de nodige tips en steun tijdens de stage en het eindwerk maar ook voor de telkens leerrijke en boeiende contacturen tijdens de opleiding. De voorgestelde lectuur bleek telkens een verrijking. Lieven Mattheeuws en het volledige Omni-Soft team worden bedankt voor de steun en hulp tijdens de stage. Ik heb me ten alle tijde welkom gevoeld en kreeg altijd de kans mijn eigen opinie te uiten. Tot slot nog een dankwoordje voor mijn vriendin. Zonder haar was het volgen van deze opleiding nooit mogelijk geweest.
Bart Vercruysse Toegepaste Informatica Hogeschool West-Vlaanderen 3 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
1.2 SAMENVATTING Mobility p@ck-edge is DE beheersoftware voor de automatisering van verzekeringen binnen een transportbedrijf. Deze in ASP geschreven webapplicatie werd ontwikkeld door Omni-Soft Brugge. Dankzij de unieke samenwerking met het verzekeringskantoor “D’Hondt Kerckhof en partners verzekeringsmakelaars” kan een anders tijdrovende administratieve taak volledig worden geautomatiseerd. De software geeft je een gestructureerd overzicht van alle verzekeringskosten en stelt de nodige verzekeringsdocumenten meteen ter beschikking. Verzekeringen mogen dan wel een van de grootste kosten zijn binnen een transportbedrijf, alle andere kosten verbonden aan de vloot dienen ook bijgehouden te worden. Grote transportbedrijven richten zich hiervoor tot dure bestaande softwarepakketten. Deze pakketten zijn onbetaalbaar voor kleine bedrijven en bieden hen een overdaad aan mogelijkheden. Zij zoeken hun toevlucht bij spreadsheets waar ze alles kunnen bijhouden wat zij nodig achten en ze eventueel de nodige grafieken kunnen generen. Deze spreadsheets hebben de neiging snel ongestructureerd te raken, missen uniformiteit, worden vaak over meerdere bestanden of locaties gespreid en bieden amper bescherming tegen menselijke fouten. Tijdens mijn stage kreeg ik de opdracht een prototype van een webapplicatie te ontwikkelen die deze bedrijven een alternatief biedt voor het gebruik van spreadsheets. De webapplicatie zorgt voor een gestructureerde registratie van de gegevens en gaat deze gecentraliseerd bewaren. Toch wordt de eenvoud zoals bij het gebruik van spreadsheets behouden en laat het de gebruiker toe enkel bij te houden wat bij hem van toepassing is. De webapplicatie biedt een interface die nauw aansluit bij het Mobility p@ck-edge en kan zowel geïntegreerd in het pakket als volledig zelfstandig beschikbaar worden gesteld. Moderne technologieën zorgen voor een simpele maar dynamische interface. Het pakket biedt de mogelijkheid voertuigen, bestuurders en ritten te registreren. Alsook eigen kosten te definiëren en deze bij te houden. Van alle gegevens kan een gestructureerd overzicht worden opgevraagd en kunnen grafieken worden gegenereerd. Zo kunnen zij snel zien welk voertuig, bestuurder of wat dan ook binnen de vloot hen het meest gekost heeft binnen een opgegeven periode.
4 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
1.3 ABSTRACT Mobility p@ck-Edge is THE management software for the automation of insurance within a transport company. This web application, written in ASP, was developed by Omni-Soft Bruges. Thanks to a unique collaboration with the insurance broker "D’Hondt Kerckhof en partners verzekeringsmakelaars” it becomes possible to fully automate an otherwise time-consuming administrative task. The software provides a structured overview of all insurance claims and it makes sure the necessary insurance documents are immediately available. Insurance payments may by far be one of the biggest costs within a transport company, however all other costs associated with the fleet should also be tracked. Large transport companies can get themselves some expansive existing software. These packages are out of financial reach for small businesses and offer them an overload of possibilities. They seek refuge in spreadsheets where they keep track of only those instances important to them and if necessary, these spreadsheets offer them a wide array of charts to analyze the data. Unfortunately these spreadsheets tend to become unstructured rather quickly, lack uniformity, are often spread over several files or sites and provide limited protection for human errors. During my internship I had the chance to create a prototype of a web application, which could eventually provide these businesses an alternative to the use of spreadsheets. The web application provides a structured way of recording data , fully centralized in one spot. However, the simplicity, as we find it in the use of spreadsheets is maintained and allows the user to keep track of only those costs which apply to him. The web application provides an interface that closely matches the interface of Mobility p@ck-edge and can be integrated into the package. On the other side, it’s still perfectly possible to run the application fully autonomous. Modern technologies provide the user a simple but dynamic interface. The package allows management of vehicles, drivers and keeps record of the different interactions between those. The user can create his own costs and link these to the different vehicles within his fleet. All data can then be obtained, exported or even used inside the application to be analyzed or to generate overview graphs. The application provides a quick way to determine the biggest costs within a fleet in a certain time span.
1.4 KEY WORDS Webapplicatie – webontwikkeling – prototype – kostenregistratie – kostenbeheer - ASP.NET - AJAX – aspxGridView – DevExpress - spreadsheet – rekenblad – 3-tier – Omni-Soft Brugge BVBA
5 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
INHOUD EEN WEBAPPLICATIE ALS ALTERNATIEF VOOR SPREADSHEET 1. Introductie........................................................................................................................................................... 3 1.1 Voorwoord .................................................................................................................................................... 3 1.2 Samenvatting ................................................................................................................................................ 4 1.3 Abstract......................................................................................................................................................... 5 1.4 Key words ..................................................................................................................................................... 5 Inhoud................................................................................................................................................................. 6 1.5
Verklarende woordenlijst ...................................................................................................................... 9
2. Stagebedrijf ....................................................................................................................................................... 10 2.1 Omni-Soft Brugge BVBA .............................................................................................................................. 10 2.2 Hun producten ............................................................................................................................................ 10 OmniSyndic................................................................................................................................................... 10 OmnImmo .................................................................................................................................................... 10 Mobility P@ck-edge ..................................................................................................................................... 11 2.3 Het team ..................................................................................................................................................... 11 Kantoor Brugge............................................................................................................................................. 11 Kantoor Oostende ........................................................................................................................................ 11 3. Stageproject ...................................................................................................................................................... 12 3.1 Hoofdproject: prototype kostenregistratie vloot ....................................................................................... 12 Algemeen ..................................................................................................................................................... 12 Analyse ......................................................................................................................................................... 18 Ontwerp ....................................................................................................................................................... 19 Programmatie............................................................................................................................................... 26 3.2 Mini-project: SQL reporter ......................................................................................................................... 35 Situering ....................................................................................................................................................... 35 Analyse ......................................................................................................................................................... 36
6 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Ontwerp ....................................................................................................................................................... 36 Programmatie............................................................................................................................................... 38 4. Overzicht webapplicatie .................................................................................................................................... 39 4.1 Gebruikers en polissen ............................................................................................................................... 39 4.2 Voertuigen .................................................................................................................................................. 39 Filteren en sorteren ...................................................................................................................................... 39 Nieuwe voertuigen toevoegen ..................................................................................................................... 40 Voertuigen aanpassen .................................................................................................................................. 41 Algemeen en technische kenmerken ........................................................................................................... 42 Kostcategorieën............................................................................................................................................ 42 Kostoverzicht ................................................................................................................................................ 42 Voertuigen verwijderen................................................................................................................................ 43 4.3 Bestuurders................................................................................................................................................. 43 Bestuurders toevoegen ................................................................................................................................ 43 Bestuurders aanpassen ................................................................................................................................ 44 Bestuurders verwijderen .............................................................................................................................. 44 Documenten koppelen ................................................................................................................................. 44 Ritten registeren........................................................................................................................................... 45 4.4 Kostenbeheer.............................................................................................................................................. 46 Nieuwe categorieën en kosten definiëren ................................................................................................... 46 Het verwijderen van kosten of categorieën ................................................................................................. 46 4.5 SQL reporter ............................................................................................................................................... 47 Sorteren en filteren ...................................................................................................................................... 47 Kolommen wijzigen ...................................................................................................................................... 47 Groeperen .................................................................................................................................................... 48 Exporteren .................................................................................................................................................... 49 5. Kritische reflectie .............................................................................................................................................. 50 6. Conclusie ........................................................................................................................................................... 52 7 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
7. Bijlagen .............................................................................................................................................................. 53 Bijlage 1: ASPtoASPX.ASP.................................................................................................................................. 53 Bijlage 2: ASPtoASPX.aspx ................................................................................................................................ 53 Bijlage 3: Clearsessions.aspx + Clearsessions.cs ............................................................................................... 54 Bijlage 4: Voorbeeld DAL en BLL ....................................................................................................................... 55 Bijlage 5: SQL reporter ...................................................................................................................................... 59 Goedkeuring eindwerk .......................................................................................................................................... 65
8 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
1.5 VERKLARENDE WOORDENLIJST Prototype: Verwijst in dit werkstuk naar een stuk software met als bestaansreden het weergeven van de hoofdfunctionaliteit en het bieden van een framework voor de ontwikkeling van een vooropgestelde applicatie. Zo’n prototype ontwikkelen we om te onderzoeken welke technieken we best gebruiken om aan de noden van de klant (of in mijn geval het ontwikkelingsteam) te voldoen, zonder rekening te hoeven houden met alle te verwerken gegevens van de uiteindelijke applicatie. UID: Unique Identifier, een databank gegevenstype. Dit is een automatisch gegenereerde, unieke reeks tekens die als identifier voor de data kan gebruikt worden. IDE: Integrated Development Environement. Een stuk software die de softwareontwikkelaar toelaat stukken software te ontwikkelen met behulp van aangereikte functionaliteiten. Het gaat hier meestal om een totaalpakket van code-editor en een tool om de applicatie te compileren of te interpreteren. In bijna alle gevallen is er ook een debug module aanwezig. Generics: Laten de softwareontwikkelaar toe het type van een collectie door te geven aan de compiler, zodat deze dit kan controleren.
9 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
2. STAGEBEDRIJF 2.1 OMNI-SOFT BRUGGE BVBA Omni-Soft Brugge BVBA is een dochterbedrijf van verzekeringsmakelaar “D’Hondt Kerckhof en partners verzekeringsmakelaars” of kortweg DKPV. Het is een ambitieus en nog volop groeiend softwarehuis die zich richt op overzichtelijke, flexibele en “easy to use” oplossingen op maat van de klant. Het bedrijf probeert steeds nauw samen te werken met de klant om zo tot een professioneel advies te komen. Hierbij wordt geprobeerd de administratieve taken binnen het bedrijf van de klant te vereenvoudigen en bedrijfsprocessen te automatiseren. Door de on-line-isering in de softwarewereld zijn webapplicaties een groot aandeel in de softwareaanbod van het bedrijf. Het gros van de ontwikkelde webapplicaties draait op de reeds enkele jaren oude ASP motor. Tijdens mijn stageperiode bleek het bedrijf volop bezig met investeren in nieuwe technologieën. Zo worden alle nieuwe projecten reeds in ASP.NET ontwikkeld en worden oude projecten laag per laag gemoderniseerd. Door de keiharde softwaremarkt en het grote aanbod gratis alternatieven hebben de bedrijfsactiviteiten zich doorheen de jaren uitgebreid. Zo biedt Omni-Soft ook netwerkbeheer of helpdesk ondersteuning aan bedrijven. Het IT team bestaat uit een goed werkende mix van softwareontwikkelaars en technici met verschillende professionele achtergronden. Zo slagen ze er in een naadloze integratie te bieden met bestaande omgevingen en voelen ze zich thuis op verschillende vakgebieden.
2.2 HUN PRODUCTEN OMNISYNDIC Een web-based programma voor de syndicus. Deze webapplicatie biedt modules voor het beheren van gebouwen en bewoners. Het contacteren en informeren van de bewoners wordt zo volledig geautomatiseerd. Ook een boekhoudkundige module en taakplanner zijn aanwezig. Er bestaat een spin-off van deze toepassing onder de naam OmniClub die voorziet in het beheer van clubleden en een module voor eenvoudig boekhouden aanbiedt.
OMNIMMO Een webapplicatie speciaal ontwikkeld voor het immobilien kantoor. Het pakket biedt een volledig beheersysteem voor de verkoop en verhuur van panden en zorgt voor een rechtstreekse online publicatie.
10 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
MOBILITY P@CK-EDGE Een online geïntegreerd beheersplatform voor transportverzekeringen. Dit is het paradepaardje van het bedrijf en een unieke toepassing op de Belgische markt. Mijn stageproject werkt nauw samen met deze toepassing. We gaan er dan ook iets dieper op pagina 11. Verdere verwijzingen naar dit softwarepakket zullen gebeuren onder de verkorte naam Mobility.
Naast de bovenstaande algemene pakketten biedt het bedrijf hoofdzakelijk op maat gemaakte oplossingen, dit kan variëren van bedrijfsspecifieke client-server software tot het creëren van een website voor de verhuur van een vakantievilla in Spanje.
2.3 HET TEAM De werknemers van het bedrijf werken op verschillende sites, waarbij het ontwikkelingsteam zich in Oostende huist en de zaakvoerders zich in het kantoor van moederbedrijf DKPV in Brugge nestellen.
KANTOOR BRUGGE Kurt D’Hondt Zaakvoerder Omni-Soft
Sandra De Groote Zaakvoerder
KANTOOR OOSTENDE Guy Winne IT manager Software engineer
Lieven Mattheeuws Software engineer
Eric Walter Project manager Hardware specialist
Hoewel ik tijdens mijn stageperiode hoofdzakelijk heb samengewerkt met de twee aanwezige software engineers heb ik ook behoorlijk wat kunnen bijleren van de project manager en tevens hardwarespecialist van dienst. Ik kreeg enkele malen de kans actief mee te werken bij het oplossen van netwerk of hardware problemen. Dit zowel binnen het bedrijf als op locatie bij klanten. Daarnaast wist hij me bijna dagelijks verbazen met boeiende toelichtingen bij nieuwe technologieën en ontwikkelingen in de wereld van hardware en besturingsystemen.
11 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
3. STAGEPROJECT 3.1 HOOFDPROJECT: PROTOTYPE KOSTENREGISTRATIE VLOOT ALGEMEEN SITUERING We bevinden ons in de transportsector. Wereldwijd een van de grootste bedrijfstakken met ook in België een aanzienlijke markt, die zelf die van buurland Nederland overstijgt. Op vlak van automatisering is Omni-Soft is hier reeds een gevestigde waarde dankzij het uniek softwarepakket “Mobility ”. Dit stelt transportbedrijven in staat de administratie rond het verzekeren van hun vloot te automatiseren en het hele gebeuren aanzienlijk te versnellen. Belangrijk is te weten dat verzekeringen meteen ook de grootste kost zijn binnen deze bedrijven. We kunnen dus stellen dat de bedrijven het Mobility pakket gebruiken, hiermee 1 van hun grootste kosten perfect in beeld kunnen brengen. Voor het in kaart brengen van alle kosten omtrent de vloot moeten ze echter beroep doen op vaak zeer dure, grote softwarepakketten of aangepaste ERP systemen. Hierbij gaan ze de verzekeringskosten dubbel registeren, zodat ze kunnen genieten van de automatisering van de verzekeringen via Mobility en de management en kostenanalyse mogelijkheden van third party software.
MOBILITY P@CK-EDGE Mobility is een groot browser driven softwarepakket geschreven in ASP. Het pakket laat een samenwerking toe tussen zowel verzekeringsmakelaar als transportbedrijf. De grote kracht van het pakket Met betrekking tot het stageproject is enkel de module bestemd voor transportbedrijven van belang. Met het stuk voorzien voor de verzekeringsmakelaar wordt niet samengewerkt vanuit het stageproject en we hoeven hier dus verder geen rekening mee te houden. Zoals reeds eerder vermeld speelt Mobility een belangrijke rol bij de ontwikkeling van mijn prototype. Het is namelijk belangrijk dat de eindapplicatie zowel volledig autonoom als volledig geïntegreerd in de bestaande software kan werken. Er kunnen ook enkele bestaande modules worden overgenomen. Zo wordt is het uiteindelijk programma een mix van programmamodules die strikt tot het stageproject behoren en het gebruiken van reeds bestaande modules uit Mobility. We zien in onderstaand schema hoe de twee applicaties met elkaar verweven zijn. Zo zien we dat de gebruikersmodule in beide applicaties dezelfde is en de basis van de voertuigmodule ook zijn oorsprong bij Mobility kent. In theorie werkt dit zonder problemen. De verschillende modules zijn namelijk netjes afgeschermd geschreven en kunnen bijna volledig op zichzelf functioneren. De samenwerking ertussen is een kwestie van data doorgeven.
12 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
In praktijk blijkt het doorgeven van die data een groter probleem. We gaan hier twee verschillende technologieën combineren. Aan de ene zijde hebben we Mobility die volledig in ASP gecodeerd is, aan de andere zijde het stageproject geschreven in ASP.NET. Op de webserver zijn dit dus twee verschillende serverside script engines die de webpagina’s generen. Het zijn ook twee afzonderlijke processen die sessievariabelen gaan bijhouden en afschermen. In het stuk “Analyse” gaan we dan ook even dieper in op de techniek die gebruikt werd om sessievariabelen van classic ASP door te geven naar ASP.NET en visa versa. Ook doordat we twee verschillende technologieën aan de kant van de server gebruiken zijn er twee aparte vertalingmodules voorzien. Zo dient tijdens de iets arbeidsintensievere taak voor het ophalen van de correcte labeltekst niet telkens langs de omzetpagina worden gegaan.
KOSTENREGISTRATIE BIJ KLEINE TRANSPORTBEDRIJVEN Kleine transportbedrijven maken echter geen gebruik van de reeds bestaande softwarepakketten. Vaak gaan ze ook niet aankloppen bij softwarehuizen om een op maat gemaakt pakket te laten maken. Dit heeft twee logische redenen: •
Het kostenplaatje: De reeds beschikbare software is zondermeer duur te noemen. Voor deze kleinere transportbedrijven een investering die ze niet kunnen maken. Ook het op maat laten maken van software of het laten aanpassen van ERP toepassing zijn dure aan gelegenheden. 13 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
•
Overdaad aan mogelijkheden: Het dure prijskaartje is niet uit de lucht gegrepen. De bestaande pakketten bieden vaak een lange waslijst van mogelijkheden en te gebruiken modules. Kleine bedrijven die inderdaad zo’n pakket in gebruik hebben, blijken in praktijk dan ook slechts een heel klein percentage hiervan te gebruiken.
De kleine transportbedrijven geven dan ook zelf aan dat de kosten hier niet baten en ze deze investering achterwege laten. Ze gaan zelf opzoek naar oplossingen om voor zichzelf zo goed mogelijk een overzicht te creëren. Hierbij wordt in vele gevallen beroep gedaan op softwarepakketten die ze reeds gebruiken binnen de onderneming en hen in staat stellen alles wat nodig is te registreren.
ALGEMEEN SPREADSHEETS TO THE RESCUE? Als ik het hierboven heb over ‘softwarepakketten die reeds gebruikt worden binnen de onderneming’, blijkt dit in praktijk hoofdzakelijk over een heel specifiek pakket te gaan. Bijna alle bedrijven hebben namelijk Microsoft Office of een variant in gebruik. Binnen dat zo’n pakket vinden we het programma steevast een applicatie terug die de gebruiker instaat stelt snel en makkelijk spreadsheets of rekenbladen te creëren. Een meerderheid van de bedrijven gebruikt zo’n rekenblad om alle gegevens rond kosten en voertuigen binnen een vloot te registeren en bij te houden. Tot op zekere hoogte blijkt dit een prima oplossing. De gebruiker kan zelf zo’n rekenblad opstellen en daarin telkens wat voor hem nodig is registreren. De gebruiker krijgt ook de indruk, of vertrekt zelfs vanuit de intentie dat dit programma voor dergelijke zaken bedoeld is. We weten echter dat dit helemaal niet de bedoeling is van een rekenblad. Rekenbladen zijn geen databanken. Ze bieden geen relaties tussen de verschillende gegevens. Rekenbladen zijn bedoeld om op reeds gesloten gegevens berekeningen uit te voeren of grafieken te trekken. Microsoft is er zich van bewust dat hun software vaak verkeerdelijk wordt gebruikt en legt gebruikers in verschillende online hulpdocumenten uit in welke gevallen te kiezen voor rekenbladen of wanneer gebruik te maken van hun database gericht programma MS Access. De gouden regel is hier: gebruik rekenbladen enkel voor het uitvoeren van berekeningen op kleine hoeveelheden data. Wanneer je relationele gegevens wil opslaan, kies dan voor een echte database.
DE KRACHT VAN EEN REKENBLAD De gebruikers mogen dan wel verkeerdelijk naar een rekenblad grijpen voor het beheren en opvolgen van hun vloot en kosten, we moeten ons ook afvragen of dit wel zo erg is? Brengt dit nadelen met zich mee? En als er inderdaad zoveel bedrijven dit gebruiken moet het gebruik vast ook vele voordelen bieden. Hieronder vinden we een lijst van de grootste voor en nadelen van een rekenblad. Dit zal later in dit document ook meteen een van de uitgangspunten zijn om met een alternatief op de proppen te komen. Als we namelijk een alternatief willen aanbieden, zal het belangrijk zijn zoveel mogelijk van de goede punten van de rekenbladen te behouden en zoveel mogelijk op de slechte punten in te spelen. Alleen dan zal de applicatie de gebruiker aanzienlijke voordelen bieden en een eventuele overstap beter te verantwoorden zijn.
14 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
VOORDELEN •
•
•
•
•
Gebruiksvriendelijk en vertrouwd: Rekenbladen kunnen door gebruikers van alle niveaus worden bewerkt. Daarnaast zijn veel gebruikers reeds vertrouwd met de “look and feel” van het pakket doordat ze andere software van dezelfde fabrikant dagelijks gebruiken. Prijskaartje: Goedkoop of gratis. Bij vele bedrijven is een programma voor het bewerken van rekenbladen aanwezig als onderdeel van een reeds aangekocht softwarepakket. Er bestaan ook degelijke, gratis softwarepakketten die deze taak op zich nemen. Flexibel: De gebruiker houdt enkel bij wat voor hem nodig is. Geen onnodige complexe schermen en geen bedrijfspecifieke kosten die niet kunnen geregistreerd worden. Compatibiliteit: Door de grote populariteit van programma’s als Excel zijn de bestandsformaten die door deze programma’s gebruikt worden bijna universeel geworden. Heel veel externe software biedt ondersteuning voor deze formaten wat het uitwisselen van data vaak makkelijk maakt. Rapportering/Grafieken: Een programma voor het bewerken van rekenbladen komt ook met een hele werkkist aan grafieken en tools die het analyseren van je data vereenvoudigen. Veel van deze programma’s zijn ook al een heel eind op de markt en hebben zich op dit terrein geperfectioneerd dit vlak dan ook heel wat te bieden.
NADELEN • •
•
•
•
Interactief en foutgevoelig: deze knelpunten worden in het stukje “Interactief gevaar en foutgevoeligheid”. Beperkt tot 1 gebruiker: Rekenbladen bieden slechts beperkte ondersteuning voor het bewerken van de data door meerdere gebruikers op hetzelfde moment. Ze bieden geen garantie van exclusiviteit op de data en er is geen instantie die kan controleren of de data waarmee je werkt nog steeds de meest recente data is. Niet relationeel en niet gecentraliseerd: Doordat we geen relaties kunnen definiëren tussen de data en dus ook geen beperkingen kunnen opleggen op deze relaties is de kans op redundante gegevens groot. Daarnaast gaan bedrijven hun gegevens vaak over meerdere rekenbladen verspreiden dus kunnen we ook niet spreken van gecentraliseerde data. Dit maakt het beheer van beveiliging, rechten en back-up er niet makkelijker op. Beperkte hoeveelheden data: Rekenbladen hebben een zeer beperkte grote. Hoewel kleinere transportbedrijven maar een kleine hoeveelheid data moeten bijhouden en dus zelden het beperkte maximum aantal records zullen bereiken leidt de snelheid en het gebruiksgemak al snel onder de kleine hoeveelheid data. Moeilijk uit te breiden: Eens de structuur en de data binnen een rekenblad vastligt, is dit nog moeilijk uit te breiden. De uitbreiding en controle moet manueel gebeuren. We kunnen makkelijk nieuwe records toevoegen, echter de gegevens binnen de huidige records aanpassen is niet zonder gevaar.
15 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
INTERACTIEF GEVAAR EN FOUTGEVOELIGHEID Bij een rekenblad mogen we het gevaar van het interactief werken op de gegevens binnen dat rekenblad niet onderschatten. We werken namelijk altijd zelf en rechtstreeks op de gegevens. Buiten de eigen interpretatie van de gebruiker is er geen mechanisme die ingaven controleert of regels afdwingt. Wanneer we een rekenblad gebruiken om zowel data op te slaan (databank) als data te bewerken (formulier) is dit een gevaarlijke onderneming. De integriteit van de gegevens is volledig van de gebruikers afhankelijk en er is geen controle bij strikt getypeerde ingaven. De gebruiker wordt dus gedwongen zelf foutcontroles uit te voeren bij het wijzigen van gegevens als bij het aanmaken van nieuwe gegevens.
WERKEN NAAR EEN OPLOSSING HET BIEDEN VAN EEN ALTERNATIEF Als stageproject is mij de opdracht gegeven een het prototype van een webapplicatie te ontwikkelen om deze kleine transportbedrijven een alternatief te kunnen bieden voor het ‘gevaarlijke’ gebruik van spreadsheets. Het prototype moet de basis worden, waar zonder veel aanpassingen zowel een stand alone versie uit te produceren valt alsook voor een complete integratie binnen het bestaande pakket Mobility. Het zou uiteindelijk de bedoeling zijn dit pakket beschikbaar te stellen aan kleine transportbedrijven die reeds andere, commerciële, diensten van het stagebedrijf benutten. Aan de ontwikkeling van het prototype zijn enkele basisvoorwaarden verbonden, hierover kunt u meer lezen in het stuk “Functionele en niet-functionele eisen”, terug te vinden onder het hoofdstuk “Analyse”. Het kiezen voor een webapplicatie brengt “out of the box” al meteen een voordeel met zich mee. Aan de cliëntzijde zijn we namelijk losgekoppeld van een besturingssysteem. In de transportsector kan het platform van dienst sterk variëren van bedrijf tot bedrijf, hoewel de keuzes zich meestal beperken tot een Windows based platform of een bekende Linux distributie. Indien nodig kan een externe web server de server zijde op zich nemen. Voor het aanspreken van de applicatie zijn een compatibele web browser en indien extern, een internet aansluiting voldoende. We hoeven ons niets aan te trekken tijdens het uitwerken van een prototype over de compatibiliteit van de gebruikte technologieën en de uiteindelijke omgeving.
STARTEN MET HET ONTWERP VAN EEN PROTOTYPE Bij de ontwikkeling van een prototype is het belangrijk de focus te behouden. We moeten vooraf duidelijk aflijnen wat we met het prototype willen bereiken en aan welke voorwaarden we willen voldoen. Zo niet dreigt het prototype een geheel van onafgewerkte technologieën te worden waarbij wel veel onderzoek zal verricht zijn maar weinig resultaten worden behaald. We stellen strikte doelen op en pas als deze zijn behaald wordt het prototype naar een volgend stadium opgewaardeerd. Bij het bedrijf waren er in hoofdzaak twee redenen om zo’n prototype te ontwikkelen. Aan de ene zijde zijn ze opzoek naar welke eigenschappen de applicatie moet hebben om nuttig bevonden te worden. Hoe nuttig blijkt het idee die binnen het bedrijf speelt? Aan de andere kant willen ze te weten komen welke technologieën er gebruikt kunnen worden om de interface dynamischer te maken. Om deze opdracht tot een goed einde te brengen ben ik gestart bij een soort checklist van de te creëren applicatie . We hebben reeds in een vorig hoofdstuk een lijst opgesteld met alle sterke en zwakke punten van rekenbladen. Het was toen al duidelijk dat we minstens aan alle sterke punten moeten voldoen en verbetering 16 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
op de zwakke willen we de gebruiker enig voordeel bieden tegenover de huidige werkwijze. Ik heb dan ook deze punten gebruikt als richtlijn om de lijst op te stellen. Na de echte programma analyse kunnen voegen we hieraan de functionele en niet-functionele eisen aan toe om tot een geïmplementeerd geheel te komen.
VOLGENDE GOEDE PUNTEN MOETEN BEHOUDEN BLIJVEN: Gebruisvriendelijk en vertrouwd: We maken gebruik van een “cleane”, intuïtieve interface. We bieden een gelijkaardige interface als die van het bestaande pakket Mobility. Gebruikers die dit pakket in gebruik hebben zullen zich hier dus meteen thuis voelen. Fexibel: De gebruiker moet zelf kunnen bepalen welke gegevens hij in de applicatie bijhoud en hoe diep hij hierin gaat. Hier gaat specifiek over het aanmaken van eigen kostencategorieën en types. Op dit vlak moet voordeel gehaald worden ten opzichte van applicaties die alle formulieren reeds vastleggen. Het gebeurt niet vaak dat de gebruiker alle aangereikte velden gebruikt en dit komt de overzichtelijkheid niet ten goede. Compatibiliteit: De webapplicatie biedt exportmogelijkheden naar Excelbestanden, vanaf dit punt blijven dezelfde compatibiliteit gegarandeerd als bij de vooraf gehanteerde werkwijze. Rapportering/Grafieken: Hier kunnen we onmogelijk dezelfde mogelijkheden bieden als jarenlange spelers zoals Excel. De belangrijkste mogelijkheden zijn voorzien in de webapplicatie zelf. Indien de gebruiker meer uitgebreide berekeningen of grafieken wil laten uitvoeren, kan er beroep gedaan worden op de exportmogelijkheden van de applicatie. Daarna kan de gebruiker Excel of gelijkaardig programma gebruiken,dit keer op de manier waarvoor het ontwikkeld was.
BIJ VOLGENDE KNELPUNTEN MOET DE WEBAPPLICATIE EEN OPLOSSING BIEDEN: Interactief en foutgevoelig: Doordat er niet langer rechtstreeks op de gegevens wordt gewerkt maar een programma als het ware voor ons de gegevens bewerkt en verwerkt kan dit programma hier ook controles uitvoeren. Zo worden gegevens pas weggeschreven nadat ze door de applicatie zijn goedgekeurd. Hierdoor beperken we de kans op gebruikersfouten en corruptie van de gegevens. Beperkt tot 1 gebruiker: De applicatie kan een oneindig aantal gebruikers toestaan. Doordat er dit maal een instantie is die deze gebruikers kan sturen en de gegevens kan bewaken wordt de integriteit ervan bewaard en zijn de gebruikers zeker de meest recente gegevens beschikbaar te hebben en deze zonder problemen vanuit meerdere clienten kunnen aangepast worden. Niet relationeel en niet gecentraliseerd: Het gebruik van een databank laat ons toe relaties te definiëren tussen onze gegevens. Hierdoor wordt de data niet langer een geheel dankzij de interpretatie van de gebruiker maar kan de applicatie of databank server zelf de relaties en restricties op de gegevens interpreteren. Hierdoor kan verzekerd worden dat de gegevens volledig zijn en op de gewenste manier samenwerken. 17 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Doordat alle recordgegevens in de databank zitten verdwijnt het gevaar dat de gebruiker meerdere fysieke locaties benut om de gegevens te bewaren. De gegevens staan altijd centraal en hierdoor kan beveiliging en het nemen van een reservekopie een pijnloos proces worden. Beperkte hoeveelheden data: In tegenstelling tot rekenbladen staat het gebruik van een databank ons toe zoveel records te registreren als we willen. Er is niet langer een maximum limiet. De databank engine is ook veel beter voorzien op het gebruik van grote aantalen data dus de snelheid zal hier gegarandeerd blijven. Moeilijk uit te breiden: Met de nieuwe werkwijze kan zowel bestaande data makkelijk uitgebreid worden als nieuwe gegevens makkelijk worden toegevoegd. Door het goed ontwerpen van onze databank en formulieren maakt het niet zoveel uit welke gegevens er hier uiteindelijk aan gekoppeld worden. De applicatie zal te allen tijde in staat zijn deze additionele gegevens te verwerken en aan de gebruiker voor te schotelen. In tegenstelling tot rekenbladen blijft de werking van de originele gegevens gegarandeerd en hoeft de gebruiker hier zelf geen controle op uit te voeren.
ANALYSE FUNCTIONELE EISEN • • • • • • • • • • • • • •
De gebruiker kan inloggen met een account uit Mobility. De gebruiker krijgt na het inloggen een polis selectiescherm te zien indien hij meerdere polissen beheert. Het aanmaken, aanpassen en verwijderen van voertuigen door de gebruiker. De gebruiker kan de voertuigen sorteren, filteren en exporteren. De gebruiker kan zelf kosten en kostcategorieën definiëren en hiervoor een standaard prijs opgegeven. De gebruiker kan deze kosten toekennen aan een voertuig. De gebruiker kan een visueel, algemeen overzicht opvragen van alle kosten binnen een vloot, binnen een opgegeven periode. De gebruiker kan een grafiek opvragen die alle kosten binnen het volledige wagenpark in kaart brengt, binnen een opgegeven periode. De gebruiker kan een grafiek opvragen die alle kosten in kaart brengt per voertuig, binnen een opgegeven periode. De gebruiker kan zelf bepalen of het hier gaat over een staaf-, lijn- of taartgrafiek. Het aanmaken, aanpassen en verwijderen van bestuurders door de gebruiker. Het koppelen van bestanden (afbeeldingen, tekstdocumenten) aan de bestuurders. Het registeren van een rit met een voertuig bij een bestuurder. De interface wordt de gebruiker in zijn eigen taal aangeboden.
18 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
NIET-FUNCTIONELE EISEN • • • •
Gebruik de bestaande Microsoft SQL database opgemaakt voor Mobility, deze wordt waar nodig uitgebreid. De web applicatie wordt ontwikkeld in ASP.NET/C# Als programmastructuur word teen 3-tier model gebruikt zoals dit door Microsoft beschreven staat. De applicatie gebruikt een aangereikte stylesheet.
ONTWERP DATABANK In het schema vinden we enkele hoofdtabellen terug. We hebben de “Gebruiker” en “Polis”, in veel gevallen zal dit een 1 op 1 relatie zijn. Slechts bij een beperkt aantal testgebruikers en beheerders, zullen we meerdere polissen aan eenzelfde gebruiker koppelen. De polis wordt als algemene identificatie doorheen de applicatie gebruikt, bijna alle andere gegevens worden dan ook hieraan gekoppeld. Zo zijn de hoofdtabellen “Voertuig” en “Driver” aan een polis gekoppeld.
Om het schema overzichtelijk te houden zijn alle koppeltabellen vervangen door een icoon ( ). In zo’n geval gaat het om eenvoudige koppeltabel die twee tabellen aan elkaar koppelt doormiddel van hun primaire sleutel en de combinatie van beide sleutels als eigen primaire sleutel gaat beschouwen. Het schema beperkt zich te de belangrijkste tabellen en hun belangrijkste waarden .Tabellen die exclusief tot Mobility behoren worden niet weergegeven. De waarden tussen de haakjes zijn het datatype waarin we de gegevens opslaan.
19 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
1
De tabel “PostType” bevat alle door de polishouder gedefinieerde kostencategorieën. Hieraan zijn dan de door de gebruiker gedefinieerde kosten, terug te vinden in de tabel “PostSubType”, gekoppeld. De echte registratie van een kost gebeurt via de tabel “PostSubTypeVoertuig”. Deze registreert een relatie tussen een voertuig en een postsubtype. De tabel “Document” bevat een verwijzing naar de fysieke locatie van het bestand en de nodige info over het document. Via een koppeltabel worden documenten of bestanden aan een bestuurder gekoppeld. De tabellen voertuigtype, antidiefstal en merk bevatten lijsten met de respectievelijke items. Via de tabel “Status” kunnen voertuigen, bestuurders en kosten op niet actief worden gezet zonder dat we ze uit de databank hoeven weg te gooien. Hierbij garanderen we zowel een blijvende werking van de gegevens binnen Mobility als het correct verlopen van opvragen over gegevens in het verleden. Om de applicatie meertalig te kunnen aanbieden aan de gebruikers zijn extra tabellen noodzakelijk.
We hebben een tabel “tr_Language” die alle beschikbare talen en een omschrijven hiervan bevat. Elke gebruiker is standaard gekoppeld aan een taal. Elke label op een pagina of binnen een usercontrol krijgt een vertaling die aan de correcte taalcode wordt gekoppeld. Ieder label wordt aan een pagina of usercontrol van de applicatie gekoppeld via de tabel “tr_Page”. De tabellen “PostType” en “PostSubType” zijn beiden gekoppeld aan een eigen vertalingtabel. Hierin komen alle opgegeven vertalingen van de door de gebruiker gedefinieerde kosten en subkosten.
1
Er is bewust gekozen voor de benaming ‘Post’ in plaats van ‘Kost’. Zo staat de databank open voor verandering en zal er nooit verwarring ontstaan indien de applicatie in een later stadium besluit ook opbrengsten te laten registeren. 20 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
ARCHITECTUUR 3-TIER Een van de niet functionele eisen de het stagebedrijf me oplegde was het gebruik van een Multi-tier clientserver architectuur bij de ontwikkeling van mijn applicatie. Het gaat hier over de meest gebruikte vorm van de Multi-tier architectuur, het 3-tier model.
IMPLEMENTATIE Het basisprincipe van een 3 tier applicatie is bij de meesten wel gekend. We delen onze applicatie op in 3 lagen zodat we te allen tijde een laag kunnen vervangen of aanpassen. We splitsen hierbij de datalaag van de laag met business logica en houden deze op zijn beurt gescheiden van onze presentatielaag. De communicatie tussen de verschillende lagen verloopt lineaire, de twee uiterste lagen kunnen niet rechtstreeks met elkaar communiceren.
De implementatie van deze architectuur verloopt volledig volgens de werkwijze aangerijkt door microsoft en beschreven door Scott Mitchell voor MSDN. Deze implementatie biedt een bijna naadloze samenwerking met de door microsoft standaard aangeboden .NET data-controls wat de verdere ontwikkeling vlot laat verlopen.
21 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Hierbij is het zeer belangrijk de strikte conventies door Microsoft opgegeven rond naamgeving en typeaanduidingen in acht te nemen om van de vlotte samenwerking gebruik te kunnen maken. In bijlage 4 kunt u een voorbeeld van een DAL en de bijpassende BLL klasse terugvinden. Bron: http://msdn.microsoft.com/en-us/library/aa581771%28v=MSDN.10%29.aspx
MEERTALIGE APPLICATIE ALGEMEEN Een van de eisen van het bedrijf is dat mijn prototype de interface meertalig kan aanbieden. Het is vaak zo dat zowel Nederlands-, Frans- als Engelstaligen dezelfde applicatie zullen gebruiken en dus gebruikerafhankelijk een vertaling moet voorzien worden. Er hiervoor mechanismen binnen het ASP.NET voorzien via Globalization en Localization. Hierbij wordt gebruik gemaakt van resource files (xml bestanden) die alle labels en waarden voor een bepaalde taal, cultuur of geografische locatie bevatten. Naast het vertalen kun je via deze weg ook verschillende implementaties voorzien voor de verschillende metrieke stelsels. Binnen het stagebedrijf wordt voor een andere aanpak gekozen. Er is een zelfgeschreven klasse die de vertaling op zich zal nemen. Deze klasse wordt bij alle projecten binnen het bedrijf gebruikt waar een meertalige interface nodig is. De softwareontwikkelaars die later met het prototype zullen verder werken lieten hier duidelijk hun voorkeur merken. Het is dan ook deze methode die in het stageproject werd geïmplementeerd. Bron: http://msdn.microsoft.com/en-us/library/ms228208%28v=VS.100%29.aspx
IMPLEMENTATIE 2
Het eerst wat gebeurt, gebeurt nadat de gebruiker is ingelogd . Alle gebruikersgegevens, waaronder de voorkeurstaal bevinden zich nu in sessievariabelen van onze applicatie. Elke pagina is dankzij zijn master page voorzien van een string dictiornnary en een methode om deze op te vullen. Vanaf dat moment zal telkens een pagina initieel wordt geladen, tijdens de “Load” methode de string dictionary worden opgevuld met de correcte vertalingen. Deze worden opgehaald uit de database aan de hand van de pagina en de aangegeven taal. Tijdens het inladen van ieder label, gaat dit op zijn beurt de correcte waarde opvragen in de string dictionary. Doordat vertalingen aan een pagina gebonden zijn hoeft de applicatie telkens maar een hele kleine lijst van vertalingen in te laden. Bij het gebruik van zelfgemaakte usercontrols wordt hetzelfde principe toegepast. Deze worden dan niet vertaald tijdens het laden van de pagina maar tijdens de “Load” methode van de usercontrol zelf.
2
We kunnen de taal pas bepalen nadat we weten welke gebruiker en welke voorkeurstaal we mee te maken hebben. 22 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Een handigheid die het bedrijf bij het vertalen gebruikt, is het voorzien van standaardvertalingen bij elke label en ervoor te zorgen dat deze opvallen op een pagina. Je kan dit doen door een opvallende prefix of suffix of het gebruik van een opvallend kleur. Labels die nog geen vertaling voor handen hebben worden binnen het stagebedrijf en als gevolg binnen het stageproject aangeduid door een spoorwegteken voor en na de standaardvertaling: bv. #label#. Zo kun je bij het ingeven van de verschillende vertalingen met 1 blik op de pagina meteen zien welke labels reeds van een vertaling voorzien zijn en bij de welke een vertaling ontbreekt.
STRINGDICTIONARY VS DICTIONARY
Binnen het .NET framework is een StringDictionary niet meer dan een hash tabel met de sleutel en waarde sterk getypeerd om strings te zijn. Doordat we hier gebruik maken van een hash tabel kunnen we zeer snel de waarden gaan opvragen aan de hand van hun sleutel. Opgelet bij het opgeven van de sleutel. Vanaf .NET framework 1.1 gebruikt het framework de CultureInfo.Invariant klasse voor het vergelijken van strings. Een probleem die dit met zich kan meebrengen is het verliezen van hoofdletters binnen een key. Sinds de komst van generics wordt het gebruik van een Dictionary<string, string> de voorkeur. Deze klasse impelemteert IEnumerable . Deze interface biedt prima ondersteuning voor het gebruik van User Integrated Queries(LINQ). Binnen het vertalingsysteem hebben we hier geen behoefte aan dus blijven we bij de oude StringDictionary.
23 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Bronnen: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx http://msdn.microsoft.com/en-us/library/system.collections.specialized.stringdictionary.aspx http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
OMZETTEN SESSIEVARIABELEN CLASSIC ASP NAAR ASP.NET ALGEMEEN Rond 1998 kwam Microsoft met een script-engine op de markt die in staat was aan de server zijde dynamisch websites te genereren. Rond 2001 werd een nieuwe technologie de wereld ingestuurd die aansloot op het nieuw uitgebrachte .NET framework onder de naam ASP.NET. Binnen het stagebedrijf werden dynamische webtoepassingen tot voor kort hoofdzakelijk in ASP geschreven. Pas recentelijk worden nieuwe projecten in ASP.NET ontwikkeld. Stap per stap is het stagebedrijf bezig met het omzetten van de oude applicaties naar het nieuwe framework. Hierbij gaat het vaak over complexe applicaties en gebeurt de omzetting module per module. Tijdens deze periode is het dus noodzakelijk zowel de ASP applicatie als de ASP.NET samen aan te bieden en moeten ze in staat zijn informatie uit te wisselen. Hoewel Microsoft de nodige inspanningen heeft geleverd om beide technologieën vlot naast elkaar te laten bestaan, blijft het uitwisselen van sessie objecten tussen beiden een heikel punt. Beiden gebruiken hier een volledig ander mechanisme. Om dit op te lossen kunnen worden in hoofdzaak twee werkwijzen gehanteerd. In beide methoden komt het erop aan de sessieobjecten weg te schrijven en aan te bieden in een formaat die door beide frameworks ondersteunt wordt.
COOKIES EN DATABASE Telkens wanneer de gebruiker een sessie opent, worden alle sessieobjecten opgeslagen in een databank. De gebruiker krijgt een unieke cookie aangereikt waarin de nodige informatie staat om de sessieobjecten in de databank terug te vinden. Wanneer de gebruiker een aanvraag doet bij de webapplicatie, zal deze cookie gebruikt worden om de sessie te identificeren. Nog voor de gevraagde webpagina geladen wordt, worden de sessieobjecten opnieuw geladen uit de databank. Een instantie van een aangepaste sessieklasse staat in voor het uit en inlezen van de sessies.
Het gebruik van een “HybridDictionary” om de sessievariabelen bij te houden in de aangemaakte sessieklasse is aangeraden. Een “HybridDictonary” werkt namelijk optimaal voor zowel een beperkt aantal sessievariabelen 24 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
als een uitgebreide collectie. Zolang de verzameling klein blijft wordt achterliggend een “ListDictionary” gebruikt, wanneer de verzameling groter wordt gebeurt een omzetting naar een hashtabel. Hierdoor wordt in alle omstandigheden de meest efficiënte collectie gebruikt. Bron: http://msdn.microsoft.com/en-us/library/Aa479313
FORMULIER POST De meest eenvoudige en snelle oplossing maakt gebruik van een verborgen formulier en verborgen velden. Bij deze methode is het gebruik van een databank overbodig. Wanneer de gebruiker van de ene applicatie naar de andere overgaat worden alle sessieobjecten “geserialiseerd” en ingevuld op de velden van het formulier. Vervolgens wordt het formulier doorgepost naar de doelapplicatie en worden alle velden hier uitgelezen en ingevuld in het sessieobject. Deze methode vergt minder implementatie dan bovenstaande, maar kan enkel worden toegepast wanneer: •
•
De sessieobjecten van het primaire type zijn (string, integer, boolean,…) Oplossing:Door een eigen serialisatie-object te voorzien kan het mogelijk worden complexe sessieobjecten om te zetten Het om niet gevoelige informatie gaat (de gegevens worden als “plain text” verstuurd) Oplossing:De informatie kan eerst worden gecodeerd en aan de andere zijde gedecodeerd wanneer het om gevoelige data gaat.
IMPLEMENTATIE Gezien het stagebedrijf ook buiten het stageproject gebruik zal maken van een omzetmechanisme is voor de tweede methode gekozen. Aan de hand hiervan is relatief snel een universele oplossing te bouwen. Er zijn geen extra databank voorzieningen nodig. Om de implementatie aan te tonen wordt de situatie gebruikt waarbij de sessieobjecten moeten doorgegeven worden van een klassieke ASP pagina naar een ASP.NET pagina. Bij een verplaatsing van een ASP.NET naar ASP pagina wordt dezelfde methode toegepast. Er wordt telkens gebruik gemaakt van twee omzetpagina’s. De ene in ASP formaat, “ASPtoASPNET.asp”, en dus in staat de ASP sessieobjecten uit te lezen. De andere in ASP.NET, “ASPtoASPNET.aspx”. Wanneer de gebruiker een klassieke ASP applicatie verlaat wordt deze doorverwezen naar “ASPtoASPNET.asp” doorverwezen. Hierbij wordt een querystring meegeven met een verwijzing naar de uiteindelijk doelpagina of applicatie.
25 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
De pagina “ASPtoASPNET.asp” bevat een formulier die na aanvraag van de pagina ingevuld wordt met alle objecten aanwezig in het sessieobject. Vervolgens wordt dit formulier doorgepost naar de pagina “ASPtoASPNET.aspx”. Tijdens het inladen van deze pagina wordt het formulier uitgelezen en alle worden alle waarden in bijhorende ASP.NET sessieobjecten geplaatst. Eens deze taak is afgelopen stuurt de pagina de gebruiker door naar de uiteindelijk doelpagina. Wanneer de gebruiker in een later stadium terugkeert naar de klassieke ASP applicatie kan ervoor geopteerd worden het ASP sessieobject geladen te houden in de script engine. Het valt echter aan te raden het sessieobject leeg te maken wanneer de gebruiker de applicatie verlaat en deze indien nodig later terug op te vullen. Hierbij kunnen we de volledige sessie vernietigen of de sessievariabelen legen. Hiervoor zijn zowel binnen ASP als ASP.NET de methodes “Session.Abandon()” en “Session.Clear()” voorzien. Als bijlage 1, 2 en 3 bij dit document vindt u de code van deze pagina’s terug.
PROGRAMMATIE GEBRUIKTE SOFTWARE Naast onder vermelde software werd sporadisch beroep gedaan op de “Microsoft SQL Manegement Studio 2008” voor het bewerken van de databank en op “Adobe Photoshop CS 3” voor het bewerken van afbeeldingen en iconen.
MICROSOFT VISUAL STUDIO 2008
26 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
Wie .NET zegt, zegt Visual Studio. Tijdens de opleiding aan de hogeschool hebben we behoorlijk wat aandacht aan deze omgeving besteed en het werken hierin voelt dan ook best vertrouwd aan. Het stagebedrijf maakt nog niet zolang gebruik van deze software. Tot enkele maanden terug werden webapplicaties hoofdzakelijk in Classic ASP ontwikkeld. Om dit te realiseren werd beroep gedaan op Adobe producten. Dit gaf mij de kans wat te helpen bij de overstap en enkele basistechnieken aan te leren. Bron: http://msdn.microsoft.com/en-us/vstudio/default.aspx
RESHARPER Tijdens het project heb ik gebruik gemaakt van deze add-in voor Visual Studio. Dit stukje software voorziet enkele extra sneltoetsen en genereert standaard stukken vaak voorkomende code. De tool zorgt ervoor dat je code automatisch geformatteerd wordt volgens zelf opgelegde regels. Wat me persoonlijk het meest aanspreekt in mogelijkheden van deze add-in, staat los van Visual Studio. “Resharper” is namelijk ook beschikbaar voor heel wat andere IDE’s. Hierbij stelt hij je in staat voor alle ondersteunde en op het systeem geïnstalleerde IDE’s globale sneltoetsen te definiëren. Mensen die dus in verschillende omgevingen programmeren kunnen hier heel wat frustratie mee wegwerken. Bron: http://www.jetbrains.com/resharper/
EXPRESSION WEB 3 Een WYSIWYG website editor van Microsoft. Voor het ontwikkelen van ASP.NET pagina’s werd uitsluitend Visual Studio gebruikt. Wanneer het op classic ASP pagina’s aankomt biedt Expression web net dat beetje meer. Intelliscense werkt een stuk scherper als het op klassieke ASP aankomt en de interface leent zich meer tot overzichtelijk in-page coding. Als er aanpassingen aan bestaande ASP pagina’s dienden te gebeuren zocht ik dan ook mijn toevlucht bij deze editor. Bron: http://www.microsoft.com/expression/
GEBRUIKTE TECHNOLOGIEËN Naast het door het bedrijf opgelegd gebruik van ASP.NET/C# en de aangereikte databank was ik volledig vrij in het gebruik van extra technologieën of programmabibliotheken. Hierbij kan het gaan om essentiële bouwstenen van de applicatie. Zo staat de flashcomponent “FusionChartsFree” in voor het genereren van grafieken binnen de applicatie. Bepaalde technologieën worden dan weer gebruikt om de gebruiker een meer dynamische ervaring te kunnen aanbieden binnen de browser. De twee belangrijkste binnen het stageproject waren de implementatie van voorgeprogrammeerde ASP.NET AJAX controls en het gebruik van “FusionCharts Free”.
ASP.NET AJAX AJAX is eigenlijk een bundel van ontwikkelingstechnieken met als doel asynchrone gegevens op te vragen bij de webserver. Hierbij worden technologieën als Javascript en xml, in hoofdzaak het XMLhttpRequest om via de 27 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
client data uit te wisselen tussen client en server, gebruikt. Concreet laat dit je toe van enkel het stuk van je webpagina te vernieuwen die verandering ondergaat. Binnen het ASP.NET framework zijn slechts een beperkt aantal AJAX controls voorzien. Deze controls bevinden zich binnen de System.Web.UI namespace. Daarnaast biedt microsoft via de ASP.NET website een AJAX control toolkit aan. Deze toolkit bevat talrijke AJAX controls die perfect geïntegreerd kunnen worden in het ASP.NET framework en gebruikt kunnen worden binnen Visual Studio. De AJAX controls die aanbod kwamen tijdens de stageperiode worden hieronder toegelicht. Bron: http://www.asp.net/%28S%28fu2l2uzphr2u3u45q2dnez55%29%29/ajax/AjaxControlToolkit/Samples/
SYSTEM.WEB.UI SCRIPTMANAGER ALGEMEEN
De scriptmanager control staat in voor een central beheer van alle AJAX bronnen binnen een pagina. De scriptmanager gaat enkele essentiële taken uitvoeren voor het correct gebruik van de AJAX componenten binnen de pagina. Het gaat hierbij om: •
• • • •
Een script registreren die compatibel is met het gedeeltelijk vernieuwen van een pagina. Hierbij wordt eerst het Microsoft AJAX library script geladen en wordt daarna rekening gehouden met afhankelijkheden van het zelfgeschreven script en de core library. Er wordt duidelijk gemaakt aan de browser of het om “release” of “debug” scripts gaat. Er wordt toegang voorzien tot de Web service methodes vanuit het script door deze Web services te registreren bij de ScriptManager. ASP.NET authenticatie is toegankelijk, deze wordt namelijk ook geregistreerd in de ScriptManager Het registreren van servercontrols die de interfaces IExtenderControl en IScriptControl implementeren bij de ScriptManager om client componenten te voorzien van het correcte script voor hun gedrag.
Via de properties van het ScriptManager object kunnen globale instellingen voor deze taken worden vastgelegd. De ScriptManager biedt ondersteuning aan de AJAX controls standaard voorzien in de System.Web.UI namespace. Dit zijn de “Timer”, “UpdatePanel” en “UpdateProgress controls”. De AJAX controls aangeleverd zijn volledig afhankelijk van een ScriptManager control en zullen een kretieke fout opwerpen wanneer er geen ScriptManager teruggevonden wordt. Bron: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx IMPLEMENTATIE
De implementatie van de ScriptManager binnen een ASP.NET pagina moet gebeuren voor de controls afhankelijk van de ScriptManager worden geladen. Zorg er dus voor dat dit zo vroeg mogelijk op de pagina gebeurt. Er mag ook maximum 1 ScriptManager aanwezig zijn dus het kan aangeraden zijn deze reeds in de MasterPage aan te maken wanneer het gebruik van AJAX zich over meerdere pagina’s spreid. De syntax ziet er als volgt uit:
28 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
//Bevat de locatie van de Authenticatie Service. //Hier kan zowel de locatie als de LoadPropertie van de //ProfileService worden opgegeven. //Aangeven of de gebruikersrollen geregistreerd bij de RoleService //moeten geladen worden en op welke locatie die service zich //bevindt. <Scripts> //Hier kunnen constum scripts worden geregistreerd aan de //hand van ScriptReference tags. <Services> //Hier worden Services geregistreerd aan de hand van //ServiceReference tags.
UPDATEPANEL ALGEMEEN
Het UpdatePanel is misschien wel de meest essentiële aangereikte AJAX control. Dankzij een UpdatePanel is het niet langer nodig altijd synchrone postbacks uit te voeren maar kunnen we enkel het deel van de pagina die moet vernieuwd worden asynchroon renderen. Door dit in stukken renderen van de webpagina kunnen we de gebruiker een veel vloeiendere interface voorschotelen. Het UpdatePanel difinieert een Panel waarbinnen we zo’n partiële pagina opbouw kunnen forceren. Een updatepanel kan de opdracht gegeven worden altijd te worden ververst wanneer zich van binnen de control een postback opdringt. Het is ook mogelijk condities op te geven aan de hand waarvan het panel moet vernieuwd worden, zo kunnen we een vernieuwing afdwingen vanuit een andere control of deel van de webpagina buiten het panel. UpdatePanels kunnen zonder noemenswaardige problemen genesteld worden en er kunnen er zoveel geïntegreerd worden op een pagina als gewenst. Bron: http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx IMPLEMENTATIE
29 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
//Hier komen alle controls die zich in het panel moeten bevinden. //Zowel PostBackTriggers als AsyncPostBackTriggers kunnen hier //worden toegevoegd.
UPDATEPROGRESS ALGEMEEN
Bij het gebruik van een UpdatePanel kunnen we de UpdateProgress control gebruiken om de status van de partiële pagina rendering aan de gebruiker weer te geven. We kunnen zo de gebruiker waarschuwen dat de pagina of een onderdeel bezig is met een bewerking. Tijdens de paritiële pagina rendering wordt de inhoud van de ProgressTemplate aan de gebruiker weergegeven. Dit kan gaan van een tekst met het verzoek even geduld uit te oefenen als een volledig dynamische statusbalk die ons verteld hoever de verwerking staat. De UpdateProgress instantie kan zich zowel binnen het UpdatePanel als erbuiten bevinden en wordt hieraan vast gekoppeld via een associatie met het ID van de UpdatePanel. Bron: http://msdn.microsoft.com/en-us/library/system.web.ui.updateprogress.aspx IMPLEMENTATIE
//Hier komen alle controls die moeten weergegeven worden wanneer de //partiële pagina rendering van de geassocieerde UpdatePanel in //proces is.
AJAX TOOLKIT TOOLKIT SCRIPTMANAGER De ToolkitScriptMananger breid de bestaande ScriptMananger uit met ondersteuning voor alle controls binnen het ASP.NET AJAX Toolkit. Doordat deze controls niet gekend zijn in de standaard ScriptManager wordt vanaf de implementatie van een van de controls van het toolkit het gebruik van de toolkitScriptManager aangeraden. De ToolkitScriptManager biedt ondersteuning voor de reeds aanwezige AJAX controls in het ASP.NET framework. Het gebruik en de implentatie verlopen op dezelfde wijze als bij de klassieke ScriptManager.
30 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
CALENDAREXTENDER ALGEMEEN
Bij de standaard ASP.NET controls is een kalander control voorzien. In tegenstelling tot de .NET kalander control voor desktop applicaties kan deze niet open of dichtklappen. Om overzicht binnen formulieren te bewaren en plaats uit te sparen kan dit handig zijn. De CalandarExtender van het AJAX control Toolkit laat ons toe aan een TextBox aan de client zijde te voorzien van een kalender voor het ingeven van datums. Het is mogelijk deze popup te laten verschijnen wanneer de gebruiker de cursor in het tekstvak plaatst of de popup te laten verschijnen bij het aanklikken van een geassocieerde control. De kalander kan de cultuur gebonden instellingen van de browser gebruiken om de gebruiker een gekende kalender voor te schotelen. De CalendarExtender laat de gebruiker nog steeds toe handmatig een waarde in de TextBox control in te vullen. IMPLEMENTATIE
//Bij de PupopButtonID kunnen we de ID registreren van de control //waarbij bij het aanklikken de kalender tevoorschijn moet komen. />
MODALPOPUPEXTENDER ALGEMEEN
Deze extender laat ons toe van een control een ModalPopup te maken. Voor de gebruiker lijkt het alsof de control een vester op zich is die hij binnen de webpagina kan openen, sluiten, eventueel verplaatsen of de grootte aanpassen. ModalPopups zijn ideaal voor het aanbieden van dialoogvensters aan de gebruiker waarbij de rest van de webpagina wordt afgeschermd. Het grote voordeel is dat de gebruiker fysiek binnen eenzelfde pagina en venster krijgt maar toch de gebruikerservaring krijgt van een extra venster of pagina. Door middel van CSS kunnen stijlen worden gedifinieerd waarmee de rest van de pagina kan worden afgeschermd en de indruk worden gegeven dat het om een echt dialoogvenster gaat. Hoewel we eender welke control als ModalPopup kunnen registreren valt het aan te raden hiervoor een Panel control te gebruiken en vervolgens de gewenste controls in het Panel te nestelen.
31 Eindwerk - Een webapplicatie als alternatief voor spreadsheets
De ModalPopupExtender laat toe client side scripts te registreren voor het OnOK en OnCancel event en het associeren van controls met deze events zodat de gebruiker de Popup kan bevestigen of annuleren via de client zijde. IMPLEMENTATIE
Tijdens de implementatie van de ModalPopupExtender kan het gebeuren dat de control die als Popup moet fungeren bij het inladen van de pagina kort zichbaar is. Om dit te verhinderen kan deze control worden voorzien van de style “display: none”. De ModalPopup zal nu ook bij het inladen van de pagina onzichtbaar blijven. Bij de activering zal deze display stijl overschreven worden. ASP.NET