Ontwikkeling van een applicatie voor conversie van mainframedata voor Business Intelligence-gebruikers
Masterproef voorgedragen tot het behalen van het diploma van Master in de industriële wetenschappen: informatica
Matthieu VAN LANGENHOVE Promotoren: ing. Tim DE PAUW ing. Ken WAUTERS (ArcelorMittal Gent)
Toelating tot bruikleen De auteur geeft de toelating deze masterproef voor consultatie beschikbaar te stellen en delen van de masterproef te kopi¨eren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze masterproef.
The author gives permission to make this master dissertation available for consultation and to copy parts of this master dissertation for personal use. In the case of any other use, the limitations of the copyright have to be respected, in particular with regard to the obligation to state expressly the source when quoting results from this master dissertation.
Matthieu Van Langenhove 6 juni 2013
i
Woord vooraf Een masterproef maak je nooit alleen. Graag zou ik daarom mijn dank betuigen aan iedereen die mij direct of indirect heeft geholpen. Zonder hen zou dit werk nooit tot stand zijn gekomen. Vooreerst wens ik ArcelorMittal Gent te bedanken voor de mogelijkheid om deze masterproef bij hen af te leggen. Het was zeer leerrijk om als ingenieur kennis te maken met het bedrijfsleven. Verder wil ik ook Ken Wauters, mijn externe promotor bij ArcelorMittal Gent, bedanken voor het deskundig advies en zijn supervisie doorheen het hele traject. Ook een gemeend woord van dank voor Tim De Pauw, mijn interne promotor bij de Hogeschool Gent, voor het opvolgen van deze masterproef. Ik wil mijn ouders bedanken voor hun morele en financi¨ele steun tijdens mijn studies. Tot slot wens ik ook iedereen te bedanken die mijn scriptietekst heeft nagelezen, in het bijzonder Laura Daems.
Matthieu Van Langenhove Aalst, 6 juni 2013
ii
Abstract Deze masterproef betreft de optimalisatie en ontwikkeling van een softwareapplicatie voor datatransfer vanuit een IBM-mainframe en dataconversie in een Windows-omgeving. De relationele data worden vanop het mainframe overgebracht naar een Windows-omgeving waar ze geconverteerd worden tot een rapport. Dit rapport kan gaan van een HTML-pagina of Worddocument tot een Excelwerkboek en zelfs een pdf-bestand. De applicatie wordt ontworpen volgens het cascademodel. Er wordt een behoefteanalyse gedaan die de behoeftes en wensen van de eindgebruikers in kaart brengt. Deze behoeftes omzetten naar technische noden gebeurt tijdens de functionele analyse. Voor het genereren van Office-bestandsformaten wordt een externe API gebruikt; er wordt onderzocht welke API het dichtst aansluit bij de noden van de applicatie. Eenmaal de functionele eisen in kaart zijn gebracht en de meest geschikte API bekend is, wordt een architectuur ontworpen. Tot slot wordt dit ge¨ımplementeerd volgens de Scrum-methodologie tot een proof-of-concept. Het ontwikkelde programma kan, aangestuurd vanuit batch of interactief vanop mainframe, automatisch verschillende rapporten genereren. Deze rapporten kunnen ook verstuurd worden per e-mail. Kernwoorden: softwareontwikkeling, .NET, datatransfer, dataconversie, Windows, IBMmainframe, Microsoft Office, rapportgeneratie
iii
Inleiding Bij het laatste masterjaar van een academische opleiding hoort naar goede gewoonte een masterproef of thesis. Ik heb gekozen voor een project bij ArcelorMittal Gent. De masterproef viel binnen het domein van Business Intelligence; een domein dat reeds enkele jaren een grote aantrekkingskracht op mij uitoefent. Toch niet zo vanzelfsprekend, want de IT-sector gaat gepaard met razendsnelle vernieuwingen en Business Intelligence behoort op dit vlak toch niet meer tot de jongste (in tegenstelling tot mobile of cloud computing), al is het zelfs vandaag nog steeds een toonaangevend onderwerp in de wereld van IT. Mijn reis begon in de zomervakantie van 2012, net na het derde en laatste bachelorjaar. Kort nadien, in september, volgde een stage van twee weken. Dit was de offici¨ele aanzet van mijn masterproef. Nu, tien maanden later, kan ik u mijn scriptie voorstellen. Hieronder wordt een blik geworpen op de structuur en inhoud van deze scriptie. Het doel van de masterproef was het optimaliseren en ontwikkelen van een applicatie voor datatransfer en -conversie. De gegevens kunnen opgevraagd worden op mainframe en de gebruiker verwacht een rapport op een Windows-pc of -server. Naar die analogie wordt de applicatie ook Mainframe to PC (MF2PC) genoemd. In deel ´e´en, de projectdefinitie, vindt u meer uitleg over de masterproef. Naast een kadering van ArcelorMittal Gent, wordt ook het project zelf omschreven. Wat is het doel van dit project? Hoe is het project tot stand gekomen en volgens welke methodiek is de applicatie ontwikkeld? In het tweede deel, de analyse, wordt het project uitgebreid geanalyseerd. Dit deel bevat de behoefteanalyse en de functionele analyse. De behoefteanalyse gaat na waarvoor de applicatie dient en wat gebruikers ermee willen doen. Ze wordt gevolgd door de functionele analyse, die dieper ingaat op de technische vereisten van de applicatie. Onder implementatie, het derde deel van deze scriptie, wordt de architectuur en het ontwerp uit de doeken gedaan. Naast een beschrijving van deze twee onderdelen, wordt er ook uitgelegd waarom bepaalde implementatiekeuzes gemaakt werden. Er wordt nog enige aandacht gevestigd op mogelijke uitbreidingen. Met sommige van deze uitbreidingen is reeds rekening gehouden bij de implementatie, andere zijn momenteel niet mogelijk of vallen buiten het bestek van het project. Tot slot volgt niet enkel een conclusie over de applicatie, maar ook een reflectie over het gehele traject dat ik tijdens deze masterproef heb afgelegd. Het was mijn eerste contact met de bedrijfswereld als ingenieur en het heeft mij veel meer bijgebracht dan enkel programmeeren analysevaardigheden. iv
Lijst met afkortingen API Application Programming Interface DB2 Database 2 COM Component Object Model ETL Extraction, Transformation and Load IBM International Business Machines Corporation MF2PC MainFrame to PC MSDN Microsoft Developer Network QMF Query Management Facility TFS Team Foundation Server VB6 Visual Basic 6 VB.NET Visual Basic .NET WSA Workstation Agent
viii
Deel I
Projectdefinitie
1
Hoofdstuk 1
Situering 1.1
Projectomschrijving
Als onderdeel van zijn Business Intelligence-landschap beschikt ArcelorMittal Gent over een datawarehouse. Dit datawarehouse bevat gegevens over klanten, personeel, bestellingen, productiegegevens, etc. Analisten van verschillende afdelingen consulteren deze gegevens dagelijks via een query- en rapporteringstool. Hierna exporteren ze deze gegevens met de Mainframe to PC-tool (MF2PC) naar diverse bestandsformaten (Word, Excel, HTML, pdf, csv, . . . ). Dit gebeurt zowel interactief als geautomatiseerd. De huidige MF2PC-tool steunt voor de conversie op verouderde technologie¨en. Zo maakt de tool nog steeds gebruik van Microsoft Office Automation, en draait hij daarom op de voorgrondsessie van een server. De tool is geschreven in VB6, een programmeertaal uit het pre-.NET-tijdperk. Er wordt nog gebruikgemaakt van een assembler-component. Deze dient verwijderd te worden aangezien assembler-programmeurs schaars zijn. Dergelijke verouderde technologie¨en bemoeilijken verdere uitbreidingen en staan evoluties in de weg. Zo zijn er onder andere compatibiliteitsproblemen met Office 2007. Er is ook nood aan uitbreidingen, bv. ondersteuning van het pdf- en XML-formaat. Deze masterproef is gericht op het onderzoeken, optimaliseren en ontwikkelen van een nieuwe transfer- en conversietool (genaamd MF2PC ) voor relationele data tussen de centrale computer (mainframe) en het Windowsplatform. Er wordt onderzocht welke commerci¨ele (of open-source) API kan helpen voor het cre¨eren en aanpassen van pdf-, XML-, Word 2007- en Excel 2007-bestanden vanuit het .NET-framework en dit zonder Microsoft Office Automation. De productevaluatie gebeurt aan de hand van diverse criteria. De noden van de eindgebruikers worden duidelijk in kaart gebracht en beschreven. Dit gebeurt door middel van een gebruikersenquˆete en door persoonlijke gesprekken met de verschillende key-users. Deze resultaten bepalen de vereisten en functionaliteiten van de nieuwe MF2PCtool. Er wordt gestreefd naar een MF2PC-tool die zoveel mogelijk de huidige functionaliteiten behoudt, evenals enkele extra opties toevoegt. Enkele mogelijkheden van de huidige tool worden niet overgenomen omdat ze niet meer gebruikt worden of zeer verouderd zijn.
2
HOOFDSTUK 1. SITUERING
3
Nieuwe methodes en technieken worden ge¨evalueerd en op basis van voorgaand onderzoek en de reeds opgebouwde ervaring inzake intern ArcelorMittal Gent, wordt een analyse en architectuur van de toepassing uitgewerkt. De nieuwe MF2PC wordt from scratch opgebouwd omdat niet alle problemen kunnen worden weggewerkt door de huidige tool uit te breiden. Tevens is er nood aan een technologie-update. Zo dient de VB6-codebase ge¨ upgraded te worden naar .NET (C#). Verder dient het zwaartepunt van de tool te verschuiven van mainframe naar Windows-zijde en dient ook de assemblercomponent weggewerkt te worden. De huidige lay-out van de rapporten blijft wel strikt behouden. Eveneens wordt gekeken naar een meer rapportgerichte oplossing die toelaat dat de eindgebruiker de gewenste layout specifieert en er automatisch printklare documenten worden gegenereerd. Rechtstreeks afdrukken of een e-mail van gegenereerde rapporten opmaken, behoort ook tot de verwachte functies. Aan de hand van deze analyse en architectuur wordt een prototype ontwikkeld dat de eindgebruiker toelaat op een gebruiksvriendelijke, vlotte en betrouwbare manier de opgevraagde gegevens te exporteren naar de pc-werkomgeving (MS Office, HTML, XML, pdf, csv . . . ). De uitgewerkte oplossing wordt duidelijk gedocumenteerd. Dit prototype en de documentatie moeten de uiteindelijke implementatie ondersteunen. Deze implementatie behoort niet tot de masterproef.
1.2
Ontwikkelingsmethode
Zoals eerder aangehaald ontstonden er veel tekortkomingen in de loop der tijd. De nieuwe applicatie wordt volledig vanaf nul opgebouwd om de problemen uit het verleden niet verder mee te slepen. Het programma wordt ook herschreven in een recentere programmeertaal. Er wordt getracht de aanpassingen voor de gebruikers te minimaliseren uit economisch perspectief. Aanpassing en educatie vragen tijd. Benjamin Franklin stelde ook al in 1748: “Time is money” [11]. Dit project is echter geen “porting” van de code. De functionaliteit en output blijven grotendeels dezelfde, maar onder de motorkap wordt MF2PC volledig veranderd en vernieuwd. Het proof-of-concept wordt ontworpen volgens het cascade- of watervalmodel (zie figuur 1.1). Het cascademodel bestaat uit vijf opeenvolgende fases, waarbij een fase eerst volledig dient afgewerkt te worden alvorens naar de volgende over te gaan. [12] Allereerst is er de behoefteanalyse. Vervolgens wordt de applicatie ontworpen en ge¨ımplementeerd. Als voorlaatste fase wordt de applicatie geverifieerd en in gebruik genomen. Tot slot moet de applicatie worden onderhouden en beheerd.
HOOFDSTUK 1. SITUERING
4
Figuur 1.1: Cascademodel bij softwareontwikkeling
Dit cascademodel sluit nauw aan bij de opzet van deze masterproef, waar eerst een literatuurstudie werd aanbevolen om nadien in de tweede helft over te gaan op de effectieve implementatie. De laatste stap zal echter niet aanwezig zijn in de masterproef omdat er slechts een prototype wordt ontwikkeld. De implementatie gebeurt volgens de Scrum-methodologie. Scrum is een framework voor softwareimplementatie. De implementatie van MF2PC verloopt in drie Sprints; dit zijn iteraties die ongeveer ´e´en maand duren. Elke Sprint start met een planning van wat erin zal worden verwezenlijkt. Nadien wordt bekeken hoe dit gedaan kan worden en achteraf volgt er een beoordeling die het verrichte werk vergelijkt met het vooropgestelde doel. Scrum steunt hoofdzakelijk op communicatie en samenwerking. Aangezien dit project wordt uitgevoerd door ´e´en persoon is de communicatie en samenwerking zeer beperkt. De Product Backlog geeft een oplijsting van de mogelijke features van het programma (te vinden op pagina 19). [13]
1.3
ArcelorMittal
ArcelorMittal, ontstaan uit de fusie van Arcelor en Mittal Steel in 2006, is de grootste staalgroep ter wereld. Het bedrijf stelt een kwart miljoen werknemers te werk in 27 landen en produceert jaarlijks 130 miljoen ton ruwstaal. ArcelorMittal beperkt zich echter niet alleen tot de productie van staal, maar is daarnaast ook actief in de mijnindustrie. ArcelorMittal Gent, het vroegere Sidmar, is een ge¨ıntegreerd staalbedrijf aan het kanaal GentTerneuzen. Het herbergt elke stap van het productieproces en laat deze naadloos op elkaar aansluiten. Gecombineerd met een uitstekende ligging vormt dit de grootste troef.
HOOFDSTUK 1. SITUERING
5
ArcelorMittal Gent heeft een lange geschiedenis achter de rug. Rond 1930 kocht het Luxemburgse staalconcern Arbed een bouwgrond van 211 hectare op de rechteroever van het kanaal Gent-Terneuzen. Het idee was om hier een maritiem staalbedrijf op te richten, maar dit plan werd gedwarsboomd door de depressie van de jaren ’30 en de tweede wereldoorlog. Uiteindelijk werd in 1962 de nv “Sid´erurgie Maritime”, kortweg Sidmar, opgericht. Door de overname van het Spaanse Aceralia in 1992 groeide de Arbed Groep uit tot het derde grootste staalbedrijf ter wereld. In 2002 ontstond door de fusie van Arbed-Aceralia en het Franse Unisor het bedrijf Arcelor en werd Sidmar hierin opgenomen. De vestiging produceert jaarlijks 5 miljoen ton vlakke staalplaat, voornamelijk voor de automobielsector en de industrie (o.a. witgoed). ArcelorMittal is ook ´e´en van de grootste werkgevers uit de regio, met meer dan 5000 werknemers. De kennis en inzet van de medewerkers spelen een onmiskenbare rol om onder andere de veiligheid, kwaliteit, productiviteit en innovativiteit verder te verhogen.
1.4
MF2PC
ArcelorMittal Gent is meer dan een staalproducent. Dagelijks worden er duizenden rapporten automatisch gegenereerd over klanten, productiegegevens, leveringen, bestellingen, etc. Al deze gegevens worden opgeslagen in een datawarehouse. Dit datawarehouse bevindt zich op de centrale computer, een IBM-mainframe, waarop het z/OS -besturingssysteem draait. Het mainframe is beschikbaar via ISPF, een grafische shell, en via query’s in DB2 QMF (Database 2 Query Management Facility) kan data opgevraagd en ge¨exporteerd worden. Om de connectie tussen een .NET-programma en de QMFexportcommando’s te leggen, wordt er gebruikgemaakt van een component in REXX. REXX is een interpretertaal speciaal ontworpen door IBM voor gebruik op een mainframe. Figuur 1.2 op pagina 6 toont een voorbeeldverloop van de MF2PC-tool. Data in QMF worden via de MF2PC-interface ge¨exporteerd door middel van de MF2PC-mainframecomponent. Dit levert een mainframebestand op met de ge¨exporteerde data in een specifiek formaat. Deze formaten komen later nog aan bod. Hierna wordt dit bestand getransfereerd onder initiatief en controle van de MF2PC-mainframecomponent vanop het mainframe naar de pc van de eindgebruiker of naar de MF2PC-applicatieserver. Op deze machine verwerkt de MF2PCworkstationcomponent of de MF2PC-servercomponent het bestand en cre¨eert hij uiteindelijk een Excel- of Wordbestand.
HOOFDSTUK 1. SITUERING
Figuur 1.2: Globale werking van de MF2PC-applicatie
6
HOOFDSTUK 1. SITUERING
1.5
7
QMF
DB2 QMF is een query- en rapporteringstool op het mainframe. Bij ArcelorMittal Gent wordt gebruikgemaakt van QMF for TSO (mainframe interface). Er bestaat ook nog QMF for CICS (mainframe), QMF for WebSphere (webinterface) en QMF for Workstation (bv. Windows). QMF for TSO, verder QMF genoemd, wordt vaak gebruikt voor: • ad hoc querying, • (geautomatiseerde) rapportering en • (geautomatiseerde) dataverwerking via ETL. Extraction, Transformation and Load (ETL) wordt gebruikt voor dataconversie en -uitwisseling tussen twee systemen. Met een query haalt QMF de gevraagde data op uit de databank (zie figuur 1.3). De lay-out van deze data kan worden bewerkt via het form om zo een rapport, webpagina of grafiek te cre¨eren.
Figuur 1.3: Ophalen en formatteren van data in QMF [2]
HOOFDSTUK 1. SITUERING
8
Figuur 1.4: Typische run in QMF
Tijdens een QMF-sessie worden volgende tijdelijke geheugenzones gebruikt: query, data en form. Deze tijdelijke geheugenzones bestaan enkel tijdens een QMF-sessie en gaan verloren als QMF verlaten wordt. Ze kunnen elk maar ´e´en object bevatten. Die objecten kunnen worden bewaard in de database, en bewaarde objecten kunnen worden teruggekopieerd in de tijdelijke geheugenzones. Een query wordt ingetikt en dan gerund (zie figuur 1.4). Dit runnen haalt de gegevens op uit de database en die worden in de data-zone geplaatst. Hierop cre¨eert QMF een default form en dan wordt het rapport op het scherm geprojecteerd.
Deel II
Analyse
9
Hoofdstuk 2
Behoefteanalyse Een requirement is een behoefte of vereiste waaraan de softwareapplicatie moet voldoen: van de functionaliteit van de applicatie tot de taal waarin het programma is geschreven. Het bepalen van deze requirements wordt de behoefteanalyse genoemd, maar is in de IT-wereld beter gekend onder zijn Engelse benaming requirements analysis. De behoefteanalyse wordt als een essentieel onderdeel van het softwareontwikkelingsproces beschouwd. Hierbij is het van groot belang de stakeholders correct te defini¨eren en naar hun eisen te luisteren. De behoefteanalyse bestaat uit drie fasen. Eerst worden requirements bepaald door met klanten en gebruikers te communiceren om te bepalen wat hun behoeften en vereisten zijn. Dit gebeurt tijdens de requirements elicitation, namelijk de fase waarin de vereisten worden ontlokt. Vervolgens worden alle requirements geanalyseerd op tegenstrijdigheden en onvolledigheden. Tijdens de requirements analysis worden de onduidelijkheden weggewerkt en worden sommige requirements nog verder aangevuld of gespecificeerd. Tot slot volgt de requirements validation, waarbij de verschillende requirements gevalideerd en uitvoerig gedocumenteerd worden. [14]
2.1
Requirements detecteren
Normaalgezien worden alle behoeftes en vereisten vanaf nul bepaald. Aangezien er echter al een MF2PC-applicatie bestaat, is het gemakkelijker om hierop voort te bouwen en te bepalen welke functionaliteit moet worden aangepast, verwijderd of bijgevoegd.
2.1.1
Enquˆ ete
Het gebruik van de huidige MF2PC werd tijdelijk gemonitord om alle stakeholders van MF2PC te ontdekken. De stakeholders evalueerden de huidige MF2PC-applicatie via een enquˆete. Hoe wordt MF2PC ervaren? Waarvoor wordt deze het vaakst gebruikt? Welke nieuwe features dragen interesse? De enquˆete bevindt zich op de bijgevoegde cd-rom. Appendix A geeft meer informatie omtrent de inhoud van de cd-rom.
10
HOOFDSTUK 2. BEHOEFTEANALYSE
2.1.2
11
Gebruikersprofielen
De gebruikers van MF2PC hebben verschillende profielen en kunnen worden onderverdeeld in drie groepen. Er zijn gewone gebruikers (users), veelgebruikers (power users) en tot slot ook beheerders (administrators of admins). users De eindgebruikers gebruiken MF2PC interactief: ze klikken op een knop. Ze maken enkel gebruik van de basisinterface van MF2PC (zie figuur 2.1). power users De power users gebruiken MF2PC op twee verschillende manieren. Enerzijds is er het interactief gebruik via een uitgebreidere interface (zie figuur 2.2), anderzijds zijn er geautomatiseerde verwerkingen die via batchjobs worden uitgevoerd. Hierbij komt MF2PC volledig tot zijn recht met al zijn functionaliteit. Vaak worden er door de gebruikers procedures geschreven om de verwerking automatisch te laten verlopen. admins Een admin is verantwoordelijk voor de MF2PC-omgeving en het aanspreekpunt bij problemen of bugs. De admin kent de MF2PC-toepassing en -omgeving integraal, zowel aan mainframe- als aan Windows-zijde.
Figuur 2.1: MF2PC: basispanel
Uit de enquˆete blijkt dat elke gebruiker het basispanel (zie figuur 2.1) gebruikt. Dit gebeurt meerdere keren per dag en vooral voor export van numerieke data naar Excel. In mindere mate wordt er ook ge¨exporteerd naar Word en HTML.
HOOFDSTUK 2. BEHOEFTEANALYSE
12
Het uitgebreide panel (zie figuur 2.2) wordt gebruikt door een derde van de ondervraagden op dagelijkse basis. Voornaamste export betreft QMF-data of een QMF-rapport naar een Excelbestand of tekst. Er wordt ook naar Word en HTML ge¨exporteerd, en zelfs naar tabellen in Access, maar niet zo frequent. Er worden nog steeds rechtstreeks QMF-rapporten afgedrukt en bestaande bestanden worden interactief opgestart na een export.
Figuur 2.2: MF2PC: uitgebreid panel
De helft van de gebruikers heeft ook batchjobs die MF2PC in niet-interactieve modus oproepen. Hiervan worden er honderden per dag gestart. Evenveel gebruikers maken gebruik van QMF-mail. QMF-mail is een applicatie om de gegenereerde bestanden automatisch te kunnen versturen via e-mail. Deze applicatie wordt integraal ge¨ıntegreerd in de nieuwe MF2PC-tool.
HOOFDSTUK 2. BEHOEFTEANALYSE
2.1.3
13
Soorten gebruik
Het gebruik van de huidige MF2PC-tool kan op verschillende manieren worden onderverdeeld. Zo is er een onderscheid te maken tussen uitvoering op een pc enerzijds, of op een applicatieserver anderzijds. Ook kan een onderscheid worden gemaakt tussen de aansturing vanuit mainframe. Dit kan interactief of via batchverwerking. Dit levert volgende mogelijkheden op: • Uitvoering op pc wordt steeds interactief ge¨ınitieerd vanop de MF2PC-panels of vanuit een QMF-procedure. Uitvoering op pc kan niet worden gestart vanuit een batchjob. • Uitvoering op een MF2PC-applicatieserver kan naast interactieve aansturing via een panel of procedure ook vanuit een geplande batchverwerking worden aangestuurd. • Vele MF2PC-verwerkingen gebeuren vanuit een geplande batchverwerking.
2.1.4
Gebruikersinterface
De applicatie leent zich niet tot een uitgebreide grafische interface doordat de export gebeurt vanuit QMF. De opzet van de gebruikersinterface blijft behouden, enkel een paar details veranderen. Zo wordt de omschakeling voor de gebruikers vergemakkelijkt.
2.1.5
Systeemvereisten
Technologie In ArcelorMittal Gent wordt voor het Windows-platform geprogrammeerd in .NET. De ontwikkelaar is vrij in zijn keuze tussen C# en VB.NET, al maakt C# de laatste jaren een opmars. Er zijn ook nog veel applicaties in VB6 geschreven, zoals de huidige MF2PC-applicatie. Er wordt bij dit project geopteerd voor C# in .NET, aangezien de applicatie volledig herschreven wordt. Componenten Office Automation heeft een instantie van MS Office nodig. De enige manier om Office te draaien op een server is in de beheerderssessie. De performantie laat te wensen over en ook architecturaal is dit geen correcte oplossing. Er wordt overgegaan op een volwaardige servercomponent die Office-less bestanden kan genereren. Dit betekent dat Office Automation geschrapt wordt en MF2PC niet meer in de beheerderssessie zal draaien.
HOOFDSTUK 2. BEHOEFTEANALYSE
2.1.6
14
Hardware
Op een applicatieserver draait ´e´en instantie van de applicatie. Deze moet in staat zijn om alle aanvragen te verwerken. In totaal zullen er vijf applicatieservers beschikbaar zijn. De applicatieservers bezitten 3GB RAM en draaien Windows Server 2003. Er is reeds een component aanwezig die het werk evenwichtig verdeelt over de aanwezige servers.
2.1.7
Betrouwbaarheid
Momenteel blijven batchjobs op het mainframe wachten tijdens het cre¨eren van rapporten. Dit leidt vaak tot fouten. Hiervoor wenst men een extra veiligheid te voorzien. Tevens moet de betrouwbaarheid verbeterd worden zodat procedures zelden nog vastlopen.
2.1.8
Veiligheid
De huidige applicatie scoort niet hoog op vlak van beveiliging. Dit komt doordat deze in een beheerderssessie draait en dus met beheerdersrechten. Dit druist in tegen de algemene beveiligingsprincipes op pc’s en servers. De nieuwe MF2PC scoort beter op vlak van beveiliging doordat de applicatie niet langer in de beheerderssessie zal draaien, maar onder een andere gebruiker met specifieke rechten.
2.1.9
Software
Kwaliteit De applicatie moet zeer gebruiksvriendelijk en idiot proof zijn. Foutmeldingen moeten een duidelijke oorzaak geven en het mogelijk maken om deze fout makkelijk op te sporen en indien nodig zelfs na te bootsen. Dit wordt nog verbeterd door gebruik te maken van extensieve logging. Naamgeving Er is geen standaard bij ArcelorMittal Gent wat betreft de naamgeving en terminologie. De code wordt gedocumenteerd in het Engels zodat er geen taalbeperking is ten opzichte van andere werknemers van ArcelorMittal in andere vestigingen en landen. Variabelen en methoden worden om diezelfde reden ook in het Engels gekozen. Ze volgen de PascalCasemethode, aangezien die algemeen aanvaard is in het .NET-milieu. Microsoft gebruikt zelf ook PascalCasing. Bij PascalCasing bestaat de naam van de variabele of methode uit een concatenatie van woorden met een hoofdletter. [15] Bij camelCase echter is de eerste letter een kleine letter. In C-stijl worden de woorden aaneengeschakeld door een underscore.
Office-bestandstypes MF2PC is compatibel met Office-versies tot 2003, maar kan geen Office 2007-bestanden genereren. Elke pc bij ArcelorMittal Gent beschikt over de Office 2007-suite. Samen met de Office 2007-suite introduceerde Microsoft ook de Office Open XML-bestandsformaten (OOXML). OOXML (zoals .docx of .xlsx) is een gezipt, XML-gebaseerd bestandsformaat. [16] Office 2007 is achterwaarts compatibel, maar doordat het bestand geen OOXML-indeling heeft, geeft dit een foutmelding. Dit is niet praktisch en ook niet gewenst. Een ander nadeel is dat Excel 2003 beperkt is tot 256 kolommen; hierover volgt later meer. Lengte van de kolomnamen Kolomnamen langer dan 18 karakters kunnen niet ge¨exporteerd worden. Dit is een historisch fenomeen doordat DB2 geen kolomnaam toeliet die langer dan 18 karakters is. Het is echter mogelijk om de naam van een kolom te vervangen door een langere naam (maximaal 30 karakters). Deze moeten ook correct ge¨exporteerd worden. Aantal kolommen in Excel De export naar Excel is beperkt tot 256 kolommen. De reden hiervoor is te zoeken bij Excel zelf, meer bepaald tot versie 2003. Deze versie laat slechts 256 kolommen toe. Om problemen bij het exporteren te voorkomen, werd deze limiet van maximaal 256 kolommen in de MF2PC-applicatie opgenomen. Dit vormde een probleem, aangezien bepaalde tabellen op het mainframe uit meer dan 500 kolommen bestaan. Vanaf Excel 2007 vormt dit geen probleem meer. Enkel de beperking dient uit de applicatie verwijderd te worden. Dataformaat in Excel Niet alle gegevens behouden hun formaat bij het exporteren naar Excel. Zo worden bv. soms getallen als tekst getoond. Dit probleem manifesteert zich ook bij een datum. Deze wordt ook als tekst getoond in plaats van als een datumtype.
HOOFDSTUK 2. BEHOEFTEANALYSE
2.2
16
Functionele requirements
De applicatie heeft bepaalde taken te vervullen. Aangezien er voor de gebruikers weinig tot niets mag veranderen, blijven de taken van de applicatie grotendeels gelijk. Deze taken worden visueel voorgesteld in een takendiagram (zie figuur 2.3). Een takendiagram of use case diagram geeft de functionaliteit van de applicatie weer, bekeken vanuit het standpunt van de gebruikers.
Figuur 2.3: Use case diagram: MF2PC
2.2.1
Conversie
Het hoofddoel van MF2PC is gegevens van het mainframe naar Windows te transfereren en deze te converteren naar een gekend bestandstype. Er zijn hierbij twee soorten bestandsformaten. Enerzijds zijn er de invoerformaten, anderzijds zijn er de uitvoerbestanden. Invoerformaten De invoermogelijkheden van MF2PC blijven behouden. Volgende objecten in QMF kunnen als invoer dienen voor MF2PC: • DB2-tabel / QMF-data • QMF-rapport (enkel data of volledig) • QMF-query • QMF-procedure • Mainframebestand
HOOFDSTUK 2. BEHOEFTEANALYSE
17
De exporteerbare QMF-objecten worden hier kort verduidelijkt. DB2-tabel/QMF-data Data kunnen geselecteerd worden door een query te runnen of door deze te importeren van buiten QMF. Een DB2-tabel kan als data beschouwd worden. Het enige verschil is dat data zich in de tijdelijke geheugenzone bevindt, maar dit heeft geen invloed bij het exporteren. Figuur 2.4 toont een voorbeeld van een DB2-tabel of QMF-data. ID NAME DEPT JOB YEARS SALARY COMM −−−−−− −−−−−−−−− −−−−−− −−−−− −−−−−− −−−−−−−−−− −−−−−−−−−− 10 SANDERS 20 MGR 7 18357.50 − 20 PERNAL 20 SALES 8 18171.25 612.45 30 MARENGHI 38 MGR 5 17506.70 − 40 O’ BRIEN 38 SALES 6 18006.00 846.55 50 HANES 15 MGR 10 20659.80 − 60 QUIGLEY 38 SALES − 16808.30 650.25 70 ROTHMAN 15 SALES 7 16502.80 1152.00 80 JAMES 20 CLERK − 13504.60 128.20 90 KOONITZ 42 SALES 6 18001.75 1386.70 100 PLOTZ 42 MGR 7 18352.80 −
Figuur 2.4: DB2-tabel/QMF-data: voorbeeld
QMF-rapport Een rapport is een combinatie van data en form. Een rapport heeft geen tijdelijke geheugenzone, in tegenstelling tot de data en het form waaruit het is opgebouwd. Bij het runnen van een query cre¨eert QMF een default form en dan wordt het rapport op het scherm geprojecteerd. De form wordt gebruikt om een formattering aan de data te geven. Een simpel voorbeeld is een andere volgorde aan de kolommen te geven, maar de mogelijkheden zijn veel uitgebreider dan dit. QSTAFF DUMMY TABLE HEADER
DEPT JOB AVERAGE SALA −−−−−− −−−−− −−−−−−−−−−−− 10 MGR $21151 . 1 5 −−−−−−−−−−−− ∗ $21151 . 1 5 15
QMF-query Een query geeft aan welke gegevens uit de database moeten worden opgehaald en wordt in haar tijdelijke geheugenzone geplaatst. SELECT ∗ FROM Q. STAFF WHERE ID = 10
Figuur 2.6: QMF-query: voorbeeld
QMF-procedure Een procedure is een groep van QMF-commando’s die kunnen uitgevoerd worden in ´e´en enkel run-commando. Proc is de afkorting van procedure in QMF. Er zijn twee soorten procedures. De native-procedures laten enkel lineaire tekst toe. Een REXX -procedure laat condities toe. Een voorbeeld van een REXX-procedure is te zien in figuur 2.7. SET GLOBAL(BEDRIJF=’ A r c e l o r M i t t a l Gent ’ ERASE MIJNTABEL RUN MIJNQUERY (FORM=MIJNFORM &&DAYS=1 RUN S .REPORT TO NOTES(ARG=(DAGELIJKS RAPPORT SAVE DATA AS MIJNTABEL RUN S . CREATE INDEX( + &&TBNAME=MIJNTABEL, + &&UNIQUE=NO, + &&KOLS=NAME+JOB+DEPT
Figuur 2.7: QMF-procedure: voorbeeld
Uitvoerformaten De bestandsformaten die gecre¨eerd kunnen worden, hebben nood aan een update. Sommige bestandsformaten krijgen een update naar een nieuwe versie. Andere oudere formaten worden verwijderd aangezien deze toch niet meer gebruikt worden. Tot slot worden er nog enkele nieuwe formaten toegevoegd. Het wordt mogelijk om volgende bestanden te genereren: • Word 2007 • Excel 2007 • Text • CSV • XML • HTML • PDF • Grafiek in Excel
HOOFDSTUK 2. BEHOEFTEANALYSE
2.2.2
19
Naverwerking
E-mail Gebruikers wensen een notificatie-e-mail te ontvangen nadat MF2PC een batchverwerking heeft uitgevoerd. Deze e-mail bevat informatie over de geconverteerde bestanden, hun locaties en eventuele fouten die zich hebben voorgedaan. Een andere optie is dat het gecre¨eerde document rechtstreeks wordt verstuurd per e-mail als bijlage. Automatisch openen tijdens verwerking op pc De gebruiker kan aangeven of het bestand automatisch wordt geopend op zijn pc nadat MF2PC het cre¨eerde. Dit wordt vaak gebruikt om zo het document nog verder te bewerken via een macro, die automatisch wordt gestart bij het openen van het document. Printer De gewenste gegevens kunnen rechtstreeks worden doorgestuurd naar een printer en worden afgedrukt.
2.3
Requirements valideren
Alle requirements zijn vastgesteld, onderzocht en goedgekeurd. Nu dienen ze ook een prioriteit te krijgen en moet worden vastgesteld of deze in het alfa- of b`eta-prototype worden vervat. Hierna volgt een oplijsting van de requirements met hun prioriteit en bijhorend prototype (zie tabel 2.2, 2.3, 2.4 en 2.5).
HOOFDSTUK 2. BEHOEFTEANALYSE
Tabel 2.2: Exporteren van gegevens
Tabel 2.3: Functies voor Word
20
HOOFDSTUK 2. BEHOEFTEANALYSE
Tabel 2.4: Functies voor Excel
21
HOOFDSTUK 2. BEHOEFTEANALYSE
Tabel 2.5: Functies voor naverwerking
22
Hoofdstuk 3
Functionele analyse De functionele analyse is het resultaat van een technische studie van de functionele requirements uit de behoefteanalyse. De vertaling van deze requirements naar een technische beschrijving verduidelijkt wat technisch nodig is om de applicatie vlot te ontwikkelen. Het MF2PC-proces verloopt in drie stappen: 1. De gegevens worden vanuit QMF ge¨exporteerd naar een bestand op het mainframe. 2. Dit bestand wordt gekopieerd naar een Windowsomgeving. 3. Aan Windowszijde wordt het bestand bewerkt tot het doelformaat. De volgende secties verduidelijken deze drie stappen.
3.1
Gegevensextractie uit QMF
De werking van QMF werd besproken in de situering. De verschillende QMF-objecten werden in de behoefteanalyse uitgelegd. Die QMF-objecten kunnen ge¨exporteerd worden naar een bestand op het mainframe. Hieronder wordt verduidelijkt hoe dit in zijn werk gaat.
3.1.1
QMF-exportcommando
QMF-objecten worden via het exportcommando ge¨exporteerd naar een bestand op het mainframe in het opgegeven exportformaat. Export table/data EXPORT
of EXPORT exporteert een tabel of data. Het exportformaat kan QMF, IXF of XML zijn.
23
HOOFDSTUK 3. FUNCTIONELE ANALYSE
24
Export query/proc Zowel een query als een procedure wordt als tekst ge¨exporteerd. Export report EXPORT schrijft de volledige tekst van het geformatteerde rapport weg. Het exportformaat kan general format (met bijhorende metadata over de inhoud) of HTML-formaat (zonder metadata) zijn. Bij het exporteren van een rapport gaan eventuele pagebreaks verloren. Print report Bij PRINT schrijft QMF de volledige tekst van het geformatteerde rapport weg, inclusief paginaopmaak. In tegenstelling tot EXPORT behoudt dit commando wel de pagebreaks van het rapport. Dit wordt gebruikt om afdrukklare rapporten in Word te maken. Het commando verwacht naast de naam van de printer of opslagplaats ook de breedte (aantal karakters per lijn) en de diepte (aantal lijnen per pagina) van het rapport. Het is ook mogelijk andere QMF-objecten te printen, maar dit wordt niet gebruikt.
3.1.2
QMF-exportformaten
QMF maakt een onderscheid in het exporteren van data of tabellen en het exporteren van een rapport. Een tabel of data exporteren levert een doelbestand op in het QMF-, IXF- of XML-formaat. Een rapport exporteren kan in het algemeen formaat (general format) of in HTML-formaat. QMF-formaat Het QMF-formaat bestaat uit twee delen: headerrecords en datarecords. Headerrecords beschrijven de data in de records, de datarecords bevatten de eigenlijke data. Het QMF-formaat is een gesloten formaat. Het hoofddoel is om deze ge¨exporteerde gegevens nadien opnieuw in QMF te importeren. XML-formaat Bij export in XML-formaat is het bestand beperkt tot 32K karakters (vanuit QMF). QMF gebruikt de z/OS XML parse services en z/OS Unicode conversion services bij het exporteren naar XML-formaat. Deze services moeten dan ook geconfigureerd en actief zijn op het mainframe. De data zijn ge¨encodeerd in UTF-8. Export naar XML-formaat is niet interessant doordat de grootte van het exportbestand gelimiteerd is. De beschikbaarheid van de vereiste services is eveneens geen zekerheid.
HOOFDSTUK 3. FUNCTIONELE ANALYSE
25
Het XML-bestand ziet er als volgt uit: <MetaData> <S o u r c e D e s c r i p t i o n /> 7 . . . D e f i n i t i o n s f o r each column go h e r e . . . . Data f o r each row g o e s h e r e . <E x t e n s i o n s />
Figuur 3.1: XML-formaat [3]
IXF-formaat IXF staat voor Integrated Exchange Format. Het IXF-formaat bestaat uit verschillende records (zie figuur 3.2). De output is binair of karaktergebaseerd.
Figuur 3.2: IXF-formaat [3]
H-record Het headerrecord bevat 42 bytes aan algemene informatie zoals de IXF-versie, datum en tijd, etc. T-record Het tablerecord bevat tabel en data informatie, o.a. de datasource, het dataformaat (binair of karaktergebaseerd) en het aantal kolommen. C-record Het columnrecord beschrijft de karakteristieken van een kolom. Er is ´e´en record per kolom. D-record Het datarecord bevat de data van ´e´en rij in de tabel. Figuur 3.3 toont de DB2-tabel uit figuur 2.4 op pagina 17 ge¨exporteerd in IXF-formaat.
HOOFDSTUK 3. FUNCTIONELE ANALYSE HIXF0000QMF T18 C02ID C04NAME C04DEPT C03JOB C05YEARS C06SALARY C04COMM D 00010 D 00020 D 00030 D 00040 D 00050 D 00060 D 00070 D 00080 D 00090 D 00100
H QMF 15 R 01 E V W E R 02 03 13/03/25 1 1 : 4 7 V 1001 006 PERIOD V 1002 003 016 T 1010 003 006 1013 005 1014 006 1015 006 1016 006 1017 006 1012 008 R L 000001 000003 000008 000001 BREAK1 R C 000009 000011 000015 000001 R D2 000016 000018 000029 000001 AVERAGE L 110 10100000 QSTAFF DUMMY TABLE HEADER L 110 10000000 L 110 10000000 L 170 10000000 DEPT JOB AVERAGE SALA L 170 10010000 −−−−−− −−−−− −−−−−−−−−−−− L 180 11000000 10 MGR $21 , 1 5 1 . 1 5 L 151 10010000 −−−−−−−−−−−− L 151 11100000 ∗ $21 , 1 5 1 . 1 5 L 151 10000000 L 180 11000000 15 CLERK $12 , 3 8 3 . 3 5 L 180 11000000 MGR $20 , 6 5 9 . 8 0 L 180 11000000 SALES $16 , 5 0 2 . 8 0 L 151 10010000 −−−−−−−−−−−− L 151 11100000 ∗ $16 , 5 1 5 . 3 2 L 151 10000000 L 190 10010000 ============ L 190 11100000 AVERAGE SALARY $17 , 6 7 4 . 2 7 L 120 10000000 L 120 10000000 L 120 10100000 EXAMPLE REPORT E
Figuur 3.4: Standaard rapportformaat
HOOFDSTUK 3. FUNCTIONELE ANALYSE
27
Standaard rapportformaat Dit is het standaardformaat bij het exporteren van een rapport. Het bevat naast de geformatteerde tekst ook bijhorende meta-informatie. Figuur 3.4 toont het rapport uit figuur 2.5 op pagina 17 ge¨exporteerd naar het standaard rapportformaat. HTML-formaat De export naar HTML is enkel beschikbaar voor rapporten, zowel volledige rapporten als enkel de data. Het rapport wordt in een HTML-pagina tussen <pre>-tags in het body-element geplaatst. Figuur 3.5 toont een voorbeeld van het rapport uit figuur 2.5 op pagina 17. <TITLE> Report
QSTAFF DUMMY TABLE HEADER
DEPT JOB AVERAGE SALA −−−−−− −−−−− −−−−−−−−−−−− 10 MGR $21151 . 1 5 −−−−−−−−−−−− ∗ $21151 . 1 5 15
Bestanden aanmaken op het mainframe (zOS) kan met het allocate-commando. Het lukt niet om bestanden van het mainframe naar een Windows-server of Windows-pc te transfereren. Hiervoor is er nood aan andere protocollen. Vanuit het mainframe kunnen bestanden worden verplaatst naar een server met ftp. Dit is een protocol om bestanden te transfereren over een TCP-gebaseerd netwerk. IBM heeft WSA (Workstation agent) ontworpen om vanuit het mainframe een connectie te maken met een Windows-pc. Deze connectie vormt een alternatief voor ftp.
3.3
Gegevensconversie naar doelformaat
Nadat het bestand vanop het mainframe getransfereerd werd naar een Windowsomgeving, wordt deze door de MF2PC-Windowscomponent omgevormd tot het uiteindelijke bestandsformaat. De outputformaten zijn op te splitsen in twee grote groepen. Enerzijds zijn er de tabulaire formaten (bv. Excel, CSV), anderzijds zijn er de tekstuele formaten (Word, HTML). Bij de tabulaire formaten moet soms het datatype behouden worden, zoals bij Excel het geval is. Hier dient een datum ook na export het datumformaat te hebben in Excel. Bij export naar CSV of naar Word of HTML in tabelvorm gaat het dataformaat verloren. De opmaak van het rapport is hierbij minder van belang. Er moet voornamelijk gemakkelijk met deze gegevens kunnen worden verder gewerkt. Tekstueel TXT HTML
Tabulair CSV Excel Grafiek
Printklaar Word
Tabel 3.1: Onderverdeling bestandsformaten
Bij tekstuele formaten is er een onderscheid tussen printklare Word-documenten (of eventueel pdf) en HTML- en tekstfiles. De reden hiervoor is dat de gebruiker in een QMF FORM een specifieke paginalay-out kan meegeven. Die moet dan ook behouden worden bij export (met name de pagebreaks), zodat printen gebeurt met de exacte lay-out zoals beschreven door de gebruiker. De pagebreaks gaan verloren bij een HTML- of tekstbestand. Deze bestandstypes hebben eerder als doel makkelijk tekstuele informatie te extraheren uit QMF zonder dat hierbij de paginaschikking erg van belang is (andere formattering wordt wel behouden). De conversie wordt opgesplitst in twee fasen. De eerste fase exporteert van het mainframe naar een intermediair formaat. De tweede fase stelt de output voor van de MF2PC-toepassing, met andere woorden van het intermediair formaat naar een outputformaat (Word, Excel, HTML . . . ).
HOOFDSTUK 3. FUNCTIONELE ANALYSE
3.3.1
29
Gegevensconversie
DB2-Tabel/QMF-data naar tabulair Exporteren van een DB2-tabel of QMF-data behoudt de gegevenstypes. Zo worden getallen als getallen opgeslagen, met hetzelfde aantal beduidende cijfers, en ook een datum blijft van het datumtype. Het gaat hier enkel om kolomheaders en gegevens. Titels, tussentitels, headers en footers komen niet voor. QMF-rapport naar tabulair De gegevenstypes worden zo goed mogelijk behouden. De gegevens kunnen horizontaal of verticaal verder opgesplitst zijn volgens bepaalde criteria, in tegenstelling tot een DB2-tabel of QMF-data. De titels, tussentitels, headers en footers blijven behouden. De nadruk ligt hier op de gegevens en niet op de lay-out van het rapport. QMF-rapport naar tekstueel Een rapport exporteren naar tekstuele gegevens behoudt de opmaak. De opmaak wordt standaard door QMF gerealiseerd door toevoegen van spaties. Er zijn geen specifieke gegevenstypes nodig en de nodige lay-outspecificaties (met uitzondering van pagebreaks) kunnen via de QMF FORM ingesteld worden. Hier worden titels, tussentitels, aangepaste kolomnamen, toegevoegde dollar- of eurotekens bij valuta etc. wel behouden. QMF-rapport naar printklaar Een rapport exporteren naar een printklaar tussenformaat behoudt de exacte opmaak van het rapport (inclusief form). Dit is de enige optie als de pagebreaks behouden moeten blijven. Er wordt ook berekend aan de hand van het aantal kolommen of de pagina portrait- of landscapege¨ori¨enteerd is. Verder wordt eveneens de lettergrootte aangepast aan het maximaal aantal tekens die op een lijn voorkomen, en het maximaal aantal lijnen per pagina. De data wordt aan mainframe-zijde bewerkt via ICEMAN. ICEMAN is een implementatie van IBM’s DFSORT -product dat gebruikt wordt voor het sorteren, samenvoegen, kopi¨eren en analyseren van bestanden. Zonder deze bewerking aan mainframe-zijde is het onmogelijk om de pagebreaks te exporteren naar Windowszijde. QMF-query/QMF-proc naar tekstueel Een query of procedure exporteren leidt tot enkele regels platte tekst. Dit gebeurt voornamelijk om de query of procedure extern (niet op het mainframe) op te slaan.
HOOFDSTUK 3. FUNCTIONELE ANALYSE
3.3.2
30
Bestandscreatie
Tabulair naar CSV, Word/HTML(-tabel) De gegevens worden uitgeschreven naar een tabulair formaat. Hierbij wordt het gegevensformaat behouden, maar niet het gegevenstype. Het resultaat is een CSV-bestand of een Wordof HTML-bestand met een tabel. Tabulair naar Excel Alle gegevens in Excel hebben hun originele gegevenstype. Een datum wordt in Excel weergegeven als een datum, een string als tekst, een integer als getal, een geldbedrag als valuta en zo verder. Tekstueel naar tekst, Word, HTML De gegevens behouden de formattering door QMF en worden zo in een tekst-, Word- of HTML-bestand verpakt. Verdere bewerkingen op deze gegevens uitvoeren is moeilijk, maar de gegevens kunnen wel gemakkelijk afgedrukt worden. Printklaar naar Word De exacte lay-out zoals zichtbaar in QMF (inclusief pagebreaks) blijft behouden. De lettergrootte en paginaori¨entatie in Word worden aangepast naar gelang het aantal karakters per regel. Deze export levert een printklaar document op (eventueel in pdf-formaat) met de nadruk op de exacte lay-out en paginaindeling uit QMF.
3.3.3
Datatypeconversie
DB2/QMF kent verschillende datatypes, net als Excel. Deze datatypes zijn niet dezelfde. Er zijn twee mogelijkheden om deze datatypes te converteren zonder kostbare informatie te verliezen: • De ingelezen data worden opgeslagen als string met hierbij een indicatie van het originele datatype en bij het uitschrijven naar Excel wordt naar het juiste type gecast. • De ingelezen data wordt opgeslagen in het programma met een passend datatype en bij het uitschrijven nogmaals geconverteerd naar een Excel-datatype. Hier moet er ook rekening gehouden worden met C#-datatypes. Het nadeel van de eerste mogelijkheid is meteen het voordeel van de tweede optie: er niet hoeft geknoeid te worden met de juiste syntax van strings en het casten van datatypes wordt begeleid door het .NET-framework. Tabel 3.2 paart de QMF-datatypes met de bijpassende C#- en Excel-datatypes.
HOOFDSTUK 3. FUNCTIONELE ANALYSE DB2/QMF Date Time Timestamp Char Varchar Long varchar Float Decimal Smallint Integer Bigint Graphic Vargraphic Long vargraphic Binary Varbinary
31
C# DateTime DateTime DateTime String
Excel Date Time DateTime Text
Double
Number
Integer
Number
Niet gebruikt
Niet beschikaar in karaktermodus
Tabel 3.2: Datatypes DB2 — C# — Excel
3.4
Crosscheck met functionele requirements
Er worden verschillende features geschrapt bij de overgang naar de nieuwe MF2PC-tool. Hiervoor zijn verschillende redenen: ze worden niet langer gebruikt, er zijn betere alternatieven mogelijk of het is technisch moeilijk haalbaar deze te behouden. Tabel 3.3 geeft een grafische samenvatting. De grafiek-functie uit de huidige MF2PC-tool blijft behouden, maar wordt achter de schermen wel veranderd. Momenteel werkt dit nog met ComponentOne Charts, een programma om 2D- en 3D-grafieken mee te ontwerpen. Dit wordt omgeschakeld naar Excel Charts. Excel beschikt momenteel over voldoende mogelijkheden en is algemeen aanvaard voor het opstellen van grafieken. Het exporteren van een DB2-tabel of QMF-data is niet langer mogelijk naar tekstuele vorm, d.w.z. Word of HTML (in tekst). Alhoewel de export-mogelijkheid naar Word-tekst of HTMLtekst wel in de huidige MF2PC-tool zit, is deze niet compatibel met het laatste QMF-formaat en werkt ze daarom niet. Als alternatief wordt het wel mogelijk om te exporteren naar een Word- of HTML-tabel.
HOOFDSTUK 3. FUNCTIONELE ANALYSE
Tabel 3.3: Crosscheck met functionele requirements: overzicht
32
Hoofdstuk 4
Evaluatie van Office-API’s Voor de bestandsgeneratie van Office 2007-bestanden (met name Word en Excel) werd een API gezocht. Er zijn verschillende API’s voor het lezen, schrijven en bewerken van Office-documenten. De API’s worden vergeleken met elkaar om zo het beste product te onderscheiden. Dit onderzoek is uitgevoerd vanuit het standpunt van de MF2PC-ontwikkelaar. De gezochte API moet het cre¨eren van Office-documenten vergemakkelijken en versnellen voor de ontwikkelaar. Er werd onderzocht welke API hierop het beste scoort. Om dit zo objectief mogelijk te laten verlopen, werden eerst criteria bepaald waarop de softwareproducten beoordeeld werden. Deze criteria kregen ook een gewicht toegekend. Dit leidt tot een meer objectieve scoring. Dit hoofdstuk is slechts een samenvatting van het onderzoek naar de meest geschikte API. Een volledige beschrijving van het onderzoek naar een Office-API is te vinden op de cd-rom (zie appendix A).
4.1
Evaluatiecriteria
De component moet oproepbaar zijn vanuit het .NET-framework en bijgevolg geschreven zijn in .NET of COM. Hierbij worden o.a. Java-interfaces uitgesloten aangezien deze niet rechtstreeks oproepbaar zijn vanuit .NET, al zou dit mogelijk zijn via wrapperklassen of proxies. Dit heeft als bijkomend voordeel dat er geen onnodig performantieverlies is, wat bv. zou optreden bij een Java-interface. De API dient up-to-date te zijn en ook goed te worden onderhouden. Regelmatig nieuwe releases en bugfixes zijn hier een goede indicatie van. Er wordt verwacht dat de API volgende bestandstypes kan genereren: Word 2007, Excel 2007 en pdf. Voor de andere bestandstypes (HTML, CSV, TXT) zijn er eenvoudigere alternatieven, zoals IO-streams.
33
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
34
Het prijsaspect is van minder belang, maar het moet wel mogelijk zijn de oplossing uit te rollen op (web)servers. Om de leercurve zo laag mogelijk te houden, is een grote hoeveelheid aan documentatie samen met het gebruiksgemak van zeer groot belang, alsook de mogelijkheid tot support. Het aanvragen van nieuwe features is een pluspunt, maar zeker niet noodzakelijk. De API moet zeker in volgende functies voorzien: • formatteren van tekst en lay-out, • aanpassen van print- en pagina-instellingen, • schrijven naar bestaande of nieuwe bestanden en • specifiek voor Excel: ondersteunen van grafieken, draaitabellen en formules.
4.2
Productevaluatie
De evaluatie gebeurt in twee iteraties. We vertrekken van een brede basis producten die op het eerste zicht voldoen aan de vereisten. Tijdens de eerste iteratie gebeurt een grove filtering op basis van de product- en bedrijfsinformatie. Nadien volgt er voor de overgebleven producten nog een tweede evaluatie. Tijdens deze tweede iteratie wordt het gebruiksgemak nagegaan en worden de specifieke mogelijkheden bepaald.
9. Bytescout document SDK for .NET [25] 21. Open XML SDK [37] 10. Bytescout spreadsheet SDK for .NET [26]
22. Apache POI [38]
11. SoftArtisans OfficeWriter [27]
23. Docx4j [39]
12. Excel package [28]
24. Visual Studio Tools for Office [40]
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
4.2.2
35
Bedrijfs- en productinformatie
Op basis van de opgezochte product- en bedrijfsinformatie wordt een eerste selectie gemaakt. Verscheidene producten voldoen niet aan de vereisten. • Apache POI en Docx4j vallen af aangezien deze geschreven zijn in en voor Java. • Ook Visual Studio Tools for Office valt af, aangezien dit werkt met Office Automation. • Daarnaast vallen ook Bytescout document SDK, Excel Package, Word Package, ExtremeML, ExportToExcel en OpenExcel af aangezien er niet genoeg informatie beschikbaar is en de meeste nog in b`eta-stadium zijn of reeds meerdere jaren niet meer ge¨ updatet zijn. • Doordat ComponentOne Spread .NET niet als hoofddoel heeft om Office-bestanden te genereren, maar dit eerder een bijkomstigheid is van het product, wordt het niet verder opgenomen in de vergelijking. De andere producten worden verder vergeleken met elkaar. Deze vergelijking gebeurt aan de hand van verschillende requirements die van belang zijn voor de eindgebruiker en dus tot de mogelijkheden van deze API moeten behoren. Aan elk van deze requirements wordt een score en gewicht toegekend om zo de API’s objectief met elkaar te vergelijken. Meer informatie over deze cijfergegevens is terug te vinden op de cd-rom (zie appendix A). Uit de vergelijking blijkt: • SoftArtisans OfficeWriter biedt geen geschikte developers- en distributielicentie aan. Dit is zeer belangrijk aangezien de applicatie anders niet kan uitgerold worden op de servers. Hierdoor schiet ook dit product te kort. • IndependentSoft Word .NET en Spreadsheet .NET behoren niet tot de kernactiviteit van dit bedrijf. Gecombineerd met gebrekkige informatie en documentatie, leidt dit tot een ondermaatse score. Hierdoor worden deze producten niet onderworpen aan verdere testen. • SmartXLS evenals SpreadsheetGear 2010 zijn enkel toegespitst op Excel-functionaliteiten. Geen van beide ondersteunt Word of heeft een soortgelijke API in hun gamma. Hierbij komt nog eens de afwezigheid van kwaliteitsvolle documentatie bij SmartXLS. Dit droeg allemaal bij tot hun matige score en door de vele andere producten die beter scoorden, vallen deze ook af. Volgende producten behaalden een goede tot zeer goede score (zoals weergegeven in figuur 4.1) en worden verder getest: • Aspose.Words en Aspose.Cells • Gembox.Document en Gembox.Spreadsheet • Spire.Doc en Spire.XLS • ComponentOne ActiveReports • OpenXML SDK
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
36
Figuur 4.1: Score per product voor Word, Excel en gemiddeld
4.2.3
Testen van de API
Deze API’s werden expliciet getest op volgende punten: • Steilheid van de leercurve • Gebruiksgemak en intu¨ıtiviteit • Makkelijk te lezen en te onderhouden code Dit gebeurde door een eenvoudig testprogramma te schrijven dat enkele bestanden inlas met data en dit nadien weer uitschreef naar een Excel-, Word- en pdf-bestand met eenvoudige opmaak van de tekst. Zowel Aspose.Words en Aspose.Cells, Gembox.Document en Gembox.Spreadsheet, als Spire.Doc en Spire.XLS, zijn zeer intu¨ıtief in omgang. Na slechts enkele minuten kwam er een eenvoudig Excel-werkboek tevoorschijn. Ook Word-documenten waren gemakkelijk te cre¨eren. De code is gemakkelijk te lezen, leren en gebruiken. ComponentOne ActiveReports heeft een zeer ingewikkelde API. Er zijn weinig concrete of begrijpbare voorbeelden te vinden en ook de documentatie is niet overzichtelijk. OpenXML SDK is zeer ingewikkeld. Het is niet intu¨ıtief en moeilijk te lezen en begrijpen. Ook concrete eenvoudige voorbeelden zijn niet aanwezig. OpenXML SDK bezit weliswaar de juiste functionaliteit, maar erg gemakkelijk om hiermee te werken is het niet.
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
4.3
37
Resultaten
De acht overgebleven API’s werd een score toegekend op verschillende onderdelen. Al deze onderdelen kregen ook een gewicht. De belangrijkste criteria zijn de ondersteunde bestandsformaten, de aangeboden features, de kwaliteit van de documentatie en de mogelijkheid tot support. Om Excel-bestanden te manipuleren is Aspose.Cells het beste product. Op de tweede plaats stond Spire.XLS. Beiden scoorden bijzonder goed, maar de ondersteuning van macro’s door Aspose.Cells maakte het verschil. Ze ondersteunen beiden alle nodige bestandsformaten (zowel Excel als XML, pdf en csv), bezitten goede documentatie en bieden een degelijke support. De andere producten schoten op minstens ´e´en van deze vlakken tekort. Om Word-bestanden te cre¨eren komen Aspose.Words en Spire.Doc met dezelfde uitstekende score uit de bus, op de voet gevolgd door ActiveReports. Deze ondersteunen alle gezochte bestandstypes (zowel Word, pdf en HTML), gekoppeld met goede documentatie. Alle andere producten komen zwaar te kort op vlak van ondersteunde bestandstypes, kwaliteit van documentatie en de verschillende features.
4.4
Besluit
Zowel de producten van Aspose als van Spire zijn zeer goed. We bekijken het koppel producten per producent (Aspose.Words en Aspose.Cells tegenover Spire.Doc en Spire.XSL). Dit heeft als bijkomend voordeel dat beide API’s van hetzelfde koppel zeer gelijkaardig zijn en dus makkelijker in gebruik. Als totaalpakket raden we de producten van de Aspose-familie aan. Dit koppel (Aspose.Cells en Aspose.Words) scoorde gecombineerd net iets beter dan de producten van Spire (Spire.XLS en Spire.Doc), maar het behouden van macro’s in een Excelwerkboek of Worddocument is toch een zeer belangrijke feature, die in de scoring misschien wat verloren gaat. Daar komt bij dat het product al gebruikt wordt op ArcelorMittal Gent. De voorgestelde oplossing is Aspose, met Aspose.Words en Aspose.Cells.
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
4.5
38
Aspose
Aspose is een topproducent en -verkoper van .NET-, Java- en Sharepointcomponenten. Het bedrijf is opgericht in 2002 en bezit ondertussen meer dan 300 distributeurs voor zijn tienduizenden klanten verspreid over de hele wereld. De firma focust zich op producten voor het beheren en cre¨eren van bestanden (zowel in .NET als Java). De producten ondersteunen de meeste populaire bestandsformaten in de industrie, inclusief Word-documenten, Excel-spreadsheets, Powerpoint-presentaties, pdf-documenten en andere. Aspose biedt een complete en krachtige set van producten van topkwaliteit aan gecombineerd met een snelle en betrouwbare klantenondersteuning. [41]
4.5.1
Aspose.Words
Aspose.Words voor .NET is een geavanceerde klasse-bibliotheek voor het .NET-framework. Met Aspose.Words kunnen Word-documenten worden aangemaakt, aangepast, geconverteerd of afgedrukt zonder Microsoft Word te gebruiken. Ontwikkelaars kunnen vanuit hun applicatie veel manipulaties doorvoeren aan een Word-document. Zo kan een ontwikkelaar de printen paginasettings aanpassen, tabellen en afbeeldingen invoegen, tekst opmaken, etc. Aspose.Words ondersteunt bestandsformaten als DOC, DOCX, OOXML, HTML, TXT, PDF, EPUB, ODT, JPG, PNG, etc. Figuur 4.2 geeft een codevoorbeeld om een Word-document aan te maken. //Open t h e t e m p l a t e document Document doc = new Document ( ) ; //Once t h e b u i l d e r i s c r e a t e d , // i t s c u r s o r i s p o s i t i o n e d a t t h e b e g i n n i n g o f t h e document . DocumentBuilder b u i l d e r = new DocumentBuilder ( doc ) ; // S p e c i f y f o n t f o r m a t t i n g b e f o r e a d d i n g t e x t . b u i l d e r . Font . S i z e = 1 6 ; b u i l d e r . Font . Name = ” A r i a l ” ; b u i l d e r . Write ( ” T i t l e ” ) ; builder . InsertParagraph ( ) ; b u i l d e r . W r i t e l n ( ” H e l l o World . ” ) ; doc . Save ( ” HelloWorld . docx ” , SaveFormat . Docx ) ;
Figuur 4.2: Codevoorbeeld Aspose.Words [17]
HOOFDSTUK 4. EVALUATIE VAN OFFICE-API’S
4.5.2
39
Aspose.Cells
Aspose.Cells voor .NET laat ontwikkelaars toe vanuit hun applicatie een Excel-spreadsheet aan te maken en te bewerken. Aspose.Cells ondersteunt verschillende bestandsformaten zoals XLS, CSV, PDF, HTML, OOXML, ODS, JPG, PNG, en meer. Aspose.Cells laat volgende handelingen op een Excel-bestand toe: • Opmaken van tekst en cellen • Invoegen en cre¨eren van afbeeldingen en grafieken • Invoegen van formules • Configureren van print- en paginasetup • Invoeren van conditionele formattering • Beveiligen van werkboek of werkblad • Benoemen van ranges (named ranges) Figuur 4.3 geeft een codevoorbeeld om een Excel-werkboek aan te maken. // C r e a t e a workbook o b j e c t Workbook workbook = new Workbook ( ) ; // Get t h e f i r s t w o r k s h e e t i n t h e workbook Worksheet w o r k s h e e t = workbook . Worksheets [ 0 ] ; // Get t h e c e l l s c o l l e c t i o n i n t h e s h e e t C e l l s c e l l s = worksheet . C e l l s ; // Put a s t r i n g v a l u e i n t o t h e c e l l u s i n g i t s name c e l l s [ ”A1” ] . PutValue ( ” H e l l o world ” ) ; // Put an b o o l e a n v a l u e i n t o t h e c e l l u s i n g i t s name c e l l s [ ”A2” ] . PutValue ( t r u e ) ; // Put an i n t v a l u e i n t o t h e c e l l u s i n g i t s name c e l l s [ ”A3” ] . PutValue ( 1 0 0 ) ; // Put an s t r i n g v a l u e t h a t can be c o n v e r t e d t o o t h e r d a t a t y p e i f a p p r o p r i a t e c e l l s [ ”A6” ] . PutValue ( ( 1 2 3 . 6 ) . T o S t r i n g ( ) , t r u e ) ; // Save f i l e and send t o c l i e n t b r o w s e r u s i n g s e l e c t e d f o r m a t workbook . Save ( ” HelloWorld . x l s ” , SaveFormat . Xlsx ) ;
Figuur 4.3: Codevoorbeeld Aspose.Cells [18]
Deel III
Implementatie
40
Hoofdstuk 5
Architectuur Een architectuur heeft tot doel om de structuur en werking van de applicatie weer te geven. [42] Zij beschrijft het skelet van de applicatie op een hoger abstract niveau. Naast de elementen waaruit het programma is opgebouwd, ligt de nadruk ook op de interactie tussen deze elementen: hoe de applicatie werkt en hoe de elementen samenwerken om dit te bereiken. [43] Een architectuur houdt echter geen rekening met implementatiedetails; deze komen in het volgende hoofdstuk aan bod.
5.1
Globaal
De MF2PC-applicatie bestaat uit twee grote componenten. Er is een transfercomponent (op het mainframe) en een conversiecomponent (op Windows). Figuur 5.1 geeft een grafische voorstelling. De transfercomponent staat in voor het exporteren van de gegevens uit QMF naar een bestand op het mainframe, en voor het overbrengen van dit bestand naar een Windows-omgeving (bv. een pc of een server). De conversiecomponent staat in voor het converteren van deze gegevens naar bruikbare data en het cre¨eren van het uiteindelijke doelbestand, inclusief de naverwerking zoals e-mailen, automatisch openen en meer.
Figuur 5.1: Ontplooiingsdiagram: transfer- en conversiecomponent
41
HOOFDSTUK 5. ARCHITECTUUR
5.2 5.2.1
42
Transfercomponent Technologie
De transfercomponent bevindt zich op het IBM DB2-mainframe en is geschreven in REXX. Hij is zowel interactief als via batch oproepbaar. Interactief kan de gebruikersinterface worden opgeroepen via de commandline, maar ook via een drukknop.
5.2.2
Input
De wijze van input is niet veranderd ten opzichte van de vorige MF2PC-applicatie. Dit kan nog steeds via de commandline (zie figuur 5.2 voor een voorbeeld) of via grafische interface. ”TSO %MF2PCSTU” , ” ,VAN=3” , /∗ QMF−r e p o r t ( data ) ∗/ ” ,APPLICATIE=1[DATA] ” , /∗ EXCEL ∗/ ’ ,BESTAND=\\ sidmar . be \ d f s \ c l i p b r d \PAM\ data . x l s x ’ ” ,SU=Dagrapport ” , ” ,TO=SIDLAMU” , ” ,BO=In b i j l a g e h e t d a g r a p p o r t ”
Figuur 5.2: MF2PC: commandline voorbeeld
Het basispanel is niet aangepast (figuur 2.1 op pagina 11 geeft een voorbeeld). Er werd echter wel ´e´en mogelijkheid verwijderd die niet meer gebruikt werd.
Figuur 5.3: MF2PC: uitgebreid panel
HOOFDSTUK 5. ARCHITECTUUR
43
Het uitgebreide panel is daarentegen wel aangepast. Het betreft hier slechts enkele kleine wijzigingen, om de aanpassingen voor de eindgebruiker zo minimaal mogelijk te houden. Zo is het geheel gestructureerder opgebouwd en zijn de outputmogelijkheden ge¨ updatet. Figuur 5.3 toont de nieuwe versie. De vorige versie is te vinden op pagina 12, figuur 2.2.
5.2.3
Output
De output van deze component zijn twee bestanden: het jobbestand en het databestand. Het jobbestand bevat alle informatie die de conversiecomponent nodig heeft om de conversie uit te voeren. Deze informatie is gecodeerd als XML. Het heeft een .par-extensie; par staat voor parameter. Figuur 5.4 toont een voorbeeld van een jobbestand. <MF2PC u s e r=”SIDKENW” j o b=”SIDKENW” d i r e c t o r y=” D130423 . T105031 . M330320”> QMFREPORTFULL type> COMMA d e c i m a l> < f i l e >D130423 . T105031 . M330320\ MF2PC D130423 T105031 M330320 .TXT f i l e > PRINT format> <MAIL/>
Figuur 5.4: Jobbestand: voorbeeld
Het databestand heeft steeds een .txt-extensie en is gecodeerd volgens de ANSI-tekenset. De ANSI- of Windows-1252-karaktercodering werd ontwikkeld door Microsoft en wordt nog steeds standaard gebruikt onder Windows. De verschillende soorten databestanden zijn te vinden onder 3.1.2 op pagina 24.
5.2.4
Werking
Deze component exporteert de gegevens vanuit QMF naar een bestand op het mainframe, nadat de gebruiker of een batch-proces hiervoor de gepaste actie heeft gegeven. Eenmaal dit is gebeurd, wordt het bestand door deze component getransfereerd naar een Windowsomgeving, waar de uiteindelijke conversie kan gebeuren. Voor een server gebeurt dit via het ftp-protocol, voor een client of werkstation wordt het wsa-protocol van IBM gebruikt.
HOOFDSTUK 5. ARCHITECTUUR
44
Deze component werd aangeleverd (en dus niet zelf ontwikkeld). Er was wel inspraak bij het ontwikkelen van de component, ook het onderzoek naar bugs en de rapportering ervan viel binnen het bestek van dit project.
5.3 5.3.1
Conversiecomponent Technologie
De component werd ontwikkeld in het .NET-framework, meer bepaald C#, met behulp van Visual Studio 2010. Team Foundation Server (TFS) is een versiebeheersysteem ontwikkeld door Microsoft en kan naadloos ge¨ıntegreerd worden in Visual Studio. Dit werd gebruikt om de verschillende versies van de applicatie te beheren.
5.3.2
Input
De output van de transfercomponent geldt als input voor de conversiecomponent. Dit zijn dus een jobbestand en een databestand (zie 5.2.3 op pagina 43).
5.3.3
Output
De conversiecomponent heeft verschillende mogelijkheden als output. Hieronder worden de onderdelen kort opgesomd; een combinatie van de onderdelen is mogelijk. De onderdelen zijn: • een bestand • een e-mail • de start van een programma op de client • een afgedrukte versie
5.3.4
Werking
De conversiecomponent zorgt zowel voor de conversie van de gegevens als voor het genereren van het doelbestand. Hij zorgt ook voor kleinere functionaliteiten, zoals bv. e-mailing. De component krijgt melding dat er een nieuw jobbestand aanwezig is en dit bestand wordt ingelezen. Hierna wordt het databestand ook ingelezen en worden deze gegevens bewerkt. Die bewerkte gegevens worden uiteindelijk naar een doelbestand geschreven met een bepaalde layout. Het jobbestand bevat alle parameters nodig om de verwerking correct te laten verlopen. Het is mogelijk dat er geen conversie noch doelbestand gewenst is door de gebruiker, dan worden deze stappen uiteraard niet uitgevoerd.
HOOFDSTUK 5. ARCHITECTUUR
45
Tot slot volgt er nog een naverwerking, zoals bv. een e-mail versturen (met of zonder bijlage), het doelbestand automatisch openen op de pc of een ander programma starten op de pc. Dit zorgt voor een custom naverwerking van de ge¨exporteerde gegevens.
5.3.5
Projectbeheer
Het project wordt beheerd in Team Foundation Server. Aangezien de applicatie zowel bruikbaar moet zijn op een client als server, vereist dit naast een modulaire opbouw in code ook een modulaire opbouw van het project. Figuur 5.5 geeft een grafische voorstelling van de opbouw. Het project is onderverdeeld in verschillende solutions: Client Solution bevat Class Library en Client Console. Service Solution bevat Class Library en Server Console. Installer Solution bevat Class Library, Service en Installer. Test Solution bevat de testklassen.
Figuur 5.5: Projectbeheer: solutions en modules
Deze solutions bestaan uit ´e´en of meerdere modules: Class Library bevat de gehele businesslogica van de applicatie zonder meer. Client Console bevat de implementatie van de Class Library in een console gericht voor gebruik op een client. Server Console bevat de implementatie van de Class Library in een console gericht voor gebruik op een server. Deze console bootst een service na, omdat het onmogelijk is om effici¨ent te debuggen in een Windows-service. Service bevat een implementatie van Class Library in een Windows-service. Installer bevat een installer voor het installeren van de service als Windows-service.
Hoofdstuk 6
Ontwerp Waar de architectuur de elementen van de applicatie en hun interactie op een hoger abstract niveau beschrijft, houdt het ontwerp zich bezig met de bouwstenen en werking van de applicatie op een laag niveau. Bij het ontwerp ligt de focus vooral op modulariteit, gedetailleerde interfaces, algoritmen, procedures, datatypes en design patterns. [44] Dit hoofdstuk geeft echter geen beschrijving van elke eigenschap, functie of procedure van elke klasse of interface van de applicatie. Het geeft wel een beeld van de opbouw en de werking op laag abstract niveau, alsook zal dit hoofdstuk een beeld proberen te geven van waarom bepaalde implementatiekeuzes werden verkozen boven andere. In het vorige hoofdstuk werd uitgelegd dat MF2PC op een hoger abstract niveau bestaat uit twee modules. Hier wordt dieper ingegaan op de conversiecomponent die zich in een Windowsomgeving bevindt. Deze uitleg wordt opgesplitst in twee delen. Enerzijds is er de businesslogica, anderzijds wordt de hosting verder besproken.
6.1
Businesslogica
De businesslogica staat in voor de kerntaak van de applicatie. Hier ligt de focus op het converteren van data en genereren van een bestand. Hij valt onder te verdelen in drie acties, namelijk: 1. Data converteren 2. Bestand cre¨eren 3. Naverwerking uitvoeren
46
HOOFDSTUK 6. ONTWERP
6.1.1
47
Algemeen
Het klassendiagram geeft een beeld van de verschillende klassen en interfaces die hierbij betrokken zijn. Figuur 6.1 toont het klassendiagram van de businesslogica. Elke klasse of interface wordt ook kort toegelicht.
Figuur 6.1: Klassendiagram: businesslogica
JobProcessor De JobProcessor verzorgt de uitvoering van een job. Hij stuurt de verschillende fasen (dataconversie, bestandscreatie en naverwerking) aan en zorgt ervoor dat ze achtereenvolgens correct worden uitgevoerd. Elk van deze stappen is facultatief. Factory De klasse Factory zorgt ervoor dat de JobProcessor zich niets moet aantrekken van welk soort Converter of FileCreator hij nodig heeft of gebruikt. Hij vraagt de gepaste Converter of FileCreator aan de Factory. De Factory bepaalt aan de hand van het invoertype of uitvoertype welke instantie van de IConverter - of IFileCreator -interface er nodig is. Dit maakt het makkelijk om in de toekomst een nieuwe FileCreator toe te voegen om zo extra uitvoerbestandstypes te ondersteunen. Eveneens kan er een nieuw invoertype ontstaan, waardoor er een nieuwe instantie van IConverter dient toegevoegd te worden. Dit heeft geen impact op de werking van de JobProcessor.
HOOFDSTUK 6. ONTWERP
6.1.2
48
Dataconversie
IConverter
Figuur 6.2: Klassendiagram: IConverter
Er zijn verschillende soorten converters (zie figuur 6.2). Elke converter komt overeen met een specifiek type van invoerbestand. Dit zijn de beschikbare converters: HTMLConverter kopieert uit de HTML-datafiles alle gegevens die tussen pre-tags staan naar een Text String. ReportPrintConverter converter kopieert de gehele inhoud van het databestand naar een Printable String. IXFConverter transformeert een IXF-datafile naar een tabulair formaat, meer bepaald een IXF Table. QMFConverter transformeert een QMF-datafile naar een tabulair formaat, meer bepaald een QMF Table. IReader Om de datafile in te lezen, wordt gebruikgemaakt van een reader. Er zijn twee readers mogelijk (figuur 6.3). Er is de LineReader, die de datafile lijn per lijn inleest. Deze wordt gebruikt voor het inlezen van IXF- en QMF-databestanden aangezien deze data moeten bewerkt worden tot bruikbare gegevens. Daarnaast is er ook een BlockReader, die de gehele file inleest in ´e´en maal. Dit wordt gebruikt voor het inlezen van HTML-datafiles of standardreportdatafiles. Hier moeten de data niet omgevormd worden tot gegevens waarmee verder gerekend kan worden; er dienen hoogstens enkele lijnen verwijderd te worden uit de invoer.
HOOFDSTUK 6. ONTWERP
49
Figuur 6.3: Klassendiagram: IReader
TemporaryDocument Een TemporaryDocument is een intermediaire datastructuur die de geconverteerde gegevens bijhoudt. Het bestaat uit een lijst van verschillende IDataElement-objecten (figuur 6.4). IDataElement
Figuur 6.4: Klassendiagram: IDataElement
Zo zijn er vier verschillende IDataElementen: Text String Een string van ´e´en regel. Printable String Een string met een inhoud die meerdere regels (of pagina’s) beslaat en die letterlijk afgedrukt dient te worden. Het verschil met een Text String zit hem bij het cre¨eren van een file. Zo moet bij een Printable String de tekstgrootte en paginalay-out aangepast worden naar de inhoud van het databestand. IXF Table Dit element bestaat uit een lijst met kolomheaders en een tabel met de inhoud (als strings). Er wordt eveneens bijgehouden welke kolommen een numerieke waarde voorstellen. QMF Table Dit element bestaat uit een tabel van strings. Er is geen aparte lijst met kolomhoofdingen aangezien een QMF-tabel voor de hoofdingen meerdere headers kan hebben. Ook headers, footers en breaklines zitten vervat in de tabel. Er wordt wel bijgehouden welke kolommen een numerieke waarde voorstellen.
HOOFDSTUK 6. ONTWERP
50
Actie De JobProcessor haalt de juiste Converter op via de Factory en geeft de Job door. De Converter instantieert op zijn beurt een Reader om de data van het databestand in te lezen en door te geven aan de Converter om deze om te vormen. De bewerkte data wordt opgeslagen in een DataElement dat wordt bijgehouden in het TemporaryDocument. Nadat het gehele databestand ingelezen en geconverteerd is, wordt dit TemporaryDocument teruggegeven naar de JobProcessor. Figuur 6.5 geeft het sequentiediagram van deze actie weer.
Figuur 6.5: Sequentiediagram: dataconversie
HOOFDSTUK 6. ONTWERP
6.1.3
51
Bestandcreatie
IFileCreator
Figuur 6.6: Klassendiagram: IFileCreator
Er zijn verschillende FileCreators (zie figuur 6.6). Via een FileCreator kunnen de documenten ook rechtstreeks afgedrukt worden, al geldt dit niet voor HTML- of XML-documenten (aangezien HTML en XML opmaaktalen zijn). Word Creator gebruikt Aspose.Words om Word-documenten te cre¨eren. Het document kan ook als pdf bewaard worden, of afgedrukt worden. Excel Creator gebruikt Aspose.Cells om Excel-documenten te cr¨eeren. Ook grafieken worden via deze klasse gemaakt. Het document kan ook als PDF bewaard worden, of afgedrukt worden. Text Creator gebruikt geen externe library, maar gebruikt een StreamWriter om de data naar een bestand te schrijven. HTML Creator gebruikt een StreamWriter om het eindbestand te maken. Hier worden weliswaar meerdere HTML-tags bijgevoegd, zodat er een geldige webpagina wordt gemaakt. XML Creator gebruikt de XMLTextWriter-klasse aanwezig in het .NET-framework om zo nieuwe XML-bestanden te cre¨eren.
HOOFDSTUK 6. ONTWERP
52
Actie De JobProcessor geeft nu het TemporaryDocument door aan de FileCreator die hij verkregen heeft van de Factory. Deze FileCreator zal de inhoud van het TemporaryDocument ophalen en elk element hiervan naar het bestand schrijven. Het bestand wordt uiteindelijk opgeslagen (en eventueel geprint). Dit sequentiediagram is te vinden in figuur 6.7.
Figuur 6.7: Sequentiediagram: bestandscreatie
HOOFDSTUK 6. ONTWERP
6.1.4
53
Naverwerking
Mailbox Via de Mailbox is het mogelijk om een nieuw MailItem aan te maken dat verstuurd wordt door de Mailbox. Hierbij wordt de MailMessage-klasse van .NET gebruikt. MailItem Dit is een wrapper rond de MailMessage-klasse van het .NET-framework. Actie Nadat de data zijn ingelezen, bewerkt en uitgeschreven naar een bestand, volgt de naverwerking. Afhankelijk van de parameters door de gebruiker ingegeven, kan het bestand automatisch geopend worden, kan er een programma gestart worden of kan het bestand als bijlage verstuurd worden per e-mail. Voor dit laatste doet de JobProcessor een beroep op de Mailbox. Deze maakt een nieuw MailItem aan dat in een wachtrij wordt geplaatst. Hierna worden alle e-mails uit de wachtrij van de Mailbox verstuurd. Het sequentiediagram in figuur 6.8 geeft dit grafisch weer.
Figuur 6.8: Sequentiediagram: naverwerking
HOOFDSTUK 6. ONTWERP
6.2
54
Hosting
De MF2PC-applicatie wordt op 2 manieren gehost (zie figuur 6.9). Op een server wordt MF2PC gehost als service. Deze service houdt een directory in de gaten voor nieuwe bestanden die worden aangemaakt. Alle te verwerken jobs worden hier in de wachtrij geplaatst en de service voert deze sequenti¨eel uit, zodat er op een piekmoment niet meerdere jobs tegelijk uitgevoerd zouden worden. Dit zou problemen kunnen geven. Op een client wordt MF2PC opgeroepen door middel van een executable die een parameter meekrijgt. Via deze parameter kan het af te werken jobbestand gevonden worden. Na de verwerking van deze job, wordt de sessie opnieuw vrijgegeven. Een service gebruiken op een client zou leiden tot veel overhead; de service zou namelijk continu actief zijn.
Figuur 6.9: Hosting
6.2.1
Klassen en interfaces
Figuur 6.10 geeft alle klassen en interfaces weer die niet betrokken zijn bij de businesslogica. Ze worden ook kort verduidelijkt.
Figuur 6.10: Klassendiagram: hosting
HOOFDSTUK 6. ONTWERP
55
Scheduler Doordat er twee manieren van hosting zijn, levert dit verschillende implementaties op. Hiervoor zijn er twee verschillende schedulers ontwikkeld, met elk hun eigen eventlistener (een FileWatchProcessor en een CommandLineProcessor ). FileWatchProcessor Voor het detecteren van nieuwe bestanden in een bepaalde directory, wordt gebruikgemaakt van de FileSystemWatcher-klasse uit .NET. Deze stelt een toepassing in staat om een directory en filter (bv. enkel bestanden met een .par-extensie) te specifi¨eren. Verder kan ingesteld worden of subdirectory’s ook bekeken worden en op welke criteria er gelet moet worden (nieuw bestand cre¨eren, bestand aanpassen . . . ). Aan deze watcher dient ook een eventhandler gekoppeld te worden die deze events (van gedetecteerde gebeurtenissen) opvangt. De FileWatchProcessor geeft enkel de bestandsnaam van het nieuwe bestand door naar de Scheduler, waar het op een queue wordt geplaatst. Hierop wordt via een asynchrone delegate de scheduling gestart, indien deze nog niet actief is. Pas tijdens de verwerking wordt de jobfile ingelezen en de parameters opgeslagen in een Job. De jobbestanden direct inlezen en omzetten naar een Job leverde een overflow van de buffer op wanneer er op korte tijd enkele honderden bestanden werden gecre¨eerd. Dit kwam doordat de applicatie onvoldoende tijd had om deze jobbestanden in te lezen en een Job aan te maken, zelfs met de buffer op maximale grootte. Het inlezen van de jobfile werd uitgesteld en de FileWatchProcessor kan nu meerdere honderden nieuwe files tegelijk aan zonder een overflow, zelfs met de buffergrootte op zijn ondergrens. CommandLineProcessor De CommandLineProcessor krijgt de parameter door die werd meegegeven op de commandline. Deze parameter is de relatieve folder ten opzichte van de werkmap van MF2PC. Deze werkmap kan aangepast worden in het configuratiebestand. De CommandLineProcessor zoekt dan alle bestanden met een .par-extensie die zich in die meegegeven folder bevinden. Dit is bij een correcte werking van MF2PC slechts ´e´en bestand, het jobbestand van de uit te voeren job. Het volledige pad van dit bestand wordt doorgegeven aan de Scheduler die de job dan kan laten uitvoeren. JobProcessor Deze informatie is te vinden onder sectie 6.1.1 op pagina 47. Job Een Job bestaat uit alle parameters die kunnen voorkomen in een jobbestand. Het jobbestand wordt ook gecontroleerd op inconsistenties zoals een foutief invoer- of uitvoertype, verkeerd gekoppelde invoer-uitvoer-combinaties of de afwezigheid van het databestand.
HOOFDSTUK 6. ONTWERP
56
JobReader Een jobbestand volgt een bepaald XML-schema en kan worden ingelezen door een JobXMLReader. Dit resulteert in een Job-object.
6.2.2
Client
Hosting van MF2PC op een client gebeurt door middel van een executable. De executable vereist een parameter. Die parameter is de relatieve folder ten opzichte van de werkmap waar zowel het job- als databestand van de uit te voeren job te vinden zijn. Deze parameter wordt doorgegeven aan de CommandLineProcessor, die elk jobbestand uit deze map laat uitvoeren door de Scheduler (zoals te zien is in figuur 6.11). De Scheduler verkrijgt een Job door het jobbestand in te lezen via de JobXMLReader. Nadien wordt deze Job doorgegeven naar de JobProcessor die het uitvoert. Hoe deze uitvoering gebeurt, werd reeds besproken onder 6.1.
Figuur 6.11: Sequentiediagram: console
HOOFDSTUK 6. ONTWERP
6.2.3
57
Server
Bij hosting op een server wordt een Windows-service gebruikt. Hier worden geen parameters gebruikt, maar een filewatcher. Deze filewatcher gooit een event op wanneer er in een opgegeven directory een nieuwe file of folder wordt geplaatst. Uit dit event kan de volledige naam van de .par-file gehaald worden en dit wordt doorgegeven naar de Scheduler die een queue van af te werken .par-files bijhoudt. Via een asynchrone methode wordt dan de Scheduler verwittigd. Indien de Scheduler niet actief is, wordt deze geactiveerd; anders blijft hij actief. Eens actief volgt hij voor elk element uit zijn wachtrij hetzelfde stramien. Het jobbestand wordt ingelezen door een JobXMLReader en deze Job wordt uitgevoerd door de JobProcessor. Aangezien deze verwerking op een server gebeurt via een synchrone oproep, verwacht het mainframe ook een antwoord over de verwerking. Dit antwoord is een tekstbestand met de status van de verwerking dat via FTPClient wordt ge¨ upload naar het mainframe. Dit wordt grafisch weergegeven in figuur 6.12. FTPClient Wanneer MF2PC wordt gehost als service, verwacht de mainframecomponent na verwerking van een job een antwoord. Dit antwoord is een bestand dat wordt ge¨ upload via ftp en bevat het statusrapport van de verwerking. Dit uploaden wordt ondersteund door de FTPClient. Impersonate Voor sommige afdelingen is het noodzakelijk dat de gecre¨eerde bestanden in een directory worden geplaatst die slechts toegankelijk is voor specifieke gebruikers. Om dit te kunnen realiseren moet de applicatie deze gebruiker kunnen nabootsen. Hiervoor wordt de ImpersonateUser -klasse gebruikt. De gebruikersnaam wordt meegegeven in het jobbestand, net zoals het ge¨encrypteerde wachtwoord. Hiermee is het mogelijk om de gebruikerscontext waarin de service draait te veranderen naar deze gebruiker, om zo het bestand correct op te kunnen slaan. Dit is uiteraard enkel mogelijk indien MF2PC gehost is als service. Bij verwerking op een client is de gebruikerscontext steeds de ingelogde gebruiker die de verwerking startte.
HOOFDSTUK 6. ONTWERP
58
Figuur 6.12: Sequentiediagram: service
6.3 6.3.1
Beslissingen en patterns Interfaces
Zowel voor de Converter-klassen als voor de FileCreator-klassen werd gewerkt met een overkoepelende interface. Dit zorgt voor de nodige abstractie voor de applicatie.
6.3.2
Factory
Op pagina 47 is de informatie omtrent de Factory terug te vinden. Dit is ontworpen naar het idee van het Abstract Factory Pattern en wordt ook wel Simple Factory Pattern genoemd. [45]
HOOFDSTUK 6. ONTWERP
6.3.3
59
JobProcessor
De JobProcessor is ontworpen volgens het Microkernel Pattern. Dit impliceert dat de JobProcessor de uitvoering van een Job reguleert en overziet. Hij beperkt zich tot de kernfunctionaliteit, zoals het opvolgen van de correcte flow. Daarnaast regelt hij ook de toegang tot de resources (in dit geval het jobbestand, het databestand, de Job en het TemporaryDocument). [46]
6.3.4
Jobbestand in XML
Er werd voor het jobbestand geopteerd voor een XML-gebaseerd type omdat dit de nodige flexibiliteit met zich meebrengt voor verdere evoluties. Zo kan het in de toekomst interessant worden om de MF2PC-toepassing niet meer aan te sturen met jobfiles die getransfereerd worden via ftp of wsa, maar met rechtstreekse berichten over bijvoorbeeld een webservice.
6.3.5
Logging
Om logging te vergemakkelijken werd een statische klasse ontworpen. Dit maakt dat een methode van de Logger-klasse steeds kan opgeroepen worden zonder dat er een instantie van de klasse moet worden voorzien. De methode verwacht een boodschap en de ernst ervan (TraceLevel) en publiceert hiermee de boodschap naar een logbestand (en eventueel het consolevenster). Dit komt overeen met het Singleton Pattern. [47]
6.3.6
Exception handling
Er is een ExceptionManager voorzien om het opgooien en loggen van excepties te vergemakkelijken. De ExceptionManager is een statische klasse met ´e´en methode Publish waaraan een exceptie dient meegegeven te worden. Het is mogelijk deze exceptie te loggen en/of verder door te gooien. Dit heeft als grote voordeel dat excepties automatisch kunnen gelogd worden wanneer deze worden opgevangen en/of door gegooid. Ook hier werd het Singleton Pattern gebruikt. [47]
6.3.7
Scheduler en eventlistener
Zowel de Scheduler in een consoleapplicatie als in een Windows-service hebben een eventlistener (respectievelijk een CommandLineProcessor en een FileWatchProcessor). De Scheduler en de eventlistener kennen elkaar. De eventlistener verwittigt de Scheduler als er een nieuw jobbestand aanwezig is. Dit is naar analogie met het Observer Pattern. Er valt wel op te merken dat er hier geen sprake is van meerdere Observers en dat ook de corresponderende Observer-interface niet ge¨ımplementeerd is. [47]
HOOFDSTUK 6. ONTWERP
6.3.8
60
Asynchrone start
De ServiceScheduler heeft een queue waarin zich de bestandspaden bevinden naar de jobbestanden die nog uitgevoerd moeten worden. Het is echter niet mogelijk telkens er een nieuw bestandspad wordt toegevoegd aan de queue, deze verwerking te starten. Dit zou namelijk leiden tot meerdere simultane verwerkingen, wat op zijn beurt tot conflicten of fouten zou leiden (jobs die niet of dubbel uitgevoerd worden, simultaan een job- of databestand proberen lezen . . . ). Om dit probleem tegen te gaan, wordt in de ServiceScheduler bijgehouden of deze momenteel de queue met jobbestanden aan het verwerken is of niet. Is de ServiceScheduler momenteel bezig, dan doet deze asynchrone methode niets. Is de ServiceScheduler echter inactief, dan zal deze methode de verwerking van de queue starten en de status van de ServiceScheduler op actief zetten, totdat de gehele queue verwerkt is. Het cre¨eren van een bestand gebeurt niet op ´e´en enkel ogenblik. Eerst wordt het bestand aangemaakt en meteen daarna wordt de inhoud erin geplaatst via een stream. Het kan dus zijn dat het aanmaken van een nieuw jobbestand door de transfercomponent een event opgooit en dat de Scheduler dit bestand probeert te lezen, nog voordat het schrijven naar dit bestand afgerond is. Daarom wordt er eerst gecontroleerd of een bestand momenteel gelockt is of niet. Is het bestand gelockt, dan wordt hij opnieuw achteraan in de queue geplaatst (om niet onnodig te wachten op dit bestand als er ondertussen andere jobs afgewerkt kunnen worden). Is het bestand niet gelockt, dan wordt het meteen ingelezen en wordt de job uitgevoerd. Dit is het Balking Pattern. [48]
Hoofdstuk 7
Uitbreidingen Een van de grootste kunstenaars aller tijden zei ooit: “Art is never finished, only abandoned.”. Het was Leonardo Da Vinci die deze spreuk de wereld in stuurde. Hiermee doelde hij duidelijk op het feit dat er altijd iets beters kan aan een kunstwerk; er kan steeds iets meer of iets anders. Dit geldt voor de volle honderd procent voor software ontwikkeling. Het resultaat, de applicatie, is nooit volledig af; er is altijd ruimte voor verbetering of uitbreiding. In dit hoofdstuk wordt de status van de implementatie beschreven, om daarna verder te gaan met enkele mogelijke uitbreidingen. Sommige van deze uitbreidingen zijn louter theoretisch, andere werden reeds in rekening gebracht bij het ontwikkelen van de architectuur en het ontwerp.
7.1
Status van de implementatie
De applicatie werd ge¨ımplementeerd in het .NET-framework in C#. Er werd gebruikgemaakt van een betalende externe library, Aspose, voor de creatie van Office-bestanden. De masterproef werd uitgevoerd zoals beschreven in de inleiding, en ook in het uitgebreide voorstel dat werd ingediend bij Hogeschool Gent ter goedkeuring van deze masterproef. De volledige doelstelling zoals beschreven in dit uitgebreid voorstel werd verwezenlijkt, samen met ´e´en van de facultatieve uitbreidingen. Het tijdsbestek liet niet toe alle voorgestelde uitbreidingen te verwezenlijken. Op het einde van de behoefteanalyse werden alle user requirements opgelijst. Deze werden onderzocht en diegene die niet ge¨ımplementeerd werden, staan hieronder beschreven als uitbreiding. Er wordt uitgelegd waarom dit requirement niet ge¨ımplementeerd werd en er worden eventuele oplossingen of uitbreidingen naar de toekomst toe.
61
HOOFDSTUK 7. UITBREIDINGEN
7.2
62
Testing
Een applicatie kan op verscheidene niveaus getest worden. Zo is er op het laagste niveau unit testing. Hierbij worden methodes en andere stukken broncode getest op een correcte werking. Daarboven vindt men integratietesten. Integratietesten gaan na of de verschillende modules en componenten correct met elkaar interageren. Als het programma slaagt voor de integratietesten, worden er nog ´e´en of meerdere systeemtesten gehouden. Hierbij wordt het volledig ge¨ıntegreerde systeem getest en nagegaan of de user requirements voldaan zijn. Hierdoor zouden de meeste fouten uit de applicatie gehaald zijn en zou deze correct moeten werken. Als allerlaatste test kan er nog een acceptatietest worden gedaan; dit komt normaal enkel voor bij een release van een product en niet bij een proof-of-concept. [49] De focus van de masterproef lag, door het beperkte tijdsbestek, bij het ontwikkelen van het programma, eerder dan bij testing. Inzake testing was het belangrijk een stevige basis te voorzien naar later toe. De testklassen voor unit testing werden voorzien. Hierdoor werd het merendeel van de inconsistenties en fouten reeds gedetecteerd en opgelost. Ook de integratieen systeemtesten werden uitgevoerd, weliswaar manueel. De hoofdreden hiervoor is dat de verwachte output van de applicatie bijna onmogelijk exact te defini¨eren is. Ook kan de vorige MF2PC-applicatie niet gebruikt worden als orakel aangezien er vaak kleine wijzigingen verwacht werden inzake lay-out, of dat een ander bestandstype gebruikt werd (bv. Excel 2007 i.p.v. Excel 2003). Geautomatiseerde integratie- en systeemtesten voorzien is te complex en vraagt te veel tijd. Acceptatietesten behoren niet tot een proof-of-concept en werden ook niet uitgevoerd.
7.3
Suggesties
Er worden enkele voorstellen voor uitbreidingen gedaan naar de toekomst toe. Ze vloeien voort uit ervaringen opgedaan tijdens het opstellen en implementeren van de architectuur en het ontwerp. Er volgt een beschrijving van de voorstellen.
7.3.1
Nieuw type van invoer- of uitvoerbestand
Om een nieuw type van invoerbestand toe te voegen, dient enkel een nieuwe Converterklasse, afgeleid van de interface IConverter, te worden ge¨ımplementeerd. Hierin gebeurt de conversie van de gegevens naar het intermediaire formaat (een TemporaryDocument met ´e´en of meerdere IDataElementen). De logica dient ook vervat te worden in de Factory. Een nieuw uitvoerbestandstype toevoegen gebeurt gelijkaardig. Een nieuwe instantie van de IFileCreator-interface wordt voorzien en de logica wordt eveneens toegevoegd aan de Factory. De FileCreator-klasse staat in voor het omzetten van de IDataElementen uit de TemporaryDocument naar uitvoer.
HOOFDSTUK 7. UITBREIDINGEN
7.3.2
63
Templates voor Office
De mogelijkheid om templates te gebruiken is eerder een suggestie (een extra optie) en geen requirement. Het is geen concrete case in het proof-of-concept maar maakt wel grote kans om in een uiteindelijke releaseversie aanwezig te zijn. Er zijn twee invalshoeken met betrekking tot templates. Als eerste zou er een template opgegeven worden onder de vorm van een leeg bestand met de correcte opmaak. Dit bestand wordt gekopieerd, opgevuld met data en bewaard. De tweede wijze gebruikt mailmerge-velden en is zeer interessant voor het opmaken van automatische contracten. Het bestand bevat een basistekst met mailmerge-velden die vervangen worden door de respectievelijke data. Er zijn wel enkele aanpassingen aan de orde. Zo zijn er enkele extra invoerparameters vereist; dit leidt niet tot een probleem aangezien het invoerbestand een XML-formaat volgt en dus gemakkelijk uit te breiden valt.
7.3.3
Macroverwerking op server
Server-side Office Automation wordt niet aangeraden, of ondersteund, door Microsoft omdat dit tot onstabiel gedrag of deadlocks kan leiden. [50] Microsoft stelt zelf enige alternatieven voor (zoals bv. Aspose), maar geen van deze alternatieven biedt de mogelijkheid om macro’s uit te voeren. Er dienen wel enkele zaken opgemerkt te worden bij deze requirement. MF2PC werd vroeger misbruikt als cross-platform scheduler die toeliet macro-gebaseerde Office-rapportering te schedulen vanaf mainframe. Vandaag heeft ArcelorMittal Gent hiervoor een volwaardig alternatief dat zich enkel en alleen bezighoudt met cross-platform scheduling. Er is ook een alternatief waarbij de Office-rapporten binnen de verschillende afdelingen nu ook via standaarden worden ontwikkeld. Dit laat toe het pad van Office Automation te verlaten. Deze requirement had tot doel een vlotte overgang te verzorgen en de compatibiliteit te behouden, maar een ontwerpbeslissing plaatste dit buiten de scope van het MF2PC-studentenproject.
7.3.4
Macroverwerking op pc
Om een macro te laten uitvoeren op een pc wordt het bestand automatisch geopend, waarna elke macro die op dit event reageert, uitgevoerd wordt. Er zijn hier twee mogelijkheden: de AutoOpen-macro wordt standaard uitgevoerd bij het openen van het bestand, maar het is ook mogelijk zelf een macro te schrijven die reageert op het event van het openen van het bestand. [51]
HOOFDSTUK 7. UITBREIDINGEN
7.3.5
64
Notificatie-e-mail
Het kan interessant zijn om een een e-mail ter notificatie van een uitvoering via MF2PC te krijgen. Dit is nog niet volledig geautomatiseerd, maar wel voorzien in de code. Het vereist echter opnieuw een extra invoerparameter in het jobbestand om aan te geven wie deze notificitie-e-mail wil ontvangen. De mailbox is wel zo ontworpen dat hij meerdere e-mails per job kan versturen. Een andere optie, die wel in het prototype ge¨ımplementeerd werd, is een e-mail te versturen naar opgegeven ontvangers (dit kan via e-mailadres of via userid), met een te specificeren boodschap en eventueel het gegenereerde bestand als bijlage bijgevoegd.
7.3.6
Draaitabellen in Excel
Deze optie zit inherent vervat in MF2PC. Het is niet voorzien om een draaitabel te laten construeren in een Excelwerkboek. Dit is te complex om via parameters op te geven en wordt dus best manueel gemaakt in Excel. Wat wel mogelijk en bruikbaar is voor een eindgebruiker, is het refreshen van een Excelsheet waarop een draaitabel gebaseerd is. De nieuwe data kunnen onderaan worden bijgevoegd aan het Excelsheet, of het Excelsheet kan volledig vervangen worden.
7.4
Realisaties
7.4.1
Serverlaag
Zoals reeds uitvoerig vermeld in vorige hoofdstukken, kan MF2PC zowel op een client als op een server worden gehost. Initieel lag de nadruk van het project enkel op de businesslogica. Hierbij hoorde uiteraard een omkadering om dit te hosten (op een client). Implementatie van de serverlaag was voorzien als uitbreiding. Deze serverlaag staat in voor de hosting van de applicatie op een server, maar de nadruk ligt vooral op de programmaflow hierbij. Deze uitbreiding werd met succes ge¨ımplementeerd en getest.
Deel IV
Bevindingen
65
Hoofdstuk 8
Reflectie Deze masterproef was voor mij het eerste contact met de bedrijfswereld als ingenieur en informaticus. Het heeft mij veel bijgebracht, niet alleen op technisch vlak. Het uitdiepen van mijn technische kennis en vaardigheden ligt voor de hand. Voor het eerst spendeerde ik meerdere maanden aan een groot project, of in elk geval groter dan wat er reeds in de opleiding aan bod gekomen was. Het gaf mij een accurater beeld van hoe softwareontwikkeling in zijn werk gaat op bedrijfsniveau. Niet te onderschatten hierbij is de projectplanning. Ik zou zeggen: goed gepland is half gewonnen. Daarnaast heb ik ook geleerd dat softwareontwikkeling veel meer inhoud dan enkel en alleen programmeren. Het coderen blijft uiteraard belangrijk, maar er zijn nog veel andere stappen in het ontwikkelingsproces die minstens even belangrijk zijn. Het is namelijk niet mogelijk iets te programmeren zonder te weten wat er verwacht wordt, en ook modulariteit en overzicht is moeilijk te behouden bij grotere projecten zonder vooraf een duidelijke structuur uit te tekenen. Eveneens niet te onderschatten is de presentatie van het product of project. Alles moet uiteindelijk gefinancierd worden, en dus is een goede voorstelling van het product een vereiste. Misschien is dit wel de eerste aanloop naar een carri`ere als verkoopsingenieur. Het nut van documentatie is eindelijk tot mij doorgedrongen. Waar het vroeger nog mogelijk was iedereen mondeling in te lichten tijdens de kleinere projecten op school, is het nu uiteraard niet mogelijk mijn opvolger, die het proof-of-concept zal omzetten in een releaseversie, mondeling te vertellen wat ik allemaal gedaan heb en waarom. Mijn opvolger zal ongetwijfeld beter zijn weg vinden in mijn werk dankzij de bijhorende documentatie.
66
Hoofdstuk 9
Conclusie In deze masterproef werd een softwareprogramma ontwikkeld en geoptimaliseerd voor datatransfer en -conversie van een IBM DB2-mainframe naar Windows. Tijdens de behoefteanalyse kwamen alle eisen, behoeftes en wensen van de eindgebruikers via een enquˆete aan het licht, evenals die van de applicatie. Die eisen, behoeftes en wensen werden in user requirements gegoten. Om de aanpassingen voor de gebruiker te minimaliseren, werd de gebruikersinterface zo veel mogelijk behouden. De applicatie moet bruikbaar zijn op Windows-pc’s en Windows-servers. Office Automation mag niet meer gebruikt worden, aangezien dit niet kan leiden tot volwaardige servercomponenten. Het programma moet betrouwbaar en veilig zijn. Als uitvoerbestandstypes werd verwacht: Worddocumenten, Excelwerkboeken, HTML-webpagina’s, tekst-, csv-, pdf- of XML-bestanden. De user requirements werden opgelijst met bijhorende prioriteit en versie van het prototype waarin ze gerealiseerd zullen zijn. De functionele analyse gaf aan wat er technisch nodig was om deze user requirements te realiseren. Er werd onderzocht welke mogelijkheden er waren om gegevens uit QMF te exporteren en tot welke type van databestand dit leidt (bijv. IXF-, QMF- of HTML-formaat). De overdracht van dit databestand gebeurt via ftp voor serververwerking en via het wsa-protocol voor verwerking op een client-machine. De conversie aan Windows-zijde wordt opgedeeld in drie stappen. Eerst wordt het databestand ingelezen en omgevormd tot een intermediair formaat. Nadien wordt van dit intermediair formaat het doelbestand gecre¨eerd. Tot slot volgt de naverwerking zoals e-mailing. Voor de creatie van Office-bestanden werd beroep gedaan op een externe API. Er werden verschillende API’s onderzocht en Aspose kwam eruit als beste voor zowel Word- als Excelbestanden. De architectuur gaf een beeld van de opbouw van de applicatie op hoger abstract niveau. Hier werd gekozen voor een modulaire aanpak. De applicatie werd opgedeeld in twee componenten. Zo is er een transfercomponent die de overdracht van de gegevens verzorgt van het mainframe naar een Windows-omgeving; deze component bevindt zich op het mainframe. Er is ook een conversiecomponent die de gegevens omvormt tot het doelformaat; deze component is te vinden op de Windows-machines.
67
HOOFDSTUK 9. CONCLUSIE
68
Het ontwerp diept deze architectuur dieper uit tot op een lager niveau. De conversiemodule, ontworpen in .NET, kan onderverdeeld worden in twee componenten. Enerzijds is er de businesslogica die de werking van het programma voorstelt. Anderzijds is er de hosting; de conversiecomponent kan namelijk gehost worden als service op een server of als executable op een client. Tot slot werden er nog enkele uitbreidingen opgelijst. Sommige punten zijn louter theoretisch omschreven; andere items zijn reeds voorzien in de architectuur en het ontwerp. In de wereld van IT betekent stilstaan achteruitgaan. Met deze nieuwe MF2PC-tool worden alle gebreken van de vorige versie volledig weggewerkt. De transfercomponent op het mainframe is tot een minimum herleid en de focus ligt bij de conversiecomponent aan Windowszijde. De eindgebruikers kunnen nu Office 2007-, pdf- en XML-bestanden cre¨eren en ook de veiligheid en robuustheid van een MF2PC-server is significant gestegen. Het proof-of-concept geeft een zeer goede en duidelijke aanzet voor de implementatie van de releaseversie. Meer uitbreidingen zijn mogelijk, maar niet noodzakelijk voor een correcte en juiste werking van MF2PC. Deze masterproef was voor mij een zeer leerrijke, aangename en boeiende ervaring. Ik hoop dat deze scriptie u evenveel heeft kunnen boeien als ze mij maandenlang geboeid heeft.
Literatuurlijst [1] IBM (2007). Using DB2 QMF. Geraadpleegd op 12 december 2012 via http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.qmf9. doc.using/dsqgs090.pdf [2] IBM (2012). Introducing DB2 QMF. Geraadpleegd op 12 december 2012 via http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.qmf9. doc.intro/dsqgi091.pdf [3] IBM (2010). Developing DB2 QMF Applications. Geraadpleegd op 12 december 2012 via http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.qmf9. doc.dev/c1896871.pdf [4] IBM (2011). DB2 QMF Reference. Geraadpleegd op 23 november 2012 via http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.qmf9. doc.ref/dsqrf091.pdf [5] IBM (2008). DB2 QMF Messages and Codes. Geraadpleegd op 23 november 2012 via http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.qmf9. doc.mandc/c1896881.pdf [6] Microsoft MSDN (2013). Geraadpleegd op 27 februari 2013 via http://msdn. microsoft.com/nl-nl/ [7] Wikipedia ArcelorMittal (2013). Geraadpleegd op 25 februari 2013 via http://nl. wikipedia.org/wiki/ArcelorMittal [8] Geschiedenis van ArcelorMittal (z.j.). Geraadpleegd op 26 februari 2013 via http: //www.arcelormittal.com/corp/who-we-are/our-history [9] Geschiedenis van ArcelorMittal Gent (z.j.). Geraadpleegd op 15 februari 2013 via http://www.arcelormittalgent.com/prg/selfware.pl?id_sitemap=29 [10] ArcelorMittal Factbook 2010 (2011). Geraadpleegd op 26 februari 2013 via http://www.arcelormittal.com/corp/~/media/Files/A/ArcelorMittal/ investors/fact-book/2010/658-4-0-ARC_FB10.pdf [11] Franklin, B. (1905). Advice to a Young Tradesman. In A. Smyth, The Writings of Benjamin Franklin vol. 2, pp. 370-372. New York: Macmillan. [12] Cnops, J. (2005). Programmaontwerp en -realisatie: . (1ste druk). Tielt: Lannoo.
69
LITERATUURLIJST
70
[13] Scrum Guide (2011). Geraadpleegd op 22 mei 2013 via http://www.scrum.org/ Portals/0/Documents/ScrumGuides/Scrum_Guide.pdf [14] Abran, A. & Moore, J. W. (2004). Guide to the Software Engineering Body of Knowledge. Geraadpleegd op 13 maart 2013 via http://www.nt.fh-koeln.de/ fachgebiete/inf/nissen/softeng/swebok.pdf [15] PascalCasing (2012). Geraadpleegd op 13 maart 2013 via http://c2.com/cgi/wiki? PascalCase [16] OOXML (2005). Geraadpleegd op 26 maart 2013 via https://www.microsoft.com/ en-us/news/features/2005/nov05/11-21Ecma.aspx [17] ASPOSE.Words (onbekend). Geraadpleegd op 5 september 2012 via http://www. aspose.com/.net/excel-component.aspx [18] ASPOSE.Cells (onbekend). Geraadpleegd op 5 september 2012 via http://www. aspose.com/.net/word-component.aspx [19] Independentsoft Word .NET (onbekend). Geraadpleegd op 5 september 2012 via http://www.independentsoft.de/word/ [20] Independentsoft Spreadsheet .NET (onbekend). Geraadpleegd op 5 september 2012 via http://www.independentsoft.de/spreadsheet/ [21] Gembox.Document (onbekend). Geraadpleegd op 5 september 2012 via http://www. gemboxsoftware.com/document/overview [22] Gembox.Spreadsheet (onbekend). Geraadpleegd op 5 september 2012 via http:// www.gemboxsoftware.com/spreadsheet/overview [23] Spire.Doc (onbekend). Geraadpleegd op 5 september 2012 via http://www. e-iceblue.com/Introduce/word-for-net-introduce.html [24] Spire.XLS (onbekend). Geraadpleegd op 5 september 2012 via http://www. e-iceblue.com/Introduce/excel-for-net-introduce.html [25] Bytescout document SDK for .NET (onbekend). Geraadpleegd op 5 september 2012 via http://bytescout.com/products/developer/documentsdk/index.html [26] Bytescout spreadsheet SDK for .NET (onbekend). Geraadpleegd op 5 september 2012 via http://bytescout.com/products/developer/spreadsheetsdk/ bytescoutspreadsheetsdk.html [27] SoftArtisans OfficeWriter (onbekend). Geraadpleegd op 5 september 2012 via http: //www.officewriter.com/ [28] Excel package (onbekend). Geraadpleegd op 5 september 2012 via http:// excelpackage.codeplex.com/ [29] Word package (onbekend). Geraadpleegd op 5 september 2012 via http:// wordpackage.codeplex.com/ [30] SmartXLS (onbekend). Geraadpleegd op 5 september 2012 via http://www. smartxls.com/
LITERATUURLIJST
71
[31] ExtremeML (onbekend). Geraadpleegd op 5 september 2012 via http://extrememl. codeplex.com/ [32] Export to Excel (onbekend). Geraadpleegd op 5 september 2012 via http://www. mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm [33] OpenExcel (onbekend). Geraadpleegd op 5 september 2012 via http://openexcel. codeplex.com/ [34] SpreadsheetGear 2010 (onbekend). Geraadpleegd op 5 september 2012 via http: //www.spreadsheetgear.com/ [35] ComponentOne Spread .NET (onbekend). Geraadpleegd op 5 september 2012 via http://www.componentone.com/SuperProducts/SpreadWin/ [36] ComponentOne ActiveReports (onbekend). Geraadpleegd op 5 september 2012 via http://www.componentone.com/SuperProducts/ActiveReports/ [37] Open XML SDK (onbekend). Geraadpleegd op 5 september 2012 via http://www. microsoft.com/en-us/download/details.aspx?id=5124 [38] Apache POI (onbekend). Geraadpleegd op 5 september 2012 via http://poi. apache.org/ [39] Docx4j (onbekend). Geraadpleegd op 5 september 2012 via http://www.docx4java. org/trac/docx4j [40] Visual Studio Tools for Office (onbekend). Geraadpleegd op 5 september 2012 via http://msdn.microsoft.com/en-us/office/hh133430.aspx [41] Aspose (2012). Geraadpleegd op 25 maart 2013 via http://www.aspose.com/.net/ total-component.aspx [42] Software Architecture Definitions (onbekend). Geraadpleegd op 11 mei 2013 via http: //www.sei.cmu.edu/architecture/start/glossary/classicdefs.cfm [43] Kruchten, P. (1995). Architectural Blueprints. IEEE Software,12, nr. 6, pp. 4250. Geraadpleegd op 12 mei 2013 via http://www3.software.ibm.com/ibmdl/pub/ software/rational/web/whitepapers/2003/Pbk4p1.pdf [44] Eden, A. H. & Kazman, R. (2003). Architecture, Design, Implementation. Geraadpleegd op 10 mei 2013 via http://www.eden-study.org/articles/2003/icse03. pdf [45] Design Patterns (onbekend). Geraadpleegd op 12 mei 2013 via http:// sourcemaking.com/design_patterns [46] Microkernel Pattern (2009). Geraadpleegd op 16 mei 2013 via http://viralpatel. net/blogs/microkernel-architecture-pattern-apply-software-systems/ [47] OODesign (onbekend). Geraadpleegd op 12 mei 2013 via http://www.oodesign. com/
LITERATUURLIJST [48] Balking Design Pattern (2012). Geraadpleegd op 12 mei 2013 http://social.technet.microsoft.com/wiki/contents/articles/13235. balking-design-pattern.aspx
72 via
[49] Black, R. (2009). Managing the Testing Process: Practical Tools and Techniques for Managing Hardware and Software Testing. (3de druk). Indianapolis: Wiley Publishing, Inc. [50] Considerations for server-side Automation of Office (2013). Geraadpleegd op 20 mei 2013 via http://support.microsoft.com/kb/257757/en-us [51] Running a macro when Excel starts (2013). Geraadpleegd op 20 mei 2013 via http://office.microsoft.com/en-us/excel-help/ running-a-macro-when-excel-starts-HA001034628.aspx
Bijlage A
Inhoud van cd-rom De cd-rom die achteraan deze scriptie te vinden is bevat volgende inhoud: • broncode van het programma • demo • interne documenten • logboek • poster • scriptie • uitgebreid voorstel • website