DEPARTEMENT BEDRIJFSINFORMATIE BINF OPLEIDING TOEGEPASTE INFORMATICA Schoonmeersstraat 52 9000 GENT ACADEMIEJAAR 2008-2009
STAGEDOSSIER ONDERWERP: DEX - DataExplorer
STUDENTEN: Stijn Courtheyn, Bart Wulteputte ADRES: John Kennedylaan 51 BEDRIJF: ArcelorMittal Gent STAGEBEGELEIDER: Heidi Roobrouck STAGEMENTOR: Koen Cauwels
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
Voorwoord Sinds het eerste jaar Toegepaste Informatica hebben we al vakoverschrijdende projecten gekregen. Maar het is pas nu, in het derde en laatste jaar dat we voor drie maand eens kunnen proeven van het bedrijfsleven. We kunnen er onze verworven kennis eens toetsen aan de praktijk, ook de communicatieve en sociale aspecten komen tijdens de stage ruimschoots aan bod. Wij bedanken alvast Koen Cauwels, domeinverantwoordelijke Logistiek, maar ook Nancy Coppens, ITSupply en Luc Vandeputte, Staalfabriek, onze stagementoren. Ook volgende mensen willen we graag bedanken: -
Mevrouw Van Achter (stagecoördinator) Mevrouw Roobrouck (stagebegeleider)
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
Inhoud Voorwoord........................................................................................................................................ 2 Inhoud .............................................................................................................................................. 3 Inleiding ............................................................................................................................................ 5 1
Bedrijf .................................................................................................................................... 6
2 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.3 2.3.1 2.3.2 2.4
Opdracht ................................................................................................................................ 7 Geschiedenis..................................................................................................................................... 7 SQL Server Reporting Services (SSRS)............................................................................................... 7 SQL Server ReportBuilder (SSRB) ...................................................................................................... 8 SQL Server Analysis Services – Cubes (SSAS) .................................................................................... 8 QueryBuilder .................................................................................................................................... 9 Conclusie .......................................................................................................................................... 9 DataExplorer ..................................................................................................................................... 9 Huidige situatie............................................................................................................................... 10 QueryTool ....................................................................................................................................... 10 DataExplorer ................................................................................................................................... 10 Toekomst ........................................................................................................................................ 10
3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10 3.2.11 3.2.12 3.2.13 3.3 3.4 3.5 3.6 3.6.1 3.7
Analyse ................................................................................................................................ 11 Bestaande programma’s ................................................................................................................ 11 Requirements ................................................................................................................................. 11 Overzicht queries (QueryTree) ....................................................................................................... 11 Overzicht tabellen (tableTree)........................................................................................................ 11 Datagrid .......................................................................................................................................... 11 Pivotgrid ......................................................................................................................................... 11 Parametergrid................................................................................................................................. 12 Queries ........................................................................................................................................... 12 Grafieken ........................................................................................................................................ 12 Security ........................................................................................................................................... 12 QueryBuilder .................................................................................................................................. 12 Algeneme requirements ................................................................................................................. 13 Fat cliënt ......................................................................................................................................... 13 Database ......................................................................................................................................... 13 Logging............................................................................................................................................ 13 Use cases ........................................................................................................................................ 14 Database ontwerp .......................................................................................................................... 15 Security ........................................................................................................................................... 17 Architectuur.................................................................................................................................... 19 Webservices ................................................................................................................................... 20 Prototype ........................................................................................................................................ 21
4 4.1 4.1.1 4.1.2 4.1.3
Implementatie ..................................................................................................................... 22 Gebruikte tools ............................................................................................................................... 22 Microsoft Office Visio 2003 ............................................................................................................ 22 Visual Studio 2008 .......................................................................................................................... 22 Visual SourceSafe ........................................................................................................................... 22
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
4.1.4 4.1.5 4.1.6 4.1.7 4.2 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.4 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.5 4.5.1
SQLServer 2005 .............................................................................................................................. 22 DevExpress ..................................................................................................................................... 22 ProEssensials ...................................................................................... Error! Bookmark not defined. ActiveQueryBuilder ........................................................................................................................ 23 DexTree .......................................................................................................................................... 24 Node ............................................................................................................................................... 25 NodeType ....................................................................................................................................... 26 DexTree .......................................................................................................................................... 26 Hoe DexTree gebruiken (voorbeeld) .............................................................................................. 28 DexTree – Database........................................................................................................................ 30 Uitlezen WHERE uit query .............................................................................................................. 31 WHERE zoeken ............................................................................................................................... 32 Parameters zoeken ......................................................................................................................... 33 Begin van de waarde zoeken .......................................................................................................... 34 De rest van de waarde ophalen...................................................................................................... 35 Veldnaam........................................................................................................................................ 36 Aanpassen WHERE uit query .......................................................................................................... 38 Initialiseren indexen ....................................................................................................................... 38 Overlopen parameters ................................................................................................................... 38 Parameter wordt gebruikt .............................................................................................................. 39 Parameter wordt niet gebruikt ...................................................................................................... 39 Ophalen nieuwe value .................................................................................................................... 41 XtraChart ........................................................................................................................................ 43 Problemen ...................................................................................................................................... 43
5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10
Testen .................................................................................................................................. 44 Test 2009-04-08.............................................................................................................................. 44 Test 2009-04-09.............................................................................................................................. 45 Test 2009-04-10.............................................................................................................................. 46 Test 2009-04-23.............................................................................................................................. 46 Test 2009-04-24.............................................................................................................................. 47 Test 2009-04-27.............................................................................................................................. 48 Test 2009-04-29.............................................................................................................................. 48 Test 2009-04-30.............................................................................................................................. 49 Test 2009-05-04.............................................................................................................................. 49 Test 2009-05-05.............................................................................................................................. 50
Besluit ............................................................................................................................................ 51 Lijst van figuren ............................................................................................................................... 52 Lijst van codevoorbeelden ............................................................................................................... 53
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
Inleiding Bij aanvang van de stage was het zo dat er 2 tools gebruikt werden op ArcelorMittal die in weze hetzelfde doen. Beide tools zijn rapporteringstools die als doel hebben data ophalen uit verschillende soorten databases en vervolgens acties op deze data uit te voeren (dataweergave,datamanipulatie,rapportering, …). De eerste tool, genaamd QueryTool werd ontwikkeld door IT-Supply en werd eigenlijk min of meer tegelijkertijd ontwikkeld met de andere tool genaamd DataExplorer die ontwikkeld werd door de Staalfabriek. Beide tools dienen om queries te laten uitvoeren op verschillende soorten databases. Maar QueryTool (QTL) is ontstaan uit het standpunt van maand / jaar rapporten terwijl DataExplorer vooral sterk is in het grafisch weergeven van de data in grafieken. Het is onze opdracht om de sterke punten van deze 2 tools te combineren in 1 applicatie. Sterke punten QTL -
Security Rapporten / draaitabellen Grafische querybuilder
Sterke punten DataExplorer -
Grafieken DexTree Eigen querybuilder
Deze nieuwe tool zal door het leven gaan als DEX - DataExplorer
Stage 2008-2009
1
Bart Wulteputte – Stijn Courtheyn
6
Bedrijf
ArcelorMittal Gent, voor velen beter bekend als Sidmar, is al sinds 1962 in Gent actief. De groep telt 61 bedrijven in 27 landen en stelt wereldwijd een 320.000 mensen te werk . Dankzij de ligging in Gent is deze site één van de belangrijkste in Europa. In het geheel produceert ArcelorMittal een 110 miljoen ton ruwstaal per jaar, daarvan wordt vijf ton in Gent geproduceerd en dit vooral voor: -
Koetswerken auto’s Vaten en metalen verpakkingen Radiatoren Bouwelementen (trappen, plafonds, muurbekleding, …) Meubelen Huishoudapparaten Buizen Rollend spoorwegmaterieel Wegenuitrusting (verkeersborden, …)
Het idee om een staalbedrijf in Gent op te richten dateren van voor 1962, namelijk in 1928 gaf Arbed Luxemburg de opdracht om een terrein te kopen aan het kanaal Gent-Terneuzen. Zo werd deze eigenaar van 211ha grond aan de rechteroever van het kanaal. Maar door de Tweede Wereldoorlog kon men pas beginnen in 1962. De effectieve opbouw begon pas een jaar later.
Stage 2008-2009
2
Bart Wulteputte – Stijn Courtheyn
7
Opdracht
Onze opdracht bestaat uit het ontwikkelen van een generieke querytool.
2.1
Geschiedenis
In vele departementen van ArcelorMittal groeide de nood aan een tool om op een eenvoudige mannier data op te vragen, deze visueel weer te geven in tabellen, pivots1 en grafieken en om op basis hiervan rapporten op te stellen. Vooral op de medische dienst was de nood het hoogst aan een betrouwbaar en efficiënt systeem. Zo is men op zoek gegaan naar een aantal oplossingen. Tijdens deze zoektocht heeft men enkele tools met elkaar vergeleken die dezelfde functionaliteit bieden. Zo werden SQL Server Reporting Service, SQL Server ReportBuilder, SQL Server Analysis service en de mogelijkheid om zelf een systeem te ontwerpen onderzocht en onderling vergeleken. 1. QueryTool (VB.net toepassing)
2. SQL Server Reporting Services
Be.Sidmar.RIS.MDRapporteringstool.exe
WAM (Oracle)
Beperkte set van tabellen en views
3. SQL Server ReportBuilder
Visual Studio 2005: rapporten aanmaken
WAM (Oracle)
Publiceren op Intranet
Alle tabellen en views
Intranet: ReportBuilder opstarten
WAM (Oracle)
Copy data
WAM_SQL (SQL server) Beperkte set van tabellen en views (aparte server)
4. SQL Server Analysis Services –> Cubes (Excel)
SQL Server Analysis Services: Cubes aanmaken
WAM (Oracle)
Copy data
WAM_SQL (SQL server)
Cubes: beperkte set van tabellen en views (aparte server)
Figuur 1: Voorstudie QueryTool
2.1.1 SQL Server Reporting Services (SSRS) Informatie: Reporting Services is een server gebaseerde oplossing op rapporten te beheren. De sterkte van deze tool komt vooral naar voor wanneer men het databeheer van SQL Server gaat combineren met Microsoft Office om zo realtime informatie weer te geven Voordelen: -
Rechtstreekse verbinding met Oracle DBMS2; Verzorgde rapport lay-out; Eenvoudige export naar Excel en PDF
Nadelen: -
1 2
Hoge instapdrempel voor eindgebruiker (Visual Studio 2005 omgeving) Elk rapport kan maar tot één categorie behoren
Pivot: Draaitabellen DBMS: Database Management Systeem
Stage 2008-2009 -
Bart Wulteputte – Stijn Courtheyn
Access rapporten niet meer bruikbaar Te weinig beveiliging Overzicht querries gaat verloren
2.1.2 SQL Server ReportBuilder (SSRB) Informatie: ReportBuilder is een applicatie die via het web wordt gedistribueerd. De gebruiker kan in deze applicatie snel rapporten genereren Voordelen: -
Beveiliging (afscherming tabellen) Gebruiksvriendelijkheid ReportBuilder-omgeving
Nadelen: -
Enkel verbinding met SQL Server Access rapporten niet meer bruikbaar Opleiding personeel nodig ReportBuilder rapporten kunnen niet gepubliceerd worden naast Reporting Services rapporten. Extra ReportBuilder server nodig Medische dienst meer nood aan querybuilder dan aan rapportering
2.1.3 SQL Server Analysis Services – Cubes (SSAS) Informatie: Analysis Services geeft de gebruiker de mogelijkheid om data te bekijken die de basis vormt voor de rapporten, OLAP3 analyses, KPI4 en data mining. Voordelen: -
Gebruiksvriendelijkheid van Excel
Nadelen: -
3 4
Cube op regelmatige tijdstippen heropbouwen (als de onderliggende Oracle data wijzigt) Beveiliging (queries niet afgeschermd) Datawarehousing is een zware oplossing voor de vereisten die de medische dienst nodig heeft. Access-queries niet herbruikbaar Extra Analysis server Geen ervaring met cubes binnen Arcelor → opleiding nodig
OLAP: Online analytical processing KPI: Key Performance Indicator
8
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
2.1.4 QueryBuilder Informatie: QueryBuilder is eigenlijk het zelf ontwerpen van een systeem op maand / jaar rapporten te genereren. Deze applicatie (QueryTool) is ontwerpen door de dienst Informatica in ArcelorMittal Gent Voordelen: -
Rechtstreeks naar Oracle-database Beveiliging (queries en tabellen afschermen) Hergebruik Access-queries Rapporten uit Reporting Services Uitgebreide mogelijkheden op datagrid Zelfde functionaliteit als huidige VB6-toepassing
Nadelen: -
SQL-syntax (Query designer beschikbaar) Thin client (Afhankelijk van een webservice om data op te halen)
2.1.5 Conclusie De SSRS viel al snel af omdat deze een te hoge instapdrempel had voor de gewone gebruiker. De SSRB en de SSAS waren in dat opzicht beter, maar hier was men verplicht om alle data van de verschillende databases te kopiëren naar een SQL Server database. Zo kwam men tot de conclusie om zelf een systeem te ontwerpen. In januari was dit systeem (QueryTool - QTL) reeds actief bij de medische dienst waar de nood om een dergelijk systeem het hoogst was. De QTL applicatie werd na het succes in de medische afdeling al snel overgenomen in andere afdelingen.
2.2
DataExplorer
Informatie: DataExplorer vindt zijn oorsprong in de staalfabriek (departement STL, Luc Van De Putte – Filip Willems). Deze tool is vooral ontwikkeld om grafieken te maken / bekijken op basis van data uit verschillende relationele databases. Het wordt vooral gebruikt door proces ingenieurs om zo de vooruitgang van de processen te volgen. Voordelen: -
snel weergeven van grafieken schaal snel aanpasbaar gebruiker kan zelf grafieken maken alle ODBC databases ondersteund Rich cliënt (niet afhankelijk van webservice voor data van db’s op te halen)
Nadelen:
9
Stage 2008-2009 -
2.3
Bart Wulteputte – Stijn Courtheyn
10
weinig beveiliging geen ondersteuning voor pivot tabellen
Huidige situatie
2.3.1 QueryTool Momenteel draait QTL op vijf verschillende afdelingen (GHV5, STI6, MIL7, DS28 en BDG9). En wordt dagelijks gebruikt om rapporten te maken / bekijken.
2.3.2 DataExplorer DataExplorer wordt dagelijks gebruikt in ArcelorMittal Gent en Bremen en kan gebruikt worden om gegevens van bijvoorbeeld de Belgo staalfabriek in Brazilië te raadplegen.
2.4
Toekomst
Nu in 2009 wil men de sterke kanten van de twee tools met elkaar combineren in een nieuwe applicatie “Dex – DataExplorer” en dit is onze opdracht. QTL is sterk in: -
Queries Pivots Grafische QueryBuilder (zoals in Access) Beveiliging
Terwijl DataExplorer sterk is in: -
Grafieken Eigen QueryBuilder Rich Cliënt Aanpasbare schermindeling
Zo worden de zwakke punten van de twee tools opgevangen. Het project zorgt ook voor andere voordelen zoals de onderhoudbaarheid. Men zal slechts één metadatabase worden gebruikt en één VB.net applicatie.
5
GHV: Grondstoffen, Haven en Vervoer STI: Studiedienst MIL: Milieudienst 8 DS2: Decosteel 2 9 BDG: Bedrijfsgeneeskunde 6 7
Stage 2008-2009
3
Bart Wulteputte – Stijn Courtheyn
Analyse
Vooraleer we natuurlijk één letter kunnen coderen moeten we eerst door de analyse.
3.1
Bestaande programma’s
We hebben eerst een introductie gekregen in de bestaande programma’s. Zo hebben we de gebruikershandleidingen en / of programmeurhandleiding gekregen. Ook kwamen snel de requirements naar boven.
3.2
Requirements
Zowel Nancy Coppens als Luc Vandeputte hebben elk hun eisen van wat er minstens in het nieuwe programma zou moeten zitten en enkele nieuwe zaken. Het is aan ons om deze allemaal samen te zetten.
3.2.1 Overzicht queries (QueryTree) -
Overzicht van de queries in een boomstructuur (queryID beschikbaar in edit scherm) Zoeken in de boom (zoek tekstvak) Na uitvoeren query -> hou bij wie deze heeft uitgevoerd Toevoegen nieuwe nodes (ervoor, erachter, in) Toon verschil tussen een category, query en grafiek Bij opbouwen boom, hou rekening met de security
3.2.2 Overzicht tabellen (tableTree) -
Toon aantal kolommen van een tabel naast de tabelnaam Toon de alternative naam indien beschikbaar Toon alleen de tabellen die gedefineerd zijn in de database (security) Zoek functie
3.2.3 Datagrid -
Opslaan en laden lay-out op HD of netwerk Sorteren Groeperen Zoeken / filter Totalen (aantal, som, gemiddelde,…) Exporteren naar Excel en PDF Print preview
3.2.4 Pivotgrid -
Type Totalen aanpassen (som, aantal, …) Tonen / verbergen subtotalen, totalen (zowel voor kolom als rij) Opslaan en laden lay-out
11
Stage 2008-2009 -
Bart Wulteputte – Stijn Courtheyn
12
Exporteren naar Excel en PDF Print preview
3.2.5 Parametergrid -
Parameter editerbaar of niet (QuertTool) Parameters ophalen met een apparte query (autofetch parameters in DataExplorer) Globale variabelen (&n) Indien een datum -> datetime picker
3.2.6 Queries -
Verwijderen van een query -> stel een ja / nee veld in, verwijder niet effectief uit de db Per query meerdere grafieken toelaten Indien een nieuwe query, laad gegevens van een vorige geëditeerde query (indien mogelijk)
3.2.7 Grafieken -
Meerdere grafieken onder 1 query -> toon alle grafieken Laden en opslaan van grafiekgroepen Schalen X en Y as Alle grafieken met een numerieke X-as moeten synchroon schalen Over een grafiekpunt gaan -> duid overeenkomstige rij aan in de datagrid Laad de overeenkomstige datagrid bij het klikken op een grafiek Snel editeren grafiek (offset, factor, color) Kleuren legende per grafiek Grafiek layout aanpassen (geen grafieken, 1 * 1, 1 * 2,…), maximaal 6 grafieken Regressielijn + regressievergelijking Grafiektypes: Box Whisker, Trend, Bar, Stacked bar, X-Y, Csum, Histogram Automatische refresh van data / grafiek om de … seconden Grafieken moeten niet numerieke data op de X-as ondersteunen
3.2.8 Security -
Verschillende types: Active Directory gebaseerd, gebruikersgebasseerd) Keuze tussen wel en geen security Aanmelden als andere gebruiker Queries afschermen van andere gebruikers Querybeheer (gebruikers toewijzen aan queries)
3.2.9 QueryBuilder -
Keuze tussen de eigen gemaakte query builder (zie DataExplorer) of de ActiveQueryBuilder (zie QueryTool) Zorg dat de prefix voor de tabelnamen klopt Globale variabelen kunnen gebruiken Opslaan / wijzigen queries
Stage 2008-2009 -
Bart Wulteputte – Stijn Courtheyn
Bestaande query kopiëren (zoals in QueryTool)
3.2.10 Algeneme requirements -
Split containers (lay-out scherm) Overerving (zodat andere applicaties deze applicatie kunnen integereren) Bestaande metadata van QueryTool en DataExplorer overnemen Nieuw datamodel (gebruik engelse namen voor tabellen en kolommen, genormaliseerd) Vertaling, standaard Engels Menu balk Help functie Impactbeheer, indien een kolom of tabel zou wijzigen, hoeveel queries moeten er wijzigen
3.2.11 Fat cliënt -
Verbinding met de metadatabase via de gebruiker MgrDEX (impersonation)
3.2.12 Database -
Metadata in SQL Server 2005 of Access (om demo redenen) Database query data: SQL Server, RDB, DB2, Access, Oracle,…
3.2.13 Logging -
Bij elke consultatie / wijziging van een query
13
Stage 2008-2009
3.3
Bart Wulteputte – Stijn Courtheyn
14
Use cases
Nadat we alle requirements hebben, kunnen we starten met de use-cases uit te werken. Deze omschrijven hoe het systeem moet reageren. Maar dit is echter eenvoudiger gezegd dan gedaan. Al snel bleek dat er af en toe tegenstrijdige elementen waren die een mogelijke struikelblok zouden kunnen vormen, bijvoorbeeld betreffende de beveiliging. Sommige willen geen beveiliging terwijl anderen wel weer. Tijdens het uitwerken van deze use cases hebben we ook een database ontwerp opgesteld en een prototype om het visueel voor te stellen hoe het programma er ongeveer zou uitzien. De complexiteit wordt uitgedrukt in H (=hoog), M (=gemiddeld), L (=laag) Een overzicht:
Query / grafiek overzicht Toon queries / grafieken in een boom Verwijderen categorie, query of grafiek Nieuwe categorie toevoegen Nieuwe query toevoegen Nieuwe grafiek toevoegen Verplaatsen van een node Zoeken in de boom Een nodenaam wijzigen Query Query parameters Query uitvoeren Query opslaan / laden Query editeren Grafieken Teken grafiek Grafiek exporteren Grafiek – datagrid Grafiek opslaan / laden Grafiek editeren Grafiek groepen Maken groep
Omschrijving
Complexiteit
Toon de queries / grafieken in een boom, rekeninghoudend met de security Hoe moet een categorie, query of grafiek worden verwijderd uit de boom Laat de gebruiker een nieuwe categorie toevoegen Laat de gebruiker een nieuwe query toevoegen Laat de gebruiker een nieuwe grafiek toevoegen Welke node kan naar waar verplaatst worden Zoek in de boom Laat de gebruiker toe om een naam van een bestaande node te wijzigen
H
Toon de query parameters voor het uitvoeren en laat de gebruiker toe deze te wijzigen Voer de query uit, maar controleer eerst de parameters Query oplaan en laden uit de metadatabase Query editeren
H
Grafiek tekenen op het scherm Grafiek exporteren naar Excel, afbeelding, PDF Overeenkomstige grafiekpunt en datagrid rij selecteren Grafiek opslaan en laden uit de metadatabase Editeren van een grafiek
H L L
Een grafiekgroep maken van de getekende grafieken op het scherm
M
L L L M L L
M L M
L M
Stage 2008-2009 Editeren groep Verwijderen groep Groep opslaan als Datagrid Exporteren datagrid Filter Lay-out opslaan Totalen Pivot Exporteren pivot Lay-out opslaan QueryBuilder Nieuwe tabel toevoegen Een categorie of tabel verwijderen Verplaatsen van een node Wijzigen van de tabelnaam Alternative namen voor de kolommen Gebruikersinstellingen Laden / opslaan Beheertools Querybeheer Gebruikersbeheer Aanmelden als
3.4
Bart Wulteputte – Stijn Courtheyn
15
Een grafiekgroep wijzigen in het detail scherm of via het hoofdschem Een bestaande grafiekgroep verwijderen Een bestaande grafiekgroep opslaan als een andere groep
M
Exporteren naar Excel, PDF,…, print preview Filteren van de beschikbare data De huidige layout van de grid bewaren Toon totalen per kolom (en gebruiker kan deze wijzigen)
L L L L
Exporteren naar Excel, PDF, …, print preview De huidige layout van de pivot opslaan
L L
Een nieuwe tabel toevoegen in de boom Een bestaande categorie of tabel verwijderen uit de boom Welke node mag naar waar verplaatst worden De gebruiker kan een alternative naam aan een tabel toekennen Definieer alternative namen voor de kolommen van een bepaalde tabel
L L
Gebruikersinstellingen laden en opslaan indien gewijzigd
M
Query aan een gebruiker toekenen Nieuwe gebruikers aanmaken Aanmelden als een andere gebruiker (rekeninghoudend met de security)
M L M
L M
M L L
Database ontwerp
Bij het nieuwe programma hoort natuurlijk ook een nieuwe database structuur. Zo krijgen we de opdracht deze uit te werken in Visio. Deze is natuurlijk tijdens het uitwerken enkele keren veranderd. We moeten ook zoveel mogelijk rekening houden dat de gegevens van de bestaande databases in deze nieuwe passen. Hiervoor hebben we enkele keren samen gezeten met mevr. Coppens (QueryTool). De uiteindelijke databasestructuur is de volgende:
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
16
Stage 2008-2009
3.5
Bart Wulteputte – Stijn Courtheyn
17
Security
In bepaalde afdelingen wilt men dat ze queries kunnen afschermen van andere gebruikers en dat er een soort lagensysteem is voor de gebruikers. Terwijl ze op andere afdelingen willen dat iedereen gelijk is. Om dit probleem “Geen en wel security” op te lossen hebben we geopteerd om te werken op 2 niveaus. 1. Gebruikersniveau: Elke gebruiker krijgt een profiel toegewezen binnen een bepaald datadomein10 2. Active directory niveau: Elke gebruiker krijgt het zelfde profiel binnen een datadomein afhankelijk van de Active directory groepen waartoe de gebruiker behoort. De profielen: 1. DXPCCel Deze personen mogen alles over alle datadomeinen heen. 2. DXManagerIT Een IT manager mag nieuwe databaseconnecties toevoegen aan zijn datadomein en inloggen als een andere gebruiker binnen zijn domein 3. DXManager Een manager mag queries en grafieken editeren en nieuwe gebruikers toevoegen aan zijn datadomein met het profiel DXViewer 4. DXViewer Een viewer mag enkel consulteren van queries en grafieken maar mag ook van de queries de parameters wijzigen.
10
Datadomein: een groep die een kennisgebied beschrijft. Het kan overeenkomen met een afdeling, een deel van een afdeling of verschillende afdelingen samen
Stage 2008-2009
Figuur 2: Profielen
Bart Wulteputte – Stijn Courtheyn
18
Stage 2008-2009
3.6
Bart Wulteputte – Stijn Courtheyn
Architectuur
Elke applicatie die ontwikkeld wordt in ArcelorMittal moet voldoen aan een bepaalde structuur. Zo moeten we rekening houden met het lagen systeem -
Human Interface Component: de presentatielaag, zorgt voor de interactie tussen de gebruiker en het programma Business Service: een facade voor de business logica van de applicatie zodat de bovenliggende laag geen directe toegang krijgt om de data Database
De architectuur van Dex-DataExplorer ziet er als volgt uit:
Figuur 3: Architectuur
Bovenaan ziet u de effectieve HIC.exe. Het zal deze applicatie zijn die de gebruiker zal uitvoeren. Maar u ziet dat deze eigenlijk overerft van de Base.
19
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
20
In de Base zitten namelijk al onze schermen, dus eigenlijk ook een soort HIC maar deze resulteert in een dll bestand. Door de overerving toe te passen is het ook mogelijk dat andere applicatie zoals voor de baanweegbrug dit project kunnen integreren. Base heeft ook verbinding met een tal van soorten databases. Deze databases bevatten de effectieve data waar de queries worden op uitgevoerd. In de laag daaronder zit u twee componenten: -
Resources: deze bevat de vertaling van het programma (Nederlands, Frans en Engels). De stippellijn wijst erop dat deze at runtime wordt gekoppeld aan het programma
-
Hic.Controls.dll: bevat onze eigen gecreëerde componenten.
De onderste laag staat in om de data uit de metadatabase door te geven aan onze HIC. Deze is in twee delen opgeplitst. Het linkse (ApplicationSecurity) staat in om alles te bepalen wat een gebruiker al dan niet mag doen, het rechtse (BS) is voor de selects, updates, deletes naar de metadatabase. De verbinding naar deze metadatabase wordt gemaakt met de functionele gebruiker MgrDex.
3.6.1 Webservices Normaal werkt men ook met webservices tussen de HIC en de database. Maar omwille van performance redenen en om de applicatie draagbaar te houden.
Stage 2008-2009
3.7
Bart Wulteputte – Stijn Courtheyn
Prototype
We hebben een prototype ontwikkeld als demonstratie hoe het eruit zal zien. Zo kunnen onze opdrachtgevers zien in welke richting we zouden gaan.
Figuur 4: Prototype Dex-DataExplorer
21
Stage 2008-2009
4
Implementatie
4.1
Gebruikte tools
Bart Wulteputte – Stijn Courtheyn
22
4.1.1 Microsoft Office Visio 2003 Met Visio kunnen we een database model opmaken of deze laten genereren aan de hand van een bestaande database. Zo hebben we ons datamodel op papier uitgewerkt. Met de template voor use cases hebben wij het security schema opgesteld dat zal worden. Ook voor het ontwerp van de architectuur die het programma zal hanteren hebben we via Visio gemaakt.
4.1.2 Visual Studio 2008 Visual Studio 2008 is de ontwikkelomgeving de we gebruiken. De programmeertaal is Visual Basic.Net 2005 en dus het .Net Framework 2.0. Dit omdat ArcelorMittal momenteel alle pc’s voorziet van het 2.0 Framework en overschakelen naar een nieuwe versie (de 3.5) zou te veel tijd in beslag nemen.
4.1.3 Visual SourceSafe Visual SourceSafe is een systeem dat in combinatie met Visual Studio kan worden gebruikt. Hiermee kunnen we met meerdere personen in één en hetzelfde project werken en blijft het project gesynchroniseerd. Indien men een bestand gaat wijzigen zal dit eerst via “Check out” aan de gebruiker worden toegewezen zodat een andere er niet meer aan kan. Indien de gebruiker klaar is met zijn wijzigingen kan hij deze permanent maken voor het hele team door het bestand via “Check in” terug naar de centrale plaats te sturen. Nu kan een andere gebruiker dit openen en indien nodig ook wijzigingen aan brengen. Indien we aan een bepaald punt komen dat het project kan worden uitgerold voor testing (eerst naar QA en dan naar productie) moeten we een “Label” aanmaken. Dit zal de huidige situatie kopieren naar de QA of productie omgeving.
4.1.4 SQLServer 2005 De metadata die het programma zal produceren / nodig heeft zal worden bewaard in een centrale SQLServer 2005 database. Tevens is het ook mogelijk om bv demo redenen over te schakelen naar een Access database.
4.1.5 DevExpress
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
23
Van DevExpress hebben we de volgende tools gebruikt: -
XtraGrid: Tonen van data in een grid met extra functionaliteiten zoals sorteren, filteren, groeperen,…
-
XtraPivotGrid: De pivotgrid functionaliteiten
-
XtraChart: Staat in om de grafieken visueel voor te stellen
4.1.6 ProEssentials ProEssentials van GigaSoft is ook een component om grafieken te maken. Deze werd gebruikt in DataExporer van de Staalfabriek. Oorspronkelijk was het de bedoeling dat deze component niet meer zou gebruikt worden, enkel nog de XtraChart van DevExpress. Maar omwille van enkele functionaliteiten hebben we toch de ProEssentials moeten integreren. Ook bleek dat ProEssentials toch sneller de grafieken visueel kan voorstellen dan de XtraChart. Was de overgang naar XtraChart wel zo verstandig?
4.1.7 ActiveQueryBuilder Met de tool van ActiveQueryBuilder kunnen we de gebruiker een gebruiksvriendelijke SQL editor aanbieden zoals die in Access.
Stage 2008-2009
4.2
Bart Wulteputte – Stijn Courtheyn
24
DexTree
DexTree is een geavanceerde .Net Treeview control. Wij hebben rond deze control een schil geschreven die er voor zorgt dat de treeview generiek wordt en enkele extra functionaliteiten krijgt. DexTree bestaat uit 3 klassen: -
DexTree: de tree zelf Node: een representatie van een TreeviewNode NodeType: types voor een node
Ook zijn er 2 Exception klassen: -
SearchException: foutmeldingen bij het zoeken in de boom MoveException: foutmeldingen bij het verplaatsen van nodes
De enum klasse definieert hoe een node kan worden toegevoegd -
Before After in (als een kind)
DexTree ondersteunt ook meertaligheid. Zo wordt er momeneel het Nederlands, het Frans en het Engels ondersteund. Standaard staat DexTree in het Engels ingesteld.
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
Figuur 5: Klassediagram DexTree
4.2.1 Node De node klasse komt overeen met een node uit de treeview. Aan deze node kunnen we volgende zaken instellen: -
NodeID: een unieke identificatie van de node NodeName: de naam van de node (zichtbaar in de treeview)
25
Stage 2008-2009 -
Bart Wulteputte – Stijn Courtheyn
26
NodeDescription: de omschrijving van de node (zichtbaar als tooltip) ParentNode: de moedernode van deze node SequenceNumber: op welke positie moet deze node staan binnen zijn moedernode kinderen NodeType: van welk type is deze node (categorie,…)
Indien je de zoek- en / of de verplaatsfunctionaliteit wilt gebruiken, zorg er dan wel voor dat elke node uniek is. Geef dus zeker een NodeID in. Aan een node kunnen we ook vragen of hij de standaard .Net TreeNode wil maken, het zal deze zijn die in de treeview zichtbaar wordt. ''' <summary> ''' Make a .Net TreeNode from this Node ''' '''
.Net TreeNode '''
Public ReadOnly Property TreeNode() As TreeNode Get If _treeNode Is Nothing Then _treeNode = New TreeNode _treeNode.Text = NodeName _treeNode.ToolTipText = NodeDescription If NodeType IsNot Nothing Then _treeNode.SelectedImageKey = NodeType.NodeType _treeNode.ImageKey = NodeType.NodeType End If If NodeID <> "" Then _treeNode.Name = NodeType.NodeType + NodeID Else _treeNode.Name = NodeType.NodeType + NodeName End If End If Return _treeNode End Get End Property Codevoorbeeld 1: DexTree TreeNode
4.2.2 NodeType Wilt u uw nodes opdelen in categorieën, dan kunt u dit perfect doen via het NodeType. Deze laat tevens toe om zelfs per type een specifiek icoontje te voorzien.
4.2.3 DexTree Deze klasse is de belangrijkste. Hier wordt effectief de gegevens voor de boom aan doorgegeven en staat in om de boom te tekenen en alle andere functionaliteiten. -
Nieuwe nodes toevoegen De boom bouwen Nodes verplaatsen
Stage 2008-2009 -
Bart Wulteputte – Stijn Courtheyn
Zoeken Nodes verwijderen Nodes toevoegen nadat boom is gebouwd
Hoe bouwt DexTree eigenlijk zijn boom op: Eerst worden alle hoofdnodes opgehaald, dit wil zeggen alle nodes waarvan de ParentNode niet is ingevuld. ''' <summary> ''' Get root nodes from the node list (parentNode = nothing) ''' '''
list of root nodes '''
Private Function GetRootNodes() As List(Of Node) Dim rn As New List(Of Node) For Each n As Node In _nodes If n.ParentNode Is Nothing Then rn.Add(n) End If Next 'Order on sequence number rn.Sort(New SortNode()) Return rn End Function Codevoorbeeld 2: DexTree ophalen hoofdnodes
Nu we alle hoofdnodes kennen, kunnen alle kinderen opvragen van een node. ''' <summary> ''' Get child nodes from a node ''' ''' <param name="rn">Parent node '''
list of child nodes '''
Private Function GetChildNodes(ByVal rn As Node) As List(Of Node) Dim cn As New List(Of Node) For Each n As Node In _nodes If n.ParentNode Is rn Then cn.Add(n) End If Next 'Order on sequence number cn.Sort(New SortNode())
27
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
28
Return cn End Function Codevoorbeeld 3: DexTree ophalen kinderen
Zowel bij het ophalen van de hoofdnodes als bij het ophalen van de kinderen wordt de lijst gesorteerd (rn.Sort() en cn.Sort()). Hiervoor hebben we een eigen klasse gedefinieerd die de sortering voor hem neemt. Private Class SortNode Implements IComparer(Of Node) Public Function Compare(ByVal x As Node, ByVal y As Node) As Integer Implements IComparer(Of Node).Compare Select Case x.SequenceNr - y.SequenceNr Case Is < 0 Return -1 Case 0 Return 0 Case Else Return 1 End Select End Function End Class Codevoorbeeld 4: DexTree sorteerfunctie
4.2.4 Hoe DexTree gebruiken (voorbeeld) Hoe kunt u nu deze component zelf gaan gebruiken: Importeer eerst de DexTree component in uw project. Nu kunt u op een formulier een instantie laten maken van deze control. Mocht u nu het project al eens laten starten, zou u een lege treeview zien. U moet eerst nog data aan de tree geven. En dit doet u op deze manier: Toevoegen node types Eerst voegt u één of meerdere NodeTypes toe aan de boom, hiervoor is de functie AddNodeType(NodeType, Image) voorzien. DexTree1.AddNodeType("Dtd", My.Resources.Open) DexTree1.AddNodeType("Cat", My.Resources.pdf) Toevoegen nodes Nu kunt u effectief starten met het toevoegen van de nodes. Hiervoor is de volgende functie voor voorzien AddNode(NodeName, NodeType, NodeDescription, NodeID, ParentNode, SequenceNr) DexTree1.AddNode("Root", DexTree1.NodeTypes(0), "Rootnode", "", Nothing, 0)
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
29
DexTree1.AddNode("Child1", DexTree1.NodeTypes(1), "Child2", "", DexTree1.Nodes(0), 1) DexTree1.AddNode("Child2", DexTree1.NodeTypes(1), "Child1", "", DexTree1.Nodes(0), 0) DexTree1.AddNode("Child3", DexTree1.NodeTypes(1), "Child3", "", DexTree1.Nodes(0), 2) Zoals u misschien merkt worden de kinderen niet in de juiste volgorde doorgegeven aan DexTree, maar maak u geen zorgen, zolang de sequence nummers (de laatste parameter) maar goed zijn. Misschien vraagt u, u ook af waarom er bij het toevoegen van de node “Root” er als voorlaatste parameter “Nothing” wordt doorgeven. Dit is nodig omdat deze node een hoofdnode is en dus geen ParentNode heeft. Tonen van de tooltip Indien u wenst om de omschrijving (NodeDescription) weer te geven in de tooltip dan moet u volgende parameter instellen: DexTree1.ShowToolTips = True Bouwen van de boom Nu de boom data heeft, kunt u de boom laten bouwen, roep hiervoor de volgende methode op: DexTree1.CreateTreeView()
En mocht u nu uw project opnieuw lanceren dan krijgt u volgend resultaat:
Figuur 6: DexTree in praktijk
Misschien wilt u ook gebruik maken van de andere functionaliteiten, zoals de zoek functie Zoek functie Indien u deze wilt gebruiken, dan hoef je een tekstvak (voor het zoekwoord) en twee knoppen (vorige en volgende zoekhit) op uw scherm te plaatsen En als u bv het tekstvak zou verlaten kan je de zoekfunctie starten: DexTree1.Search(TxtKeyword.Text)
Indien er nodes voldoen aan uw zoekopdracht zal standaard de eerst hit worden geselecteerd. Wij controleren volgende zaken: de naam, de tekst en tooltip van de node. Achter de twee knopen zet je de volgende instructie:
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
30
DexTree1.PreviousSearchHit() DexTree1.NextSearchHit()
Verplaats functie U kunt ook nodes verplaatsen in de treeview. Om de verplaatsing te starten moet u deze instructie aanroepen: DexTree1.MoveNode()
Deze zal de momenteel geselecteerde node instellen als de te verplaatsen node. Indien u nu een andere node selecteert heb je de keuze tussen: -
Voor deze node plaatsen Achter deze node plaatsen Als kind van deze node
DexTree1.MoveNode(DexTree.AddType.After) Deze zal de te verplaatsen node achter de geselecteerde node plaatsen. Nieuw nodes toevoegen in runtime U kunt nieuwe nodes toevoegen zelfs als uw programma actief is. DexTree1.AddNode(InputBox("NodeName"), "Cat", InputBox("NodeDescription"), InputBox("NodeID"), DexTree1.ActiveNode, , DexTree.AddType.In)
Dit voorbeeld zal een nieuw node me t als nodetype “Cat” toevoegen als kind van de actieve node (= geselecteerde node in de treeview)
4.2.5 DexTree – Database Zoals u misschien gemerkt heeft. Heeft DexTree geen idee van waar de data voor de nodes vandaan komt. Dus indien u nodes verplaatst, verwijderen, toevoegt moet u wel zelf nog de instructies schrijven die deze nodes ook kenbaar te maken in bv een database. Indien u een nieuwe node toevoegt krijgt u deze node ook terug, zo kunt u de nodige gegevens vragen. Indien u een node verwijderd of verplaatst kunt u alle gewijzigde nodes opvragen via: DexTree1.MovedNodes() Maar vergeet ook niet na uw afhandeling van deze data, de lijst ook te legen via: DexTree1.ClearMovedNodes()
Stage 2008-2009
4.3
Bart Wulteputte – Stijn Courtheyn
31
Uitlezen WHERE uit query
Één van de vereisten was ook dat de WHERE visueel moet worden getoond in een tabel. Zodat de gebruiker zonder dat hij daarvoor SQL moet kennen toch enkele zaken in een query kan aanpassen. Zo kan hij bijvoorbeeld een jaartal aanpassen of een bepaalde parameter uitschakelen. In QueryTool zat de WHERE in een apart veld bewaard in de metadatabase. Hierdoor was het makkelijk om deze uit te lezen en terug op te maken. Maar nu in Dex – DataExplorer zit de volledige query in één veld samen. Hierdoor werd het moeilijk om te bepalen waar de effectieve WHERE zich bevindt. Na wat denkwerk en testen zijn we er toch in geslaagd om de volledige query uit te lezen en te zoeken op de parameters. Het is nu zelfs zo dat subqueries mogelijk zijn en indien deze ook een WHERE bevatten deze ook wordt weergegeven. Wat is nu eigenlijk een parameter? Een parameter is eigenlijk het volgende: “veld conditie waarde”. De volgende condities worden ondersteund: -
= <= >= <> < > IN LIKE
Zo is het resultaat van volgende query:
Figuur 7: Query
Het volgende:
Figuur 8: Query parameteres
Maar hoe bepalen we nu deze parameters?
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
32
4.3.1 WHERE zoeken Eerst en vooral zoeken we achter het WHERE commando in de SQL. Indien we er geen vinden kunnen er ook geen parameters zijn. Wordt deze wel gevonden kunnen we de zoektocht starten.
Figuur 9: Bevat query WHERE
Stage 2008-2009
4.3.2 Parameters zoeken
Figuur 10: Zoek conditie
Bart Wulteputte – Stijn Courtheyn
33
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
34
Eenmaal we een conditie vinden bepalen we eerst de waarde (= value) achter de conditie.
4.3.3 Begin van de waarde zoeken
Figuur 11: Startindex van de waarde
In de bovenstaande lus zoeken we de startpositie van de value. Zolang de value leeg blijft zoeken we verder. Indien we een ‘ karakter vinden, dan weten we al dat deze value een Stringvalue zal zijn en wijzigen we de strEnd naar een ‘ (lijn 756). Misschien heeft u het al gemerkt, maar om alles te weten staan gebruiken wij indexen. Zo bewaren wij het begin en einde van de value en het begin van de hele parameter. Deze indexen zullen we later nodig hebben wanneer de Where string opnieuw willen samenstellen.
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
4.3.4 De rest van de waarde ophalen
Figuur 12: Bepaal waarde
35
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
36
Zolang het opgehaalde karakter niet het zelfde is als het einde (een spatie of een ‘) kunnen we het karakter toevoegen aan de value. Indien het om een StringValue zou gaan, moeten we ook rekening houden dat we hier een dubbele ‘ kunnen tegenkomen, maar deze is hoogstwaarschijnlijk niet het einde van de value (lijn 737 en 805). Eenmaal we de value gevonden hebben, controleren we of dat deze een numerieke waarde is of dat deze een string value is (value staat tussen ‘)
Figuur 13: Is de waarde een parameter
4.3.5 Veldnaam Nu we weten dat de waarde een parameter is kunnen we de veldnaam zoeken waarop deze waarde van toepassing is.
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
37
Figuur 14: Zoek de veldnaam
Om het veld te vinden gaan wij eigenlijk karakter per karakter terug in de where string. Indien het eerst gevonden karakter een ) is dan gaan we terug tot en met het ( (lijn 863). Als we het ( gevonden hebben zetten we het einde terug om naar een spatie (lijn 889) zodat we ook de functienaam weten.
Stage 2008-2009
4.4
Bart Wulteputte – Stijn Courtheyn
38
Aanpassen WHERE uit query
Natuurlijk moet het ook mogelijk zijn om de aangepaste WHERE in de tabel terug om te zetten naar de originele WHERE. Deze functionaliteit maakt eigenlijk van de originele query, 2 nieuwe queries. Één die rekening houdt met uitgeschakelde parameters en een andere query die deze negeert. Dit is nodig omdat we nog alle parameters nodig hebben om weg te schrijven naar de database, anders zijn we deze definitief kwijt.
Figuur 15: Initialiseren nieuwe queries
4.4.1 Initialiseren indexen
iTo: hier wordt de index van het begin van de value geplaatst + het verschil van alle voorgaande values ten opzichte van de originele values iToWithUse: hetzelfde van iTo, maar hier wordt de lengte van de al verwijderde parameters van af getrokken newValLengh: zal het verschil van alle nieuwe values lengtes en de originele values lengtes bijhouden newWithUseLength: zal bijhouden hoeveel karakters er zijn verwijderd van parameters die niet meer gebruikt zullen worden
4.4.2 Overlopen parameters
Figuur 16: Start overlopen parameters
We halen het laatste gedeelte op na de value (lijn 509), we bepalen waar de value zal starten (lijn 512) en dan halen we het de query instructie op tot voor waar de value zal komen te staan (lijn 516)
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
39
4.4.3 Parameter wordt gebruikt Wijzig de value in de newSQLWithUse
Figuur 17: Wijzig de waarde in newSQLWithUse
Wijzig de value in de newSQL
Figuur 18: Wijzig de waarde in newSQL
4.4.4 Parameter wordt niet gebruikt Indien de parameter niet gebruikt zal worden mogen wij deze parameter verwijderen uit de where string. Maar we moeten wel rekening houden dat er meer dan 1 parameter in de where string kan zitten. Dus: 1 parameter
Verwijder parameter en WHERE commando
Meerdere, maar de te verwijderen staat als eerste
Verwijder parameter en zoek naar volgende AND of OR en verwijder deze
Meerdere, maar de te verwijderen staat in het midden of op het einde
Verwijder parameter en zoek naar de voorgaande AND of OR en verwijder deze
Als de newSQLWithUse eindigt met AND of OR of WHERE dan kunnen we de parameter verwijderen
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
40
Figuur 19: Eindigt op AND, OR of WHERE
Zoek waarop de newSQLWithUse precies eindigt, zodat we weten of dit de eerste parameter is na de where of dat er parameters ervoor staan Ook houden we de start (iStart) en einde (iEnd) bij van deze zodat we deze later snel kunnen terugvinden Eindigt niet op WHERE Nu we weten dat er voorgaande parameters zijn, kunnen we deze parameter direct verwijderen en de AND of OR ook.
Eindigt op WHERE Nu we weten dat dit de eerste parameter is, moeten we eerst zoeken of er al dan niet nog parameters achterkomen. (lijn 564). Indien dit de enige parameter is kunnen we deze verwijderen inclusief het WHERE commando. (lijn 565 – 566) Anders zoeken we of het een AND of een OR is en houden we de indexen hiervan bij (lijn 569-583). En verwijderen we tot slot de parameter en de AND of OR (lijn 586-587).
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
41
4.4.5 Ophalen nieuwe value In 4.4.3 ziet u dat er een functie “GetValueFromParameter” wordt gebruikt. Deze functie zal de nieuwe value terug geven nadat deze eerst aan enkele controles is onderworpen. Zoals: - Indien originele waarde een getal was, moet de nieuwe dit ook zijn - Indien originele waarde een string was, dan moet de nieuwe tussen enkele quotes staan - Indien de gebruiker de waarde niet mag wijzigen, geeft dan de originele waarde terug
Stage 2008-2009
Figuur 20: Ophalen nieuwe value
Bart Wulteputte – Stijn Courtheyn
42
Stage 2008-2009
4.5
Bart Wulteputte – Stijn Courtheyn
43
XtraChart
Een ander belangrijk deel in het programma zijn natuurlijk de grafieken. Hiervoor hebben we de XtraChart van DevExpress gebruikt. Het programma ondersteund volgende grafiektypes: -
Balk Gestapelde balk 100% gestapalde balk Trend (=lijn) Histogram CSum Boxplot
4.5.1 Problemen Tijdens het ontwikkelen van de gevraagde functionaliteit ivm grafieken hebben we toch enkele problemen / moeilijkheden tegengekomen. Schalen met niet numerieke x-as Zo was er het probleem om bij grafieken met een niet numerieke x-as toch extra ‘dummy’ punten te kunnen toevoegen. We moeten unieke punten toevoegen aan de x-as maar natuurlijk geen getallen. Trend met kleurseries
Stage 2008-2009
5
Bart Wulteputte – Stijn Courtheyn
44
Testen
Regelmatig werd het programma getest door Nancy Coppens en Luc Vandeputte
5.1
Test 2009-04-08
Algemeen 1 Vertaling 2 Gebruikershandleiding Menubalk: Choose Language => Nederlands, English 3 Icoontje van datadomains evt aanpassen 4 Help file 5 Menubalk
Gebruikershandleiding
1 2 3 4 5
Lijn tussen Help en About Options: evt, als voorlaatste? View: lijn tss eerste 2 en laatste 2 menuitems 3 puntjes als een schermpje volgt View: extra menuitem "Show extra columns in Parametergrid" (tijdelijk!!) XtraGrid 1 2 3 4 5 6 7 8 9 10
Titel van de query in XtraGrid: Datadomain + nr + naam query (bv. GHV - 15. Lalosika CITS stilstanden) Export to PDF => Browse-knop voorzien Export to Excel => Browse-knop voorzien Tooltip op "Timestamp" => wat wordt daar mee bedoeld? Save Layout => Browse-knop voorzien Animated gif => bij tonen query Summaries: Aantal enkel in eerste kolom tonen, + Avg op andere kolommen 1ste kolom vastzetten (ook zo in QTL) - Fixed column Titel "Parameters" op parametergrid Group by: items
XtraPivotGrid 1 Demos: Runtime summary change 2 Titel op pivotgrid? (vind ik wel niet terug in de demos) 3 Custom group interval Xtrachart 1 2
Nieuwe bar-grafiek: als je Autoscale niet aanklikt => error op DBNull Bij parameters wijzigen in query => Run => grafiek wijzigt
Niet mogelijk
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
niet (evt. Refresh-knop?) 3 Meevolgen tussen grid en chart 4 Wat is de betekenis van X> 5 X-as vermelden op de grafieken (bv. Jaartal, …) 6 Bargraph: 2 velden in X-as (bv. jaartal-maand) Queries 1
To -> Too
2
Query 40 (milieu): HAVING => er worden geen parameters getoond 3 Between -> voorlopig nog niet in parameter scherm Conversie 1 2 3
5.2
QTL: SELECT FROM DXQuery WHERE DT_AN is not null QTL: NM_QRY en SCF_QRY wisselen (SCF_QRY tonen in de treeview) Tabel DXGraphType invullen indien nodig
Test 2009-04-09
Edit form 1
Edit query: als je op Save klikt, en dan op OK => dan worden de wijzigingen niet getoond in de grid? => staat zo in de tooltip?
Chart 1
Checkbox "Show labels" in demos => kan dit evt er bij in de toolbar?
2
Kan ook de data geëxporteerd worden? (nu is het enkel de picture)
Algemeen 1 Labels => dubbelpunt toevoegen na label (bv. login-scherm) Export screen 1 Ook OK en Cancel button (net zoals bij Export Grid) Draw XY graph 1
=> kunnen jullie ook de module en methode bijplaatsen waarin het fout gaat?
45
Niet mogelijk
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
Grid 1
Titel: Query result 63 - Aantal wegingen => vervangen door Query 63. Aantal wegingen Login as other user 1 Geeft foutmelding op prod => werkt dit goed op dvlp? 2 Paswoord: niet nodig Toolbar grid 1 2
Knoppen "Load layout" en "Save layout" naast preview Kan evt. de tooltip aangepast worden: "Load layout grid" en "Load layout pivot" Parameters 1
Jaartal => numerieke layout
Graphs 1 2
Als Graphs = "0x0" => dan deze controls visible false zetten (een aantal gebruikers zullen nooit graphs opvragen)OK Tooltip zetten op Range-control en checkbox "Synchronise"
3
X en Y aanduiden op de XY-as (edit graph)
5.3
Test 2009-04-10
Parameters 1 2
Run => vervangen door "Show data" + vergrootglas-icoontje (zoals in QTL) In de titel van de grid, mag "Parameters - " blijven staan (vóór de naam van de query) => zo weet de gebruiker dat dit de parameter-grid is
Help 1
5.4
Mag gewoon de gebruikershandleiding (in Word) zijn => is ook zo in andere programma's (bv. Lalosika)
Test 2009-04-21
Parameters 1 Parameter >= ontbreekt 2 Vertaling Datagrid 1
Filterrij
46
Stage 2008-2009 2 3
5.5
Bart Wulteputte – Stijn Courtheyn
Summary -> afronden op 2 cijfers Filter afdrukken bij Grid en Pivot
Test 2009-04-21
Query uitvoeren 1
Gaat goed via edit scherm, maar niet via de knop “show data” naast de parameter grid QueryTree 1 Categorie toevoegen, query verplaatsen Grafiek 1
5.6
Balk grafieken -> geen extra punten tekenen
Test 2009-04-23
Login as other user 1 OK-button defaultbutton, Cancel = cancelbutton Conversieprogramma 1 Alle users krijgen alle profielen Pivotgrid 1
Evt. ingestelde filter opvragen als property en tonen in de footer? Gebruikersbeheer 1
Ook filterrij zetten op de grid van de gebruikers (gemakkelijker zoeken) Gebruikershandleiding openen (path opslaan in CONF-table) 1
5.7
Microsoft.VisualBasic.Shell(pathBatFile, AppWinStyle.MaximizedFocus) Inhoud bat-file: start Y:\Dienst\Databank\Sidmar\Lalo2006\Gebruikershandleidin g_LLS_planner.doc
Test 2009-04-24
Handleiding 1
Pg 5 (hoofdstuk 1.3.2 => bepaald welke opties => bepaalt welke opties) 2 hoofdstuk 6: De beveiliging gebeurd => De beveiliging gebeurt Hoofdscherm
47
Stage 2008-2009 1 2 3 4
5
5.8
Bart Wulteputte – Stijn Courtheyn
Onder de menu “Beeld” -> toon … toolbar ipv toon …. Opties Show data = report grid? “Show QueryTree and Data” als combinatie overbodig Herschik opties [] Grafiek [] – [] Parameters [] Range [] – [] Report [] Synchronise Lay-out “0 x 0” vervangen door checkbox
Test 2009-04-27
HIC formulier 1
5.9
MDIForm_Load: extra code toevoegen => zo weet je of je op DVLP, QA of PROD werkt Dim stage As String = ADF.Configuration.ConfigurationSettings.Instrumentation.St age If stage Is Nothing OrElse stage = "" Then Me.Text = "ExplorePlus " & My.Application.CommandLineArgs(0).ToString & " - stage ?" Else Me.Text = "ExplorePlus " & My.Application.CommandLineArgs(0).ToString & " - " & stage End If
Test 2009-04-29
HIC formulier 1
Menubalk: Beeld, Toon data => vervangen door "Toon data grids" (ook in Engels) 2 Knop “Datagrid” => caption: -> Datagrid + tooltip: Swich to data grid” 3 Knop “Pivot grid” => caption: -> Pivotgrid + tooltip: Swich to pivot grid” Preview pivotgrid 1 Footer: filter blijft leeg Layout opslaan 1
Form iets breder maken, zodat het path (textbox) ook breder kan worden Datagrid 1 2
Title datagrid => springt steeds terug naar Mainview Parameters verdwijnen bij dubbelklikken
48
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
5.10 Test 2009-04-30 Management 1
Profiel wordt niet bewaard in de grid (bij aanmaken nieuwe gebruiker) => het is wel goed bewaard (als je scherm opnieuw opent)
2
QueryBeheer => group by mag weg op de grid (neemt plaats in, en zullen we hier niet echt gebruiken) Toevoegen nieuwe database: melding => Geef een getal in (na succesvol bewaren) => er staat 500000?? opm: het is wel succesvol bewaard (als je scherm opnieuw opent)
3
Queries 1 2 3 4
Onder HRM => de database van PEB worden getoond? Bij opslaan -> bericht van opslaan OK overbodig Knopen Toon, Ok en Sluit rechts verankeren Bij wijzigen &n, query opnieuw uitvoeren, geen verandering van resultaat 5 Checkbox “Parameters vanuit andere query” wordt niet goed geplaast 6 Splitter tussen de hoofdquery en paramquery 7 KleurSQL code altijd laten uitvoeren (knop mag weg) 8 Laatste geupdate door -> laaste gewijzigd door en wordt niet altijd ingevuld 9 Zoekfunctie -> knopjes verkleinen Algemeen 1 Dubbelklik op grafieken werkt niet 2 Volledig pad van de tree weergeven in grafiektitel 3 LDA connectiestring werkt niet Grafieken 1
Grafiek zonder ingestelde X en Y werkt niet
5.11 Test 2009-05-04 Management 1
Toekennen queries aan users: de queries die verwijderd zijn => niet tonen in de grid Wijzig query 1 Query Informatie: labels Nr en Titel links aligneren 2 Naar active query builder -> foutmelding aanpassen Querytree 1
Bij hernoemen query -> standaard de huidige naam als nieuwe naam weergeven
49
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
2 Focus van de geselecteerde node verdwijnt Parametergrid 1 2
Parametergrid -> geen filter op kolomkoppen Wanneer een andere query wordt geselecteerd, wijzigt paramgrid maar de data van de vorige query blijft staan -> verwarrend Menubalk 1
Als je van taal wijzigt => evt. vinkje bij geselecteerde taal laten staan Grafiek 1
Nieuwe grafiek, OK klikken (zonder iets in te vullen)
2 Snellijstopties kwijt bij maximaliseren grafiek Grafiekgroepen 1
Error bij laden van grafiekgroepen onder de gebruiker SIDGMAT
Gebruikersinstellingen 1 Scherm breder maken 2 Worden niet bewaard 3 Zoek knop -> standaard pad instellen Handleiding 1
Meer info over kracht datagrid
5.12 Test 2009-05-05 Grafieken 1 Labels op X-as nemen te veel plaats in 2 Kolomen die eindigen op _ -> refertelijnen Parameters 1
Parameters niet tonen als “Parameters uit andere query” komen
50
Stage 2008-2009
Besluit [BESLUIT]
Bart Wulteputte – Stijn Courtheyn
51
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
52
Lijst van figuren Figuur 1: Voorstudie QueryTool .............................................................................................................. 7 Figuur 2: Profielen ................................................................................................................................. 18 Figuur 3: Architectuur ........................................................................................................................... 19 Figuur 4: Prototype Dex-DataExplorer .................................................................................................. 21 Figuur 5: Klassediagram DexTree .......................................................................................................... 25 Figuur 6: DexTree in praktijk ................................................................................................................. 29 Figuur 7: Query ...................................................................................................................................... 31 Figuur 8: Query parameteres ................................................................................................................ 31 Figuur 9: Bevat query WHERE ............................................................................................................... 32 Figuur 10: Zoek conditie ........................................................................................................................ 33 Figuur 11: Startindex van de waarde .................................................................................................... 34 Figuur 12: Bepaal waarde ...................................................................................................................... 35 Figuur 13: Is de waarde een parameter ................................................................................................ 36 Figuur 14: Zoek de veldnaam ................................................................................................................ 37 Figuur 15: Initialiseren nieuwe queries ................................................................................................. 38 Figuur 16: Start overlopen parameters ................................................................................................. 38 Figuur 17: Wijzig de waarde in newSQLWithUse .................................................................................. 39 Figuur 18: Wijzig de waarde in newSQL ................................................................................................ 39 Figuur 19: Eindigt op AND, OR of WHERE ............................................................................................. 40 Figuur 20: Ophalen nieuwe value.......................................................................................................... 42
Stage 2008-2009
Bart Wulteputte – Stijn Courtheyn
53
Lijst van codevoorbeelden Codevoorbeeld 1: DexTree TreeNode ................................................................................................... 26 Codevoorbeeld 2: DexTree ophalen hoofdnodes ................................................................................. 27 Codevoorbeeld 3: DexTree ophalen kinderen ...................................................................................... 28 Codevoorbeeld 4: DexTree sorteerfunctie ............................................................................................ 28