titelblad - Telenet.beusers.telenet.be/adriaan/school/verslag.doc  · Web viewNieuwe colli’s en...

92
Stageverslag eNetricity bvba Schooldreef 31a 8020 Oostkamp 050/45 49 00 http://www.enetricity.com [email protected] IlsaNet PE

Transcript of titelblad - Telenet.beusers.telenet.be/adriaan/school/verslag.doc  · Web viewNieuwe colli’s en...

Stageverslag

eNetricity bvbaSchooldreef 31a8020 Oostkamp

050/45 49 00http://[email protected]

IlsaNet PE

StudiegebiedOpleiding

Academiejaar

StudentStagementor

StagebegeleiderHandelswetenschappen en BedrijfskundeToegepaste Informatica2005 - 2006

Adriaan Watteeuw

Lieven Bogaert Kristien Roels

eNetricity bvba 2

Woord voorafMijn stage bij eNetricity bvba liep ik van 6 februari 2006 tot en met 19 mei 2006. Tijdens deze stage kon ik niet enkel mijn kennis uitbreiden, maar kon ik ook een schakel zijn in het echte bedrijfsleven.De opdrachten die ik kreeg waren heel afwisselend. Ik hielp mee aan een catalogus invulprogramma en werkte aan een website die een overzicht geeft van alle culturele activiteiten binnen een gemeente. De grootste opdracht bestond erin om een Pocket PC- toepassing te ontwikkelen die de verschillende activiteiten van magazijniers en chauffeurs koppelt aan het reeds aanwezige planningsysteem.Het succes van deze stage is er niet enkel gekomen door mijn eigen inzet. Voor de nodige hulp kon ik steeds rekenen op volgende mensen.Hierbij denk ik in de eerste plaats aan de mensen van eNetricity bvba: Dhr. Lieven Bogaert (zaakvoerder), Dhr. Lieven Mattheeuws, Dhr. Koen Bonte en Dhr. Wim Rooseboom gaven niet enkel mijn stageopdrachten, maar leerden mij ook nieuwe technieken kennen.Om een stage in goede banen te leiden heb je een stagementor nodig. Ik mocht rekenen op Mevr. Kristien Roels.Ook een dank je wel aan familie en vrienden die gedurende de periode interesse toonden voor mijn werk zodat ik aan motivatie zeker niets ontbrak.

SamenvattingHet 1ste project bestaat erin om een catalogus-invulprogramma te ontwikkelen voor de firma X. Producten kunnen gegroepeerd worden, montageschema's kunnen toegevoegd worden, ... De productgegevens worden ook meteen in meerdere talen ingegeven zodat er bij de uitgifte van de productcatalogus in verschillende talen geen problemen zijn.Het 2de project, CultuurNet, is een website die de bezoeker een overzicht geeft van alle culturele activiteiten in zijn of haar gemeente. De website is opgebouwd in een DotNetNuke-omgeving en maakt gebruik van webservices die aangeboden worden door CultuurNet Vlaanderen. Voor dit project werd enkel de basis gebouwd.In het 3de en grootste project, IlsaNet Pocket Edition, werd er een mobiele toepassing ontwikkeld die magazijniers en chauffeurs in staat stellen om gegevens van colli's en palletten op te vragen. Men scant de barcode van een colli of een pallet in en men ziet voor wie of voor waar deze bestemd is. Alle acties worden in het systeem bijgehouden zodat men altijd kan weten waar een bepaalde colli of pallet zich bevindt. IlsaNet PE is een afgeleide versie van het eerder door eNetricity ontwikkelde IlsaNet Classic DE (Dispatch Edition). IlsaNet Classsic DE is het beheerprogramma bij een transportbedrijf om het transport van colli's en palletten in goede banen te leiden.

InhoudstafelWoord vooraf.....................................................................................2

Samenvatting.....................................................................................3

Inhoudstafel.......................................................................................4

Voorstelling eNetricity bvba................................................................7

Deel 1: Project catalogus invulprogramma...........................................81 Omschrijving...................................................................................................82 Functionaliteit...............................................................................................10

2.1 Formulier legend..............................................................................102.2 Formulier belastingsdiagram...........................................................102.3 Formulier montage-instructies.........................................................112.4 Formulier eigenschappen................................................................122.5 Formulier systeemoverzicht.............................................................12

3 Uitwerking....................................................................................................133.1 NHibernate......................................................................................133.1.1 Wat is NHibernate?..........................................................................133.1.2 Werking NHibernate........................................................................133.2 Installatiebestand maken in Visual Studio.......................................14

4 Conclusie......................................................................................................18

Deel 2: Webservices..........................................................................191 Wat zijn webservices?...................................................................................192 Standaarden voor webservices.....................................................................20

2.1 XML..................................................................................................212.2 SOAP................................................................................................212.3 WSDL...............................................................................................222.4 UDDI................................................................................................232.5 Webservices aanmaken in Visual Studio..........................................24

3 Voor- en nadelen van webservices...............................................................274 Gebruik van webservices in code.................................................................27

Deel 3: Project CultuurNet.................................................................291 Omschrijving.................................................................................................292 Functionaliteit...............................................................................................30

2.1 Module ViewThemes........................................................................302.2 Module ViewEvents..........................................................................302.3 Module ViewDetail...........................................................................312.4 Module ViewSettings........................................................................32

3 Uitwerking....................................................................................................343.1 DotNetNuke.....................................................................................343.1.1 Wat is DotNetNuke?.........................................................................343.1.2 Installatie van DotNetNuke..............................................................353.1.3 DotNetNuke beheren.......................................................................37

3.1.3.1 Aanmelden.......................................................................................373.1.3.2 Pagina’s aanmaken..........................................................................383.1.3.3 Modules toevoegen aan een pagina................................................393.1.4 Communicatie tussen de modules...................................................403.2 Software Development Kit...............................................................40

4 Conclusie......................................................................................................41

Deel 4: Project IlsaNet PE..................................................................421 Omschrijving.................................................................................................42

1.1 IlsaNet.Classic..................................................................................421.2 IlsaNet PE.........................................................................................43

2 Functionaliteit...............................................................................................432.1 Aanmelding......................................................................................432.2 Synchronisatie met de centrale databank.......................................442.3 Magazijn gedeelte............................................................................462.3.1 Nieuw aangekomen magazijn..........................................................472.3.2 Retour / Afhaling..............................................................................482.3.3 Consolidatie / Wijziging....................................................................502.3.4 Laden bestelwagen..........................................................................532.3.5 Laden vrachtwagen.........................................................................552.3.6 Klaarzetten ritten bestelwagen........................................................552.3.7 Klaarzetten ritten vrachtwagen.......................................................572.3.8 Opzoeken.........................................................................................572.4 Chauffeur gedeelte..........................................................................582.4.1 Ritten...............................................................................................592.4.2 Laden bestelwagen..........................................................................622.4.3 Laden vrachtwagen.........................................................................622.4.4 Inbox................................................................................................622.4.5 Nieuw bericht...................................................................................62

3 Uitwerking....................................................................................................623.1 Programmeren op de Pocket PC......................................................623.1.1 De gebruikte hardware....................................................................623.1.1.1 Test-Pocket PC’s..............................................................................623.1.1.2 Barcode scanner..............................................................................633.1.1.3 Opticon............................................................................................643.1.2 De gebruikte software.....................................................................653.1.2.1 ActiveSync.......................................................................................653.1.2.2 .NET Compact Framework...............................................................673.1.2.3 Remote Display Control voor de Pocket PC......................................673.1.2.4 Emulator..........................................................................................683.2 Synchronisatie.................................................................................683.2.1 Werking...........................................................................................683.2.1.1 Synchronisatie via webservices.......................................................723.2.1.2 Synchronisatie via sockets...............................................................723.2.2 Performantie....................................................................................733.3 SQL Mobile.......................................................................................743.3.1 SQL Mobile databank aanmaken.....................................................743.3.2 IlsaNet PE databank.........................................................................77

4 Conclusie......................................................................................................78

Conclusie..........................................................................................80

Bronnen...........................................................................................81

Goedkeuring verslag.........................................................................82

Voorstelling eNetricity bvbaeNetricity bvba is een software- / Internethuis gespecialiseerd in het efficiënt analyseren, ontwerpen en implementeren van databasetoepassingen op alle platformen.eNetricity bvba ontstond in 1995 en richtte zich toen voornamelijk op Desktop Publishing. Van de klanten kwam destijds, samen met de opkomst van het Internet, de vraag naar een Internetpagina. Wat in het begin nog voornamelijk statische pagina's waren, is geleidelijk aan dynamisch geworden, gekoppeld aan een database. Zo is eNetricity bvba zich meer gaan ontplooien als specialist inzake het opzetten, onderhouden, implementeren en koppelen van databases.Tegelijkertijd werd hiermee werkkrachten gevonden die ook een grondige kennis hebben van de 'klassieke' programmeeromgevingen.Ondertussen is eNetricity bvba uitgegroeid tot een bedrijf met meerdere pijlers, waar ze een degelijke en kwalitatief hoogstaande ervaring in heeft uitgebouwd.

Tijdens het schrijven van dit verslag is eNetricity verhuisd van Brugge naar Oostkamp.Het adres in Brugge, waar ik mijn stage deed:

eNetricity bvba – Pathoekeweg 144 - 8000 Brugge

Het nieuwe adres in Oostkamp:

eNetricity bvba - Schooldreef 31a - 8020 OostkampTel.: (+32) (0)50 45 49 00 – Fax: (+32) (0)50 45 49 01e-mail: [email protected]

Deel 1: Project catalogus invulprogramma

1 OmschrijvingElk jaar brengt de firma X een productcatalogus uit, gesorteerd per categorie. Bij elke categorie hoort een systeemoverzicht en bij elk product kan men de eigenschappen opzoeken, montage-instructies raadplegen, …Om de productgegevens in te voeren en/of te wijzigen wordt er een invulprogramma ontwikkeld. Gegevens worden in meerdere talen ingegeven zodat het uitbrengen van andere talen geen extra werk verricht.In het programma heb ik meegewerkt aan het ontwikkelen van enkele formulieren die in de volgende puntjes besproken worden. Hieronder enkele schermafdrukken om een idee te krijgen van het programma.

Algemeen overzicht van het catalogus invulprogramma.

Links kan men de productgroep kiezen, deze is hiërarchisch opgebouwd door middel van een treeview control. Door erboven in de keuzelijst een andere taal te kiezen, wordt deze groepenlijst getoond in de gekozen taal. De groepgegevens zullen ook getoond worden in de andere taal.

Detail van de verschillende tabbladen.

Een groep bevat meerde informatievelden.

De informatievelden kunnen aangepast worden.

2 Functionaliteit

2.1 Formulier legendBij elke groepsfoto kan men een legende toevoegen. Deze bestaat uit een eigenschap met enkele referenties.Het toevoegen van een eigenschap kan men doen door de naam op te geven in het tekstvak en vervolgens op de plusknop ernaast te klikken. Voor het verwijderen van een eigenschap geeft men de naam ervan op en klik men op de minknop. Om een eigenschap van naam te veranderen, selecteert men de gewenste eigenschap in de keuzelijst en geeft men in het tekstvak een nieuwe naam op. Vervolgens klikt men op de knop “Aanpassen”.Een referentie toevoegen, aanpassen of verwijderen gebeurt op dezelfde manier.De gebruiker kan ook de volgorde van de eigenschappen aanpassen door op de knoppen “Naar boven” of “Naar beneden” te klikken.

2.2 Formulier belastingsdiagramVoor elke groep kan er een belastingsdiagram opgegeven worden. Men kan een afbeelding kiezen en hierbij extra informatie voorzien.

2.3 Formulier montage-instructiesIn formulier montage-instructies kan er per taal instructies gegeven worden hoe het prooduct kan gemonteerd worden. Naast een afbeelding kan er ook een titel en wat tekst opgegeven worden.

2.4 Formulier eigenschappenVoor elk groep kan men enkele eigenschappen opgeven.

2.5 Formulier systeemoverzichtOp het systeemoverzicht ziet men alle onderdelen die men samen kan monteren, onderdelen die tot een zelfde productgroep horen. Een systeemoverzicht is er daarom enkel maar op groepen en niet op onderdelen.

3 Uitwerking

3.1 NHibernate

3.1.1 Wat is NHibernate?

NHibernate is een ORM-tool (Object-relational Mapping). Het is de .NET variant van de Hibernate Core voor Java. NHibernate zorgt ervoor dat databaseobjecten in de programmacode aanspreekbaar zijn als objecten.

3.1.2 Werking NHibernateObjecten die men wil gebruiken moeten logischerwijze omschreven worden. In NHibernate gebeurt dit aan de hand van XML-bestanden, de mapping-files genoemd.

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-cascade="save-update"> <class name="enetricity.X.bl.Group,X.bl" table="Groups">

<id name="Id" column="ID" type="Int32" unsaved-value="0"> <generator class="increment"/> </id> <bag name="AccessoriesList" inverse="true" lazy="true" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.Accessory,X.bl" /> </bag> <bag name="ArticleListsList" inverse="false" lazy="false" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.ArticleList,X.bl"/> </bag> <bag name="GroupAssembliesList" inverse="true" lazy="false" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.GroupAssembly,X.bl" /> </bag> <bag name="GroupLanguagesList" inverse="true" lazy="false" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.GroupLanguage,X.bl" /> </bag> <bag name="GroupSystemsList" inverse="true" lazy="true" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.GroupSystem,X.bl"/> </bag> <bag name="SystemLegendsList" inverse="true" lazy="true" > <key column="GroupID" /> <one-to-many class="enetricity.X.bl.SystemLegend,X.bl"/> </bag> <property column="CustomerID" type="String" name="Customerid" length="50" /> <property column="IsAccessory" type="Boolean" name="IsAccessory" not-null="true" /> <property column="ParentID" type="Int32" name="Parentid" /> <property column="PreviousGroupID" type="Int32" name="PreviousGroupid" />

<property column="NextGroupID" type="Int32" name="NextGroupid" /> <many-to-one name="Imageid" column="ImageID" class="enetricity.X.bl.Image,X.bl" /> <property column="ImageLegendID" type="Int32" name="ImageLegendid" /> <many-to-one name="LoadDiagramid" column="LoadDiagramID" class="enetricity.X.bl.LoadDiagram,Xn.bl" />

</class></hibernate-mapping>

Deze mapping-files werden gegenereerd met de NHibernation tool maar zijn aanpasbaar.Aan de hand van deze mapping-files kan er bepaald worden welke eigenschappen een object heeft.Een eerste tag die gebruikt wordt is “Bags”, een 1-op-veel relatie naar een ander objecttype. Elke bag moet een naam krijgen, de kolomnaam waarnaar deze refereert moet ook gegeven worden. Het type van het veld wordt ook gevraagd. De eigenschap “lazy” bepaalt of de onderliggende objecten moeten meegeladen worden indien het hoofdobject geladen wordt, true betekent dat hij deze niet laadtMen kan ook eigenschappen specifiek voor het object opgeven. Dit kan men doen met de tag “Property”. Net zoals bij een bag wordt de kolomnaam en het typ geevraagd.We kunnen ook veel-op-1 relaties leggen. Dit doen we door het kernwoord “many-to-one” te gebruiken.

3.2 Installatiebestand maken in Visual StudioIn ons project kiezen we “File – Add – New Project…”. We hebben de keuze tussen verschillende Project Setup types, hieronder een overzicht:Project BeschrijvingSetup Project Creëert installatiebestanden voor een Windows installatie

gebruik makende van een .MSI-installatiebestand (MicroSoft Installer).

Merge Module Project Voegt componenten die gebruikt worden in verschillende toepassingen samen.

CAB Project Een Microsoft Compressed Cabinet bestand dat geopend kan worden via cabarc.exe.

Web Setup Project Maakt een installatie voor web-based toepassingen. De installatie zal geïnstalleerd worden in de virtuele basismap op de webserver.

Setup Wizard Een wizard om stap per stap het installatie bestand aan te maken.

Smart Device CAB Project Creëert een CAB project voor een deploy op een Pocket PC, Smartphone en andere Windows CE-gebasseerde toepassingen.

We kiezen voor een Setup Wizard project.

Als projecttype kiezen we voor een installatiebestand voor een Windows toepassing.

Het volgende scherm vraagt ons welke bestanden opgenomen moeten worden in het installatiebestand. We kiezen voor de “Primary output” voor onze toepassing.

In de volgende stap van de wizard kunnen er optionele bestanden meegenomen worden in het installatiebestand. Dit kunnen afbeeldingen zijn, een dll die nodig is, …

In de laatste stap krijgen we een overzicht van onze keuzes. Op het scherm verschijnt volgende lijst:

Selecteren we “Application Folder” dan krijgen we in het eigenschapvenster volgende eigenschappen te zien:

De “DefaultLocation” van de “Application Folder” geeft aan waar de toepassing standaard dient geïnstalleerd te worden. “[ProgramFilesFolder]” is de basismap op het systeem waar de installatie zal gebeuren. “[Manufacturer]” en “[ProductName]” zijn aan te passen naar eigen wens.Het is ook mogelijk om “geavanceerde” instellingen te doen voor het installatiebestand. Zo kunnen er bijvoorbeeld snelkoppelingen gemaakt worden op het bureaublad of in het start-menu.

Wanneer we het installatie-project compileren, worden de installatiebestanden gecreëerd. Dit is een “Setup.exe” met daaraan gekoppeld een MSI-bestand (MicroSoft Installer) voor onze toepassing.

Wanneer we de setup starten komen we in een installatiewizard terecht.

4 ConclusieHet catalogus invulprogramma was het eerste project op mijn stage. Nieuw voor mij was de vernieuwde versie van het .NET Framework, wat reeds aan hun 2.0 versie zit. Deze versie voelt iets meer anders aan dan eerst gedacht. Verschillende methods van classes werden bijvoorbeeld van plaats gewisseld zodat ik soms eens moest zoeken.Ook een nieuwe manier om een databank aan te spreken, de NHibernation techniek, leerde ik gebruiken. De databank werd niet rechtstreeks aangesproken via een datalaag met daarin SQL-instructies, maar er werden automatisch databank-objecten gegenereerd aan de hand van de XML-mapping-bestanden.

Deel 2: WebservicesOmdat in de volgende 2 delen, CultuurNet en IlsaNet PE gebruik gemaakt wordt van webservices is er hiervoor een apart deel voorzien.

1 Wat zijn webservices?Webservices kan je omschrijven als een stukje programmacode die zich op een andere locatie bevindt. Het is te vergelijken met een functieaanroep in de programmacode, je geeft enkele paramaters mee en je krijgt het resultaat terug.Om het resultaat te kunnen verwerken is het nodig dat die gegevens op een gestructureerde manier gegeven worden zodat de computer deze kan vertalen. Wij als mens zoeken bijvoorbeeld op een site een bepaald gegeven op en kunnen de nuttige informatie en de niet-nuttige informatie (reclame, …) van elkaar scheiden. Een computer is echter niet in staat om dat onderscheid te maken, daarom werden webservices in het leven geroepen.Aan een webservice kunnen we optioneel enkele parameters meegeven. Als resultaat krijgen we een gestructureerd XML-document terug die de computer snapt.

Webservice ’Service’ met WebMethod ‘GetAuth’ met parameter ‘barcode’.

De webservice kan opgeroepen worden via een URL gevolgd door het ASMX-document. ASMX staat voor Active Server Method File.“http://192.168.0.31:9001/service.asmx” is een voorbeeld van een webservice URL.Hieronder staat het resultaat van de WebMethod ‘GetAuth’. De webservice krijgt als parameter een barcode mee en stuurt de userid, de usergroepid en de taal terug als een gestructureerd XML-document. De programmacode vertaalt dit XML-document naar een dataset zodat er verder mee gewerkt kan worden.

Het resultaat van de webservice wordt in XML teruggestuurd.

2 Standaarden voor webservicesWebservices maken gebruik van de volgende standaarden:

XML voor het opmaken van informatie; SOAP voor het uitwisselen van berichten tussen applicaties; WSDL voor het beschrijven hoe webservices aangeroepen moeten worden; UDDI voor het publiceren en vinden van webservices in een soort 'Gouden Gids'.

Deze standaarden zijn ontwikkeld door het W3C, World Wide Web Consortium, een organisatie die de webstandaarden voor het World Wide Web ontwerpt.

2.1 XMLXML, eXtensible Markup Language, is een opmaaktaal om informatie gestructureerd op te slaan door middel van zelf te definiëren tags. Omdat de taal gestructureerd weergegeven wordt, in platte tekst, is het zowel voor de computer als voor de mens mogelijk deze in te lezen en te verwerken.

Voorbeeld van XML.

De taal is erg strikt. Zo zijn de tags hoofdlettergevoelig en moet elke tag gesloten worden. Er is sprake van ‘well formed XML’ als de syntax correct is, ‘valid XML’ als de structuur van het document overeenkomt met het bijbehorend XML schema.Aan een XML-document kan men een XSL-document koppelen. Een eXtensible Stylesheet Language document beschrijft hoe de XML-data omgevormd kan worden naar bijvoorbeeld een HTML-document.

2.2 SOAPSOAP, Simple Object Access Protocol, definieert de eisen waaraan een webservice-bericht moet voldoen en waaruit het kan bestaan. De communicatie tussen applicaties over het netwerk is gebaseerd op XML.SOAP bestaat uit 3 delen:

De SOAP envelope: het algemene raamwerk voor de communicatie; de SOAP encoding rules: voor het omzetten van variabelen in programmeertalen

naar types in SOAP; de SOAP RPC representation: een conventie voor het aanroepen van remote

procedures en de bijbehorende reacties van de webservice.

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <GetAuth xmlns="http://enetricity.com/"> <barcode>string</barcode> </GetAuth> </soap12:Body></soap12:Envelope>

In de Body van de Envelope gebeurt de functie aanroep. Hierboven wordt er bijvoorbeeld een string barcode verwacht. “xmlns” staat voor de XML namespace.

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <GetAuthResponse xmlns="http://enetricity.com/"> <GetAuthResult> <xsd:schema>schema</xsd:schema>xml</GetAuthResult> </GetAuthResponse> </soap12:Body></soap12:Envelope>

Het antwoord dat terugkeert is in het XML-formaat. Bij ons wordt de data doorgestuurd in een dataset, zie bovenstaand schermafdruk (Voorbeeld van XML).

2.3 WSDLWSDL, Web Services Description Language, beschrijft de structuur van de berichten die nodig zijn om een dienst aan te sturen en van de berichten die als antwoord terug ontvangen kunnen worden.Een WSDL-document is opgemaakt in XML.Het WDSL-schema van onze gebruikte webservice bekomen we door op link “Service Description” te klikken.

WSDL-schema van een webservice.

2.4 UDDIUDDI staat voor Universal Description, Discovery and Integration. Het is een soort van Gouden Gids op het internet waar bedrijven webservices kunnen aanbieden of opzoeken om zelf te gebruiken in programma’s. Deze lijst wordt in XML gegeven.Bij het toevoegen van een webservice in Visual Studio kan er gezocht worden naar UDDI Servers op het lokale netwerk.

De derde mogelijkheid laat toe om te zoeken naar UDDI Servers in het lokale netwerk.

UDDI bestaat uit drie categorieën, men noemt die ook wel eens de ‘gekleurde pagina’s’. De witte pagina’s bevatten algemene informatie over het bedrijf, zoals het adres, contactgegevens, … De gele pagina’s zorgen voor categorisatie van de bedrijven naargelang de aangeboden diensten. De groene pagina’s bevatten de technische informatie over de aangeboden diensten, of de manier om deze te bekomen van het aanbiedende bedrijf.

2.5 Webservices aanmaken in Visual StudioBij CultuurNet werden de webservices aangeboden door CultuurNet Vlaanderen. In IlsaNet PE hebben we onze webservices zelf aangemaakt.Om een webservice te maken met behulp van Visual Studio kiezen we voor “File – New – Web Site…”. We kiezen voor de template “ASP.NET Web Service”. Als taal kan er gekozen worden tussen “Visual Basic”, “Visual C#” en “Visual J#”. Wij kozen in beide projecten voor “Visual C#”.

Het aanmaken van een webservice in Visual Studio.

Via de knop “Browse” kunnen we gemakkelijk de locatie van de webservice instellen. Dit is de plaats waar de webservice komt te staan.

We kiezen een virtuele map van de lokale IIS voor het ontwikkelen van de webservice.

Het project wordt aangemaakt en we krijgen 2 belangrijke bestanden. Een ASMX-bestand, de eigenlijke webservice, en de code voor de webservice in een CS-bestand.

De bestandsstructuur die Visual Studio aanmaakt.

Visual Studio voorziet meteen een werkende webmethod in de webservice, de public string HelloWorld. Zelf kunnen we hier nu ook WebMethods aan toevoegen. We maken, zoals in normale programmacode, een procedure aan van het gewenste type (void, string, int, boolean, dataset, …) en zetten deze public. Om ervoor te zorgen dat deze procedure herkend wordt als een webmethod plaatsen we er het kernwoord “[WebMethod]” voor.Optioneel kunnen er aan webservices parameters toegevoegd worden. Dit kunnen objecten zijn van een type naar keuze. In de webmethod “public int Som” worden 2 integers a en b meegestuurd bij de aanroep. De webmethod verwerkt die en geeft de som als een integer terug.

using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]public class Service : System.Web.Services.WebService{ public Service () { //Uncomment the following line if using designed components //InitializeComponent(); }

[WebMethod] public string HelloWorld() { return "Hello World"; }

[WebMethod] public int Som(int a, int b) { return a + b; }}

Nadat we de webservice in Visual Studio gecompileerd hebben zijn de webmethods aanspreekbaar via de browser.

Bij het aanroepen van een webservice krijgen we een overzicht van alle mogelijke operaties.

3 Voor- en nadelen van webservicesHet grote voordeel van een webservice is dat de teruggestuurde data meteen in het programma kan gebruikt worden alsof die in het programma zelf is aangemaakt.Een webservice is een krachtig iets, maar er moet ook rekening gehouden worden met enkele nadelen.Eén van de problemen die voorkomt bij het gebruik van webservices is het vrij grote netwerkverkeer. In programma’s die geen gebruik maakten van webservices wordt alles lokaal of via het interne snelle netwerk aangesproken. Echter wordt alles nu verstuurd via het relatief trage internet. Voor een eenvoudig resultaat vormt dit nog geen probleem maar voor grote datasets, bijvoorbeeld in IlsaNet PE (zie Deel 4) waar de webservice enkele 1000-en opdrachten ophaalt, kan dit een rol spelen.Het resultaat dat terugkeert is in het XML-formaat. Het XML-formaat heeft onder andere de eigenschap dat het veel tags gebruikt om zo de data gestructureerd weer te geven.Beveiliging is ook iets waar men rekening mee moet houden. Omdat de webservice dikwijls vrij beschikbaar is op het internet kan er misbruik van gemaakt worden. Denken over de nodige beveiliging is hier zeker een optie die best genomen wordt.

4 Gebruik van webservices in codeIn Visual Studio kan er naar een webservice gerefereerd worden. De webservice zal zichtbaar zijn als een object in het project.Om een referentie toe te voegen rechtsklikken we in de “Solution Explorer” op “References” en kiezen we voor “Add Web Reference…”. We komen uit op volgend scherm:

Het toevoegen van een webservice in Visual Studio 2005.

We kunnen verwijzen naar het ASMX-bestand maar we kunnen ook verwijzen naar het beschrijvende WSDL-document.Nadat we op “Go” drukken wordt de informatie over de webservice opgehaald en getoond. We geven de webreferentie een gepaste naam zodat we die kunnen aanspreken als een object in de programmacode.

Hier werd er een referentie gelegd naar de webservice WSIlsaNetPE.

De webservice gebruiken is nu nog maar een kleine stap. We maken een webservice-object aan van het gewenste type. Met volgende code kan er informatie opgehaald worden via deze referentie:

WSIlsaNetPE.Service oWS = new WSIlsaNetPE.Service();DataTable oDTSettings = this.oWS.GetSettings().Tables[0];

Webservice-object oWS roept de operatie of webmethod GetSettings op. Visual Studio converteert het teruggekeerde XML-document naar het gepaste objecttype. In ons geval wordt er een dataset teruggestuurd waarvan we de eerste tabel nemen.

Deel 3: Project CultuurNet

1 OmschrijvingOm er voor te zorgen dat Vlaanderen cultureel actief is en blijft werd onder andere CultuurNet Vlaanderen opgericht. CultuurNet Vlaanderen biedt enkele interessante hulpmiddelen zodat men in programma’s en websites gemakkelijk aan de centrale databank met culturele activiteiten kan. Via de website http://www.cultuurweb.be/sdk/ wordt er een Software Development Kit (SDK) aangeboden. Hierin worden er webservices aangeboden (via een WDSL-bestand, zie Deel 2) en wordt er uitgelegd hoe de gegevens te gebruiken en te interpreteren.De website is uitgewerkt in een modulaire DotNetNuke-omgeving zodat uitbreiding geen problemen vormt. Ook is de website gemakkelijk te veranderen van gemeente en regio. Zo komen enkel de activiteiten voor deze gemeente en regio op het scherm.Ik heb dit project niet volledig uitgewerkt, enkel de hoofdmodules werden voorzien. Onderstaand scherm toont een voorbeeld, echter nog in de test-omgeving/opmaak.

2 Functionaliteit

2.1 Module ViewThemesVia de aangeboden webservices van CultuurNet Vlaanderen worden de verschillende thema’s opgevraagd. Deze worden in een boomstructuur op het scherm getoond.

2.2 Module ViewEventsNadat een thema gekozen is in de module ViewThemes worden alle evenementen getoond voor de ingestelde stad en regio in het gekozen thema.Per evenement wordt er een korte beschrijving getoond en de verschillende data waarop die doorgaat. Ook wordt de plaats van het evenement gegeven. Bedoeling is dat er ook een afbeelding komt van het evenement, maar deze is nog niet aanwezig.Indien men op de titel klikt kan men de detailgegevens van het evenement bekijken.

Een overzicht van alle evenementen binnen een thema.

2.3 Module ViewDetailWanneer we in de module ViewEvents een evenement hebben aangeklikt wordt de module ViewDetail geladen. Deze module toont de details van het evenement. De beschrijving, lijst van foto’s, datums, … worden gegeven.Merk op in onderstaand schermvoorbeeld dat er op de datumlijst nog een conversie dient te gebeuren. Momenteel worden de “choice list id’s” waarden afgebeeld. Dit dient bij de verdere uitwerking aangepast te worden. Uitleg over wat de “choice lists” zijn wordt verder uitgelegd in het onderdeel uitwerking.

2.4 Module ViewSettingsDeze module zorgt ervoor dat de toepassing gemakkelijk kan aangepast worden naar een andere stad of regio. De mogelijke regio’s en steden worden door CultuurNet Vlaanderen aangeboden via een choice list.De instellingen worden opgeslagen in het XML-document settings.xml.

Na het wijzigen van de stad en/of regio wordt er bevestigd met de code die gegeven wordt.

Voorbeeld van een RegioID en StadID.

Er werden 3 instellingen bijgehouden in settings.xml. De RegioID en de StadID waarvoor de website de activiteiten moest tonen en een ReloadInterval.Het ReloadInterval bepaalt om de hoeveel tijd de webservice moet opgeroepen worden om de categorieën op te halen voor de module ViewThemes. Per keer dat de gegevens opgehaald worden, wordt er een lokaal XML-bestand gecached. De opbouw van het menu kan zo sneller gebeuren.

3 Uitwerking

3.1 DotNetNuke

3.1.1 Wat is DotNetNuke?

De omgeving waarin de CultuurNet website gemaakt is, is een DotNetNuke-omgeving. DotNetNuke (DNN) is een gratis openbron Content Managment Systeem (CMS). Het is een variant op de IBySpy portaal van Microsoft. Met DotNetNuke kan er op een gemakkelijke en snelle wijze een website gebouwd worden. Dit kunnen websites zijn voor eigen gebruik, commerciële websites, intranet, …DotNetNuke is gebouwd rond een ASP.NET (VB.NET) platform. De kracht van DotNetNuke is onder andere dat alles modulair is opgebouwd. Een DotNetNuke website is opgebouwd uit diverse pagina's. Elke pagina is weer opgebouwd uit modules. Een module is een bepaalde functionaliteit om content te beheren en te tonen. Deze modules kunnen gemakkelijk worden toegevoegd, verwijderd, en verplaatst worden op een pagina. Voorbeelden van modules zijn: een forum, een poll, …Ook staat de vormgeving (het ontwerp of “skin”) los van de inhoud. Zo kan de website gemakkelijk en snel in een nieuw jasje gestoken worden. Op internet zijn er tal van (gratis) sjablonen te vinden.Het onderhouden van een DotNetNuke website vergt weinig kennis, iedereen die kan tekstverwerken kan een website beheren zonder zich zorgen te maken over het

eventueel offline gaan van de website door een foute actie. Om de website te beheren is er enkel een internettoegang naar de website nodig.

3.1.2 Installatie van DotNetNukeHet recentste installatiebestand voor DotNetNuke (DotNetNuke_4.0.3_Install.zip, 4,7MB) kan gedownload worden via http://prdownloads.sourceforge.net/dnn.Dit ZIP-bestand pakken we uit in een map naar keuze. Hier werd er in de standaardmap voor websites (C:\Inetpub\wwwroot) een map “dnn” aangemaakt.

Het uitgepakte installatiebestand voor DotNetNuke.

De volgende stap is in IIS (Internet Information Services) een virtuele map aan te maken die verwijst naar de map met de zojuist uitgepakte bestanden.

Rechtsklikken op Standaardwebsite en kiezen voor Nieuw – Virtuele map…

Het aanmaken van een nieuwe virtuele map gebeurt aan de hand van een wizard.Er wordt eerst gevraagd hoe je de map wilt noemen (alias). Men kan nu meteen via de servernaam gevolgd door de alias de website opvragen, bijvoorbeeld http://localhost/dnn.Vervolgens wordt gevraagd waar de map die de website bevat zich bevindt.Als laatste stap wordt gevraagd welke rechten er op de map van toepassing zijn.

Na het doorlopen van de wizard is de nieuwe virtuele map zichtbaar in het lijstje.

Virtuele map “DNN” in IIS die verwijst naar “C:\Inetpub\wwwroot\dnn\DotNetNuke_4.0.3_Install”.

Nu kunnen we surfen via de browser naar deze website, maar we zullen nog een fout krijgen. Het bestand “release.config” moet namelijk aangepast worden naar “web.config”.

Ook nu is DotNetNuke nog niet klaar om gebruikt te worden. Om DotNetNuke te gebruiken dient er een databank geïnstalleerd te worden. In onze “web.config” vinden we volgende code.

<connectionStrings> <!-- Connection String for SQL Server 2005 Express --> <add name="SiteSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|Database.mdf;" providerName="System.Data.SqlClient" /> <!-- Connection String for SQL Server 2000/2005 <add name="SiteSqlServer" connectionString="Server=(local);Database=DotNetNuke;uid=;pwd=;" providerName="System.Data.SqlClient" /> --></connectionStrings>

We passen de connectionSettings aan zodat DotNetNuke zich kan installeren in onze databank. We kiezen voor een databank op een SQL Server 2005. Daarvoor zetten we de SQL Server 2005 Express Connection String in commentaar.

<connectionStrings> <!-- Connection String for SQL Server 2005 Express --> <!—add name="SiteSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|Database.mdf;" providerName="System.Data.SqlClient" /> <Connection String for SQL Server 2000/2005--> <add name="SiteSqlServer" connectionString="Server=enetricity04; Database=DotNetNukeAdriaan; uid=sa; pwd=;" providerName="System.Data.SqlClient" /></connectionStrings>

Als we nu naar de DotNetNuke website surfen, zal DotNetNuke zich installeren. Dit duurt enige tijd.

3.1.3 DotNetNuke beheren

3.1.3.1 AanmeldenOm DotNetNuke te beheren dienen we aan te melden. Er zijn 2 standaardgebruikers actief na de installatie: admin en host. Beiden hebben als paswoord hun aanmeldingnaam.Na het aanmelden krijgen we er enkele navigatiemenu’s bij.

Bovenaan de pagina komen de functies voor de pagina’s en de modules te beheren.

Ook het navigatiemenu wordt uitgebreid.

3.1.3.2 Pagina’s aanmakenOm pagina’s aan te kunnen maken dienen we eerst ingelogd te zijn als administrator in DotNetNuke. In ons navigatiemenu bovenaan bij de “Page Functions” kiezen we voor “Add”. We komen dan op de pagina terecht waar we de nieuwe pagina kunnen configureren.Naast een naam, titel en beschrijving voor de nieuwe pagina zijn er ook toegangsrechten (“Permissions”) die ingesteld kunnen worden. Belangrijk is dat we ervoor zorgen dat de pagina voor iedereen (indien toegestaan) zichtbaar is. Indien gewenst kan natuurlijk voor een strikter beleid gekozen worden. Ook kunnen er wijzigingsrechten voor de pagina gegeven worden aan gebruikers. Administrators kunnen altijd de pagina zien en aanpassen. “Unauthenticated Users” zijn bezoekers van de website die niet ingelogd zijn.Met de instelling ‘Copy Modules From” kan er een directe kopie gebruik worden van een reeds bestaande pagina.Om de nieuwe pagina te bevestigen klikt men op “Update” onderaan de pagina.

3.1.3.3 Modules toevoegen aan een paginaAan een pagina kunnen we 1 of meer modules toevoegen. Ook hier moeten we weer met wijzigingsrechten op de gewenste pagina ingelogd zijn.Om een module op een pagina toe te voegen moet de huidige pagina de pagina zijn die we willen wijzigen. Vervolgens klikken we bovenaanElke module krijgt ook een naam.

3.1.4 Communicatie tussen de modulesElke module wordt als een onderdeel ontwikkeld maar communicatie tussen de modules blijft belangrijk als je alles als 1 geheel wil laten voorkomen.Achter onze ASPX-pagina’s bevinden zich CS-bestanden, de code-behind. We nemen als voorbeeld de ViewThemes module. Nadat we een thema kiezen moet de ViewEvent-module aangepast worden.Een module-communicatie starten gebeurt door middel van onderstaande code:

protected void Menu1_MenuItemClick(object sender, MenuEventArgs e){ ThemeMenuClickArgument oArgument = new ThemeMenuClickArgument(Int32.Parse(e.Item.Value), e.Item.Text); ModuleCommunicationEventArgs oArgs = new ModuleCommunicationEventArgs("CNTheme", oArgument, "CNThemes", "CNEvents"); ModuleCommunication(this, oArgs);}

De communicatie wordt opgeroepen bij een “Menu1_MenuItemClick”, dus wanneer er een thema gekozen wordt.Er wordt een “ModuleCommunicationEventArgs oArgs” aangemaakt die de communicatie-eigenschappen bevat. “CNTheme” is vanuit welke module de communicatie start.

3.2 Software Development KitOm de data te verkrijgen over de culturele evenementen binnen Vlaanderen wordt gebruik gemaakt van webservices die aangeboden worden door CultuurNet Vlaanderen. Hiervoor werd er een Software Development Kit beschikbaar gesteld die te vinden is op http://www.cultuurweb.be/sdk/.Veel details van evenementen, personen en organisaties worden weergegeven via zogenaamde “choice list id's”. Deze komen overeen met een bepaald label. In de SDK vinden we bijvoorbeeld volgende tabel die we kunnen toepassen in de ViewDetail module.

opening_times day_type

maandag 202.0dinsdag 202.1woensdag 202.2donderdag 202.3vrijdag 202.4zaterdag 202.5zondag 202.6open_type

open 203.0open op afspraak 203.1gesloten 203.2onbepaald 203.3

Omdat deze gegevens door CultuurNet Vlaanderen enkel beschikbaar gesteld werden via een tabel op een webpagina moesten de gegevens geconverteerd worden naar een XML-bestand zodat inlezen door de toepassing geen probleem was.

4 ConclusieMet het project CultuurNet leerde ik het principe van een DotNetNuke-omgeving kennen en maakte ik kennis met webservices. Webservices spelen in het volgende project, IlsaNet PE, een grote rol.Bij de ontwikkeling moest ik ook rekening houden met de aangeboden Software Development Kit. Sommige informatie over een veld ontbrak of de naamgeving van een veld was niet altijd even duidelijk. Het gebruik van choice-lists is wel goed, enkel is het jammer dat het label van een id niet kan opgevraagd worden via een webservice. Nu werden de choice-lists lokaal gekopieerd naar een XML-document. Indien er aanpassingen zouden gebeuren aan de choice-lists bij CultuurNet Vlaanderen zal dit niet automatisch zichtbaar zijn in onze toepassing.

Deel 4: Project IlsaNet PE

1 Omschrijving

1.1 IlsaNet.ClassicIlsaNet.Classic is een geïntegreerd ERP softwaresysteem voor firma’s die aan intermodaal containertransport doen en volgt hiervoor alle administratieve stappen op, van orderverwerking tot facturatie. Het voorziet in volgende mogelijkheden:

adressen prospecten klanten leveranciers vervoerders locaties (vb. los- of laadplaatsen) producten containers chassis ritten ferries spoorlijnen diensten dossiers (opdrachten) CMR’s ferryboekingen spoorboekingen transportlijsten kostenlijsten extra-kosten dieseltoeslagen facturatie offertes

Alle onderdelen van het pakket kunnen beveiligd worden aan de hand van groepen en gebruikers.Natuurlijk kunnen er vanuit het systeem rapporten opgevraagd worden over de meest uiteenlopende zaken.Er is een koppeling voorzien naar een extern boekhoudprogramma, waardoor facturen die aangemaakt en/of beheerd worden door IlsaNet automatisch kunnen doorvloeien naar de boekhouding, rekening houdend met eventueel verschillende boekingsgroepen.Daarnaast kan het systeem ook gekoppeld worden aan een optionele faxmodule waardoor het systeem naadloos geïntegreerd wordt met het eNetricity IlsaNet.FAX systeem.Er is ook de mogelijkheid om een elektronisch archief te koppelen aan het systeem (eNetricity DISinet), waardoor documenten zoals CMR’s, e-mails, enz door het systeem verwerkt worden en te allen tijde terug opvraagbaar zijn.

1.2 IlsaNet PEHet doel van IlsaNet PE is om de handelingen uitgevoerd door magazijniers en chauffeurs te vergemakkelijken. De weg die colli’s en palletten afleggen zal op elk moment kunnen opgevraagd worden door middel van het log-systeem. Magazijniers zullen met hun Pocket PC, die uitgerust is met een barcode scanner, meteen kunnen zien voor welke klant of voor welke rit de colli of het pallet bestemd is. De chauffeur kan zo ook colli’s of palletten inscannen bij het laden van zijn voertuig. Dit is een controle of de juiste goederen genomen worden en zo is er ook betere controle op diefstal.Het transportbedrijf zal hierdoor een grotere capaciteit kunnen verwerken en de kans op fouten verkleinen.

2 Functionaliteit

2.1 AanmeldingOm het aanmelden in IlsaNet PE op een vlotte manier te laten verlopen heeft elke gebruiker een barcode gekregen. Deze barcode kan dan op het aanmeldingsformulier ingescand worden. Meteen na het scannen wordt gekeken of de gebruiker gemachtigd is. De knop “OK” staat er indien de barcode scanner niet gaat of men zijn barcode bijvoorbeeld niet vindt. Manueel intoetsen kan steeds.

Aanmelding in IlsaNet PE.

Indien men geen toegang tot het systeem heeft, dan wordt er een melding gegeven.Indien men wel toegang heeft, worden de gegevens van de gebruiker opgevraagd: de taal van de gebruikersinterface (klaar voor latere uitbreiding), de UserID, de UserGroupID (magazijnier, chauffeur, …). Ook wordt het gepaste menu geladen, chauffeurs krijgen het chauffeur menu te zien, in alle andere gevallen wordt het magazijnier menu geladen.

2.2 Synchronisatie met de centrale databankNa het succesvol inloggen in het systeem komen we op het synchronisatie formulier terecht. Hier kan de aangemelde gebruiker beslissen of er een synchronisatie moet gebeuren met de centrale databank.

Er zijn 2 soorten synchronisaties: de volledige synchronisatie en de interval synchronisatie.Bij de volledige synchronisatie, die in dit formulier gebruikt wordt, worden buiten de opdracht- en ritgegevens ook alle gegevens die niet frequent wijzigen gesynchroniseerd. Dit zijn onder andere de leveringsstatussen, gebruikers, …Er wordt ook rekening gehouden met de aangemelde gebruiker. Indien het een chauffeur is die aangemeld is, worden enkel de opdrachten bestemd voor zijn of haar rit opgevraagd. Indien geen chauffeur (magazijnier, …) worden alle gegevens opgevraagd. Het bepalen of het een chauffeur is die aangemeld is gebeurt aan de hand van de parameter UserGroupID die bij het aanmelden verkregen werd.Bij de interval synchronisatie worden enkel de wijzigingen sinds de laatste synchronisatie opgehaald. Hiervoor werd er een Communicator-class gemaakt die om de x tijd de wijzigingen gaat ophalen van de server.Voorbeelden hiervan zijn opdracht- en ritgegevens, scans die gestuurd worden naar het scanlog op de server, adressen, …Deze synchronisatie zorgt ervoor dat nieuwe opdrachten meteen zichtbaar zijn in het systeem en dat er bij een foute planning in het systeem de fout kan aangepast worden.

Tijdens een volledige synchronisatie kan men zien in welke stap men zit.

Niet elke stap duurt even lang, dit is afhankelijk van de te verwerken hoeveelheid data. Het synchroniseren van bijvoorbeeld de opdrachten kan wat tijd innemen omdat dit een 1000 tal records zijnIndien er een fout zou voorkomen in een bepaalde stap, dan wordt er op het einde van de synchronisatie gemeld waar de fout voorkwam. Zo is er een gemakkelijker foutopsporing. Fouten die kunnen voorkomen zijn bijvoorbeeld de netwerkverbinding die wegviel, een fout in de databank, een programmeerfout, …

Na het synchroniseren wordt er gemeld of er al dan niet een fout voorkwam.

De synchronisatie voor de magazijniers gebeurt continu omdat er gebruik gemaakt wordt van het ‘gratis’ draadloos netwerk.Chauffeurs beschikken over een GPRS connectie en deze verbinding kost per verstuurde byte. Daarom wordt er bij chauffeurs zo weinig mogelijk data verstuurd. De chauffeur doet bij vertrek een volledige synchronisatie en wanneer die onderweg is worden enkel berichten gesynchroniseerd via de GPRS verbinding. Hiervoor wordt gebruikt gemaakt van sockets.

2.3 Magazijn gedeelteNa het aanmelden als magazijnier (iedereen behalve de chauffeurs) komt men in het magazijn menu terecht.

Het menu voor de magazijniers.

De magazijnier beschikt over volgende keuzes: Nieuw aangekomen magazijn Retour / Afhaling

Consolidaties / Wijziging Laden bestelwagen Laden vrachtwagen Klaarzetten ritten bestelwagen Klaarzetten ritten vrachtwagen Opzoeken

Elke menukeuze wordt hierna uitgelegd.

2.3.1 Nieuw aangekomen magazijnNieuwe colli’s en palletten die aankomen in het magazijn moeten op de juiste plaats gezet worden. Het leveringsadres voor de colli of het pallet wordt op het scherm weergegeven. Er word ook getoond waar de magazijnier de colli of het pallet dient te plaatsen in afwachting van de definitieve planning. Voor bestelwagens worden deze in een standaardrit geplaats en voor de vrachtwagens wordt er gezegd bij welke klant de colli of het pallet moet geplaatst worden.

Er wordt op het scherm weergegeven waar men de colli of het pallet moet plaatsen.

Indien een barcode niet gekend is, wordt er melding gegeven.

De colli of het pallet is niet gekend in het systeem.

Elke scanactie wordt gelogd zodat er in het systeem altijd kan gezien worden wie welke colli of pallet waar heeft gescand.

2.3.2 Retour / AfhalingIndien colli’s of palletten terug komen in het magazijn omdat deze niet geleverd konden worden, worden de barcodes ingescand en wordt gevraagd naar de reden van het niet leveren. De barcodes zijn op de pocket pc gekend omdat tijdens de synchronisatie alle nog niet voltooide leveringen opgevraagd worden.In het magazijn kunnen chauffeurs toekomen met niet geleverde colli’s en/of palletten omdat deze geweigerd werden door de klant, er niemand aanwezig was op de plaats van levering, …De magazijnier, niet de chauffeur, scant eerst alle toegekomen colli’s en/of palletten in. Deze worden toegevoegd aan de lijst. Er wordt telkens gekeken of de barcode al dan niet herkend wordt door het systeem. De gegevens van de colli’s en/of palletten die kunnen terugkeren, m.a.w. de nog niet afgewerkte leveringen, worden om de x tijd gesynchroniseerd.

De ingescande barcode is niet gekend.

Wanneer alle barcodes ingescand zijn van de teruggekeerde opdrachten klikt de magazijnier op de knop “OK” onderaan.De magazijnier komt dan uit op het volgende scherm. Hier geeft hij de reden op van het niet leveren.

Opgeven van de reden van retour.

Er wordt een reden gekozen (geweigerd, gesloten, beschadigd, …) en als optie kan er een bijkomende informatie opgegeven worden. De redenen worden bij de synchronisatie uit het centrale systeem opgehaald zodat deze steeds uitbreidbaar zijn. De redenen worden opgeslagen op de Pocket PC in de tabel LeveringStatus.Indien alles ingevuld is, drukt de gebruiker wederom op de knop “OK”.De gegevens worden nu opgeslagen in de tabel Scan. Deze tabel wordt bij de volgende synchronisatie gestuurd naar de server waar verdere verwerking is voorzien.

2.3.3 Consolidatie / WijzigingNadat colli’s en palletten toegekomen zijn in het magazijn staan deze klaar om geconsolideerd te worden op palletten door de magazijnier. Hiervoor scant hij 1 voor 1 de colli’s in.Zoals altijd wordt eerst gekeken of het een gekende barcode is in het systeem, indien niet wordt er een foutmelding gegeven.

Er wordt gecontroleerd of de barcode gekend is.

De barcode wordt herkend en de nodige actie komt op het scherm.

Indien er veranderd wordt van klant wordt gevraagd naar bevestiging.Indien er een nieuw pallet moet aangemaakt worden, wordt er een etiket afgedrukt. Er wordt gevraagd om deze op het pallet te kleven.

Er is al een pallet in opbouw voor deze klant.

Indien er al een pallet voor deze klant in aanbouw is wordt gezegd op welk pallet de colli moet komen.Indien het een gekende barcode is wordt de bestemming opgezocht.Automatisch wordt er via de webservice setConsolidatie opgezocht of er al een pallet voor deze klant in opbouw is.Indien het een nieuw pallet is wordt er een barcode afgedrukt die op het pallet dient gekleefd te worden. Is er reeds een pallet in opbouw, dan wordt gemeld welk pallet dit is.Indien een pallet vol is, klikt de magazijnier op de knop “Pallet vol”.Het scherm wordt leeggemaakt.

2.3.4 Laden bestelwagenZowel magazijniers als chauffeurs kunnen een bestelwagen laden. Een chauffeur dient de barcode van de rit in te scannen. Een magazijnier kan de gewenste rit kiezen via de voorziene knoppen.

Nadat de rit gekozen is komen we op het formulier waar men alle colli’s kan inscannen. Op het scherm komt ook aan de hoeveelste colli men zit bij het scannen.Nadat de barcode herkend werd door het systeem wordt gekeken of de barcode al gescand is. Indien een colli voor de 2de keer gescand werd, komt er een melding op het scherm dat deze reeds gescand is. Indien nog niet gescand wordt de actie van laden in de bestelwagen weggeschreven in de Scan tabel zodat het centrale systeem de verwerking kan doen.Indien de colli voor een andere rit bestemd is, wordt de juiste rit en de nummerplaat gegeven.

2.3.5 Laden vrachtwagenBij het laden van een vrachtwagen wordt eerst de rit gescand door de chauffeur. Natuurlijk wordt er weer eerst gekeken of deze rit gekend is in het systeem.Indien de rit herkend wordt er gevraagd om de colli’s en/of palletten in te scannen. Ook hier wordt het aantal van de te scannen colli’s en palletten gegeven.

Ook hier worden de gegevens weggeschreven naar een scanlog in de Mobile SQL databank op de Pocket PC. Deze wordt bij een volgende synchronisatie naar de server gestuurd zodat verdere verwerking mogelijk is.

2.3.6 Klaarzetten ritten bestelwagenWanneer nieuwe colli’s toekwamen in het magazijn werden deze ingescand en toegewezen aan een standaardritnummer. Na de planning kunnen de bestelwagens klaargezet worden voor het laden.Men scant eerst de barcode van de standaardrit waarvoor men wil gaan klaarzetten. Er wordt ook gekeken of de rit wel gekend is in het systeem. Indien de rit gevonden komt de naam van de chauffeur voor deze rit ook op het scherm.

Wanneer de rit is gescand wordt gevraagd om alle colli’s in te scannen. Er wordt gecontroleerd of de colli gekend is in het systeem.

Er is ook controle of de colli wel in de juiste rit staat. Indien niet wordt de juiste rit samen met de naam van de chauffeur opgegeven.

De colli staat bij de verkeerde rit.

2.3.7 Klaarzetten ritten vrachtwagenNa het sorteren en consolideren staan de palletten in willekeurige volgorde in de bufferzone. Na het maken van de planning kunnen deze palletten toegewezen worden aan een rit. De magazijnier scant vervolgens de palletten in willekeurige volgorde in en ziet op het scherm voor welke chauffeur deze bestemd is.

2.3.8 OpzoekenHet opzoeken formulier wordt gebruikt wanneer een magazijnier een colli of pallet tegenkomt waarvan hij wil weten voor wie hij bestemd is. Het kan namelijk zijn dat een colli of pallet verloren geraakt is in het magazijn en pas enige tijd later teruggevonden wordt. Een colli of pallet blijft namelijk in het systeem op “open” staan zolang deze niet is afgehandeld. Ook hier wordt er gecontroleerd of de barcode bestaat.

2.4 Chauffeur gedeelteNa het aanmelden als chauffeur komt men in het chauffeur menu terecht.

Het menu voor de chauffeurs.

De chauffeur beschikt over volgende keuzes: Ritten Laden bestelwagen Laden vrachtwagen

Inbox Nieuw bericht

Elke menukeuze wordt hierna uitgelegd.

2.4.1 RittenDeze functie wordt gebruikt wanneer de chauffeur een lading wil lossen bij een klant.Wanneer de chauffeur klikt op de knop “Ritten” wordt er eerst een overzicht getoond met alle ritten. De chauffeur kiest hier voor de rit voor dewelke hij wil lossen.

De chauffeur kiest een rit en de opdrachten worden weergegeven.

Vervolgens wordt er een overzicht getoond van alle opdrachten voor de gekozen rit. Standaard worden enkel de nog uit te voeren opdrachten voor deze rit getoond. Er kan ook gekozen worden om de al uitgevoerde opdrachten ook te tonen. De chauffeur kan een opdracht kiezen uit de lijst waarvoor de details opgevraagd zullen worden.

Na het kiezen van de opdracht worden als controle de opdrachtgegevens op het scherm weergegeven (klantnaam, adres van levering, …)Wanneer een chauffeur de bestelling wil lossen bij een klant wordt er eerst nagegaan of deze actie mogelijk is. Het kan zijn dat de klant gesloten is, de levering niet juist is, een beschadiging opgemerkt wordt, …

Bij een levering horen ook documenten. De chauffeur scant deze documenten in en geeft op van welk type deze zijn. De verschillende documenttypes werden bij het synchroniseren opgehaald. De gegevens worden direct naar de centrale gestuurd zodat kan opgevolgd worden welke documenten gebruikt zijn.

Bij het lossen van de colli’s en/of palletten worden deze gescand. Er kan gekozen worden per gescande colli of pallet of deze aanvaard of geweigerd wordt.Wanneer de colli of pallet aanvaard wordt, dient de klant te tekenen voor ontvangst. De naam van de persoon die tekent wordt eveneens gevraagd. Bij het weigeren van een colli of pallet wordt naar een reden gevraagd.

Ook kan een chauffeur colli’s of palleten opladen. Hiervoor scant hij de aanwezige barcode in en wordt er gevraagd aan de klant om te ondertekenen.

2.4.2 Laden bestelwagenDit item is hetzelfde als bij de magazijniers.

2.4.3 Laden vrachtwagenDit item is hetzelfde als bij de magazijniers.

2.4.4 InboxOmdat er wijzigingen in de planning kunnen gebeuren of omdat er een dringende boodschap is voor een chauffeur terwijl die al vertrokken is, wordt er gebruik gemaakt van een berichtensysteem.Om de zoveel tijd wordt er gevraagd aan de server, via een GPRS-connectie, of er nieuwe berichten aanwezig zijn voor de aangemelde gebruiker. Is dit zo dan zullen deze binnengehaald worden.De aangemelde gebruiker krijgt dan een melding op het scherm wanneer er een nieuw bericht is toegekomen. Zo moet de chauffeur niet manueel gaan kijken of er nieuwe berichten zijn.De toegekomen berichten worden via de knop “Inbox” weergegeven. Na het klikken op de knop krijgt men het bericht te zien en kan men optioneel antwoorden op het bericht via de knop “Reageer”.

2.4.5 Nieuw berichtDe chauffeur kan ook zelf berichten sturen naar de planning. Hij kan klikt hiervoor op de knop ‘Nieuw bericht” in het hoofdmenu. De chauffeur typt zijn bericht in en kiest vervolgens uit een lijst van gebruikers naar wie hij het bericht wil sturen. Deze lijst wordt bij een volledige synchronisatie opgehaald.

3 Uitwerking

3.1 Programmeren op de Pocket PC

3.1.1 De gebruikte hardware

3.1.1.1 Test-Pocket PC’sVoor de toepassing IlsaNet PE hebben we enkele vereisten nodig:

WLAN voor in het magazijn; GPRS voor chauffeurs die onderweg zijn; Windows Mobile zodat met het .Net Compact Framework kan gewerkt worden; barcode scanner.

Bij de ontwikkeling van de toepassing werd er gebruik gemaakt van enkele Pocket PC's. Allen zijn voorzien van het Windows Mobile besturingssysteem. Windows Mobile werd speciaal ontwikkeld voor PDA's en is een afgeleide van Windows XP.De HP iPAQ hw6500 is de eerste Pocket PC die gebruikt werd bij de ontwikkeling van IlsaNet PE. Deze Pocket PC was voorzien van de 2003 versie van Windows Mobile. Deze Pocket PC beschikte niet over WLAN.

HP iPAQ hw6500 gecradled.

Daarom werd er de QTEK S200 bijgehaald die wel over WLAN beschikte. De prestaties vielen enigszins tegen. Niet alleen omdat deze Pocket PC voorzien was van de iets zwaardere 2005 versie van het Windows Mobile besturingssysteem maar ook het feit dat dit toestel over minder processorkracht en minder werkgeheugen beschikte dan de HP iPAQ hw6500.

3.1.1.2 Barcode scanner

De SDIO-IN-HAND-SCAN CARD.

De barcode scanner die gebruikt werd is de SDIO IN-HAND-SCAN CARD van SocketComm (www.socketcomm.com). De barcode scanner is een SDIO kaart. Een Secure Digital Input/Output kaart is gebaseerd op en is compatibel met een gewone SD geheugenkaart. De Pocket PC detecteert automatisch of het om een gewone SD of een SDIO kaart gaat.Om de barcode scanner te kunnen gebruiken moet er een programma geïnstalleerd worden op de Pocket PC. Deze kan op de website van de fabrikant gedownload worden.Om op een gemakkelijke wijze te scannen werd er een ‘trigger button’ ingesteld, een knop die een bepaalde actie oproept indien men op een bepaalde knop duwt. In Windows Mobile kunnen we knoppen koppelen aan programma’s via Start - Settings - tabblad Personal – Buttons – tabblad Program Buttons.

Instellen van knoppen en hun acties in Windows Mobile.

Aan elke knop, afhankelijk van het aantal (hardwarematige) knoppen op de Pocket PC, kan een programma gekoppeld worden. Voor het scannen moet er een koppeling zijn met het programma SocketScan. Die zorgt ervoor dat de barcode gelezen wordt en als toetsaanslagen naar het actieve invoerveld gestuurd worden. Een barcode is m.a.w. een grafische voorstelling van een tekenreeks.In het programma SocketScan kan er ook ingesteld worden welke soort barcodes (Code 39, Code 128, UPC, …) er herkend zullen worden, alsook of er voorvoegsels (prefix) of achtervoegsel (suffix) gebruikt moeten worden. De instellingen laten we staan op de standaardinstellingen. Als suffix wordt “\r” gebruikt. Zo kan een programma het scannen van de barcode detecteren omdat na elke scan er automatisch een enter meegegeven wordt. Na het ontdekken van een ‘enter-gebeurtenis’ door het programma kan deze overgaan tot de nodige acties.

Prefix en suffix instellen in SocketScan.

3.1.1.3 OpticonOmdat het scannen met de SDIO IN-HAND-SCAN niet vlot ging werd gezocht naar een betere Pocket PC. Na wat zoeken kwamen we uit op de Opticon PHL5300. Deze had een

ingebouwde barcode scanner zodat de prestaties merkbaar hoger lagen. Het scannen ging heel vlot nu en van verkeerd gescande barcodes was geen sprake meer.

Opticon PHL5300 met ingebouwde barcode scanner.

3.1.2 De gebruikte software

3.1.2.1 ActiveSyncActiveSync is een synchronisatie programma ontwikkeld door Microsoft. Het zorgt ervoor dat favorieten, agenda-afspraken, bestanden, … tussen de Windows PC en de Pocket PC gesynchroniseerd worden. De huidige versie is 4.1.

Microsoft ActiveSync 4.1 hoofdvenster.

ActiveSync zorgt er ook voor dat bestanden gekopieerd en eventueel geconverteerd worden naar de Pocket PC. Via “Deze computer” kan men de Pocket PC verkennen.

De mapstructuur op een Pocket PC.

Op een Pocket PC zijn er geen verschillende schijven en partities. De mappen beginnen in “\”, zo heb je bijvoorbeeld de map “\Program Files”.

De map “\Program Files” op de Pocket PC.

ActiveSync kopieert en converteert indien nodig de bestanden.

3.1.2.2 .NET Compact FrameworkVoor het coderen werd gebruik gemaakt van Visual Studio 2005 met het .NET Compact Framework 2.0. Het .NET Compact Framework is een versie van het .NET Framework die speciaal herontwikkeld werd voor mobiele apparaten (PDA, Smart Phone, …). Er wordt rekening gehouden met de beperktere processorkracht en met het kleinere werkgeheugen. Het .NET Compact Framework is grotendeels gelijk aan het .NET Framework op enkele uitzonderingen na.Zo kwamen we tijdens het programmeren een probleem tegen waar er een foutboodschap gegeven werd toen we een .NET Compact Framework datalaag wouden hergebruiken in een .Net Framework toepassing. Een dataset in het .NET Compact Framework is niet hetzelfde als een dataset in het .Net Framework werd later duidelijk. Het was de bedoeling om de datalaag te hergebruiken, wat goed programmeren is, maar dit kon dus niet meer. Er werd noodgedwongen gekozen voor een datalaag voor de server en een datalaag voor de client.

Het krachtige aan .NET is dat men in het programma meerdere programmeertalen door elkaar kan gebruiken. De code wordt bij het compileren automatisch vertaald naar een tussentaal, Microsoft Intermediate Language (MSIL) genoemd. Elke omgeving die ondersteuning heeft voor het .NET Framework kan de toepassing draaien.

3.1.2.3 Remote Display Control voor de Pocket PCRemote Display Control voor de Pocket PC is 1 van de PowerToys die Microsoft via hun website beschikbaar stelt.PowerToys zijn handige hulpprogramma’s die gratis te downloaden zijn, er wordt echter geen ondersteuning gegeven.Met Remote Display Control kan men de Pocket PC aansturen via de computer. Dit is vooral handig indien men de toepassing op de Pocket PC wil demonstreren voor een groter publiek.Ook tijdens het ontwikkelen is het handig omdat invoer via het vaste toetsenbord veel rapper kan.Voor de schermafdrukken in dit verslag is ook gebruik gemaakt van deze toepassing.

Remote Display Control voor de Pocket PC.

Enig nadeel is dat er wat vertraging merkbaar is. Standaard staat er een herlaadinterval van 100ms ingesteld. Het sneller zetten heeft niet echt veel effect omdat de Pocket PC over een beperkte processorkracht beschikt.Remote Display Control is te downloaden op:http://www.microsoft.com/technet/prodtechnol/wce/downloads/ppctoys.mspx

3.1.2.4 EmulatorOm te testen werd er ook gebruik gemaakt van een Pocket PC emulator. In Visual Studio zit er een emulator voor de Windows Mobile 2003 versie standaard ingebouwd. Willen we de toepassing in een Windows Mobile 2005 omgeving testen, dan dienen we een bijkomende SDK te downloaden.“Windows Mobile 5.0 SDK for Pocket PC” kan gedownload worden via:http://www.microsoft.com/downloads/details.aspx?familyid=83a52af2-f524-4ec5-9155-717cbe5d25ed&displaylang=en

3.2 Synchronisatie

3.2.1 WerkingIn de programmacode gebeurt alle communicatie via de Communicator-class. Deze class zorgt ervoor dat de meest geschikte verbinding wordt gekozen om de data te versturen. Zo krijgt WLAN voorrang op GPRS. GPRS is in tegenstelling tot WLAN namelijk traag en kost geld per verstuurde byte.

In de programmacode wordt er, indien er synchronisatie vereist is, een object van het type Communicator aangemaakt.De Communicator-class bepaalt welke Comm-classes er toegestaan zijn voor deze synchronisatie. De Communicator-class krijgt namelijk een integer Communications mee die bepaalt welke Comm-classes er mogen gebruik worden. Er wordt gebruik gemaakt van de binaire logica. Hieronder een voorbeeld:

A B C D E1 2 4 8 16

Met de machten van 2 kan men voor elke gewenste combinatie, door de som van de getallen te nemen, een unieke som van de getallen bekomen. Het getal 5 staat hier bijvoorbeeld voor A en C want 1 + 4 = 5 en dit getal bekomen door een andere combinatie is niet mogelijk.De toegestane Comm-classes worden nu gesorteerd op prioriteit. Dit gebeurt door een public int Priority op te vragen uit de verschillende Comm-classes.Wanneer de synchronisatie mag beginnen wordt de procedure StartSync() aangeroepen vanuit de programmacode. Deze procedure creëert een thread op de achtergrond waarin de procedure Synchronise uit de oCurrentComm opgeroepen wordt.In de procedure Synchronise wordt er eerst gezocht naar het beste toegestane communicatiekanaal. Dit gebeurt door de lijst van toegestane Comm-classes te overlopen totdat er een beschikbare gevonden is. Deze procedure draait in een lus en om de x tijd

wordt de procedure opnieuw opgeroepen. De instelling voor het herlaadinterval kan gevonden worden op de Pocket PC in de tabel Settings van de Mobile SQL Databank.In elke Comm-class is er een procedure “Sync(DataSet oDS, int actie, bool checkexist)” voorzien. De integer actie staat voor wat er allemaal moet gesynchroniseerd worden.Op de volgende pagina staat een schema van de volledige synchronisatie. Op het schema zien we 3 classes:

SyncDB-class: het formulier waar gevraagd wordt of er gesynchroniseerd moet worden;

Communicator-class: regelt de synchronisatie, bepaalt de verbinding, … ; gekozen communicator class: synchroniseert dit kan via WLAN gaan, GPRS, …

De SyncDB-class maakt een thread aan voor het synchroniseren zodat de gebruiker eventueel kan doorwerken. In deze thread (in de Communicator-class) wordt eerst bepaald via welke connectie de synchronisatie zal verlopen. Dit kan via WLAN, GPRS, … of later te implementeren mogelijkheden zijn. De Communicator-class zal van de mogelijke verbindingen de verbinding kiezen met de hoogste prioriteit (eigenschap van elke verbinding-class).De Communicator-class roept dan telkens de gepaste procedure aan van de gekozen verbinding-class om te synchroniseren. Momenteel gebeurt dit via een CradleComm-class of een WLANComm-class. Beide classes zijn een afgeleide van de WSComm-class, de verbinding-class die gebruik maakt van webservices. Later kan er geopteerd worden om een andere verbinding toe te voegen om te synchroniseren. Een overzicht van de aangesproken webservices vindt men in “3.2.1.1 Synchronisatie via webservices”

3.2.1.1 Synchronisatie via webservicesIn de WSComm-class, die als basis dient voor de CradleComm en de WLANComm, wordt er via webservices data verkregen en verstuurd naar de webserver die op zijn beurt toegang heeft tot de databank.Algemene informatie over webservices kan men vinden in “Deel 2: Webservices”.Een overzicht van de gebruikte webservices in IlsaNet PE vindt men in onderstaande tabel:Webservice procedure BeschrijvingGetAuth Gebruikt bij het aanmelden. Er wordt een string barcode als

parameter meegegeven en als resultaat wordt de userid, groupid en taal terug gegeven.

GetDocumentType Documentypes die mogelijk zijn bij het leveren van een opdracht.

GetKlanten De lijst van alle klanten die voorkomen in de opdrachten voor de aangemelde gebruiker worden gegeven.

GetRedenen Leveringsstatussen waarom men niet kon leveren zijn dynamisch gemaakt. Via deze procedure worden ze opgehaald.

GetSettings Deze procedure maakt het mogelijk om bijvoorbeeld de tijd tussen 2 synchronisaties in te stellen. Ook is het mogelijk om het adres van de server aan te passen. Zo moet men niet op elke Pocket PC de instelling manueel aanpassen.

GetUsers Een lijst van alle in het systeem gekende gebruikers wordt opgevraagd via deze procedure. Deze lijst wordt bijvoorbeeld gebruikt bij het verzenden van berichten.

SetBarcodes Deze procedure zorgt ervoor dat alle scans die gebeuren op de Pocket PC ook op de server terecht komen zodat men in IlsaNet Classic DE kan zien waar een colli of pallet zich bevindt.

SetConsolidatie Wanneer er tot consolidatie overgegaan wordt, wordt er via deze procedure gekeken of er al dan niet een pallet in aanbouw is. Ook hiermee wordt er gemeld dat een pallet vol is voor een bepaalde bestemming.

VulPocketPcDB Dit is de grootste webservice-procedure. Deze kan enkele 1000-en records bevatten. Deze bevat alle opdrachten met hun opdrachtdetails en de hieraan gekoppelde ritten. Via deze procedure wordt er ook de tijd van de server opgevraagd zodat bij een volgende synchronisatie enkel de nieuwe of aangepaste gegevens opgehaald worden. In de databank wordt er namelijk een “last changed” veld bijgehouden.

3.2.1.2 Synchronisatie via socketsEr wordt gebruikt gemaakt van sockets om zo de datastroom tussen client en server te beperken wanneer er onder andere gebruik gemaakt wordt van een GPRS-connectie. Bij webservices heeft men nogal wat overhead door de verschillende XML-tags die de gegevens structureren. De data die verzonden wordt bij het gebruik van sockets is van het type string.

Schema hoe sockets werken, stap 4 en 5 worden herhaald zolang als nodig.

Voor de communicatie tussen de client en de server in IlsaNet PE werd er een opdracht-protocol uitgewerkt. Elke string die werd gezonden via sockets bestond uit 4 letters die de actie voorstellen, gevolgd door eventuele parameters voor deze actie.Enkele voorbeelden van commando’s gebruikt in IlsaNet PE:Commando BeschrijvinggAUTKDLPLB0002 Een vraag van de client naar de server toe

of de gebruiker met barcode KDLPLB0002 toegang krijgt tot de toepassing.

aMSG10|5|2|tekst|2006-06-01 15:10:05 Dit commando voegt een bericht toe aan de databank. Dit kan zowel op de Pocket PC als op de server.Er wordt meegegeven van welke gebruiker het bericht afkomstig is en voor wie het bestemd is. Er wordt als eerste parameter een ID van het bericht meegegeven. De ontvanger kan dan bevestigen dat het bericht aangekomen is zodat deze op de zender verwijdert kan worden. Parameter worden gescheiden door het “|” teken.

3.2.2 PerformantieOmdat het invoegen van records op een Pocket PC redelijk wat tijd inneemt moest er performante code geschreven worden zodat het synchronisatie proces niet te lang zou duren.Bij een eerste versie duurde het invoegen van de opdrachten iets van een 60 seconden omdat er per record een insert-commando opgeroepen werd.In een latere versie werd dit proces 4 keer versneld omdat gebruik gemaakt werd van een recordset die de tabel aanstuurde. Een volledige synchronisatie voor het magazijn duurt nu nog slechts een 2 à 3 minuten.Om het invoegen te optimaliseren werd gebruik gemaakt van een testprogramma die 5000 rijen in een tabel invoegde. Het meten van de uitvoeringstijd werd gedaan met een High-Performance Timer class. Net voor het starten van de procedure starten we de timer en na het uitvoeren stoppen we die. Via de eigenschap Duration bekomen we de uitvoeringstijd.

HiPerfTimer pt = new HiPerfTimer();pt.Start();

doe iets

pt.Stop()MessageBox.Show(pt.Duration.toString());

Omdat de aangeboden High-Performance class voor de vaste PC bedoeld is, moest de code een klein beetje aangepast worden. In plaats van te verwijzen naar Kernel32.dll moest er op de Pocket PC verwezen worden naar Coredll.dll.De High-Performance class is te vinden op:http://www.codeproject.com/csharp/highperformancetimercshar.asp

3.3 SQL Mobile

3.3.1 SQL Mobile databank aanmakenOm er voor te zorgen dat er niet elke keer een webservice of een socket server hoeft aangesproken te worden, worden de gegevens lokaal op de Pocket PC opgeslagen.Om gegevens op de Pocket PC op een goede manier te bewaren moet er een databank programma geïnstalleerd worden. We maken gebruik van Microsoft SQL Mobile 2005. Deze databank structuur wordt standaard ondersteund door Visual Studio 2005.Om een mobiele databank toe te voegen aan het project kiezen we in onze Solution Explorer voor Add - New Item en selecteren we de optie “SQL Mobile Database”. De extensie voor zo’n databank is SDF.

Een nieuwe SQL Mobile databank aanmaken in Visual Studio.

Na het toevoegen van de databank wordt er automatisch een referentie gelegd naar System.Data.SQLServerCe.dll zodat de databank ook aanspreekbaar is vanuit de code.We kunnen in de Server Explorer de databank beheren. Belangrijkste en meest gebruikte functie is een tabel toevoegen en beheren. We kunnen er primaire sleutels instellen, uniekheid van het veld aanduiden, automatische nummering, …

De databank structuur is zichtbaar in de Server Explorer.

Een nieuwe tabel aanmaken in de mobiele databank.

Wanneer we onze toepassing deployen zal Visual Studio controleren of de software voor Microsoft Mobile SQL reeds geïnstalleerd is op de Pocket PC. Indien dit niet het geval is zal Visual Studio automatisch de nodige software op de Pocket PC installeren. De software die geïnstalleerd wordt, heet Query Analyzer.

Overzicht van de tabellen in de databank.

Dankzij de installatie van Query Analyzer op de Pocket PC is het niet enkel mogelijk om de databank te gebruiken in een programma maar kunnen we ook de databank beheren. In de Query Analyzer kunnen we de gegevens bekijken, SQL instructies uitvoeren, tabellen wijzigen, …

SQL-instructies uitvoeren is geen probleem in de Query Analyzer.

De tabellen in de databank kunnen ook aangepast worden.

3.3.2 IlsaNet PE databankDe Mobile SQL databank op de Pocket PC voor IlsaNet PE is een directe afgeleide van de SQL Server versie van IlsaNet Classic DE (Dispatch Edition).De volgende tabel geeft een overzicht van de databank gebruikt in IlsaNet PE. De benaming werd zoveel mogelijk overgenomen van de Microsoft SQL 2005 databank IlsaNet Classic DE.

TabelnaamKolomnaam Datatype Lengte Null Uniek PK Informatie

ActieCodeID int 4 N J JBeschrijving nvarchar 50 J N N

BerichtenID int 4 N J JDatum datetime 8 J N N Datum wanneer het bericht is opgesteldBericht nvarchar 500 J N N De tekst van het berichtReceived bit 1 N N N Is het een ontvangen bericht of een

bericht die de gebruiker zend?BerichtServerID int 4 J N N De berichtid op de serverIsSend bit 1 N N N Is het bericht succesvol verzonden?VanUserID int 4 J N N Van welke persoon komt het bericht?NaarUserID int 4 J N N Voor wie is het bericht bestemd?

DocumentTypeID int 4 N J JOmschrijving nvarchar 50 J N N

KlantenID int 4 N J JAdresID int 4 N N N Verwijzing naar KlantLocatieKenmerkCode nvarchar 3 J N N Code die verwijst naar een klant,

bijvoorbeeld CTD

KlantLocatieLocatieID int 4 N N JLocatienaam nvarchar 200 J N NAdresID int 4 N N NBedrijfsnaam nvarchar 150 N N NAdreslijn nvarchar 200 N N NHuisNr nvarchar 100 J N NPostcode nvarchar 10 N N NPlaats nvarchar 50 N N N

LeveringStatusID int 4 N J JOmschrijving nvarchar 50 N N N Bijvoorbeeld: klant gesloten, beschadigd,

OpdrachtDetail

IlsaNetOrderDetailID int 4 J J J De unieke ID voor de colli of het palletIlsaNetOrderID int 4 N N N Verwijzing naar Opdrachten, per

opdracht zijn er meerdere colli’s of paletten

Barcode nvarchar 50 J N N De barcode van de colli of het palletGeconsolideerdePallet bit 1 J N N Is het een pallet die bestaat uit allemaal

colli’s?

OpdrachtenID int 4 N N JVolgNr int 4 N N JActieCodeID int 4 J N N Bijhouden waar de opdracht zicht

bevindt in het systeem, nodig voor de scan logs

LocatieID int 4 J N N Verwijzing naar KlantLocatie, adres waar de opdracht geleverd wordt

StandaardRit int 4 J N N De standaardrit is een nummer voor voorlopig planning.

VrachtwagenModule bit 1 J N N Wordt de opdracht getransporteerd met de bestelwagen of met de vrachtwagen?

RitID int 4 J N N Verwijzing naar RittenKilogram nvarchar 10 J N N Het gewicht van de opdrachtAantalCollis nvarchar 10 J N N Aantal colli’s die de opdracht heeftAantalPallets float 8 J N N Aantal palletten die de opdracht heeftInfo ntext 16 J N N Bijkomende info die men bij een

opdracht kan geven, bijvoorbeeld leveren voor 9u

OpdrachtUitgevoerdID int 4 N J JOpdrachtID int 4 N N NVolgNr int 4 N N N

RittenID int 4 N J JRitnummer int 4 J N NNummerplaat nvarchar 50 J N NBarcode nvarchar 50 J N NZoneveld int 4 J N NUserID int 4 J N N

ScanID int 4 N J JDatum datetime 8 J N N Datum van de scanPersoonID int 4 J N N Wie heeft er gescand?Barcode nvarchar 50 J N N Welke barcode is er gescand?ScanActie int 4 J N N Op welk formulier is de barcode

gescand?ZendingID int 4 J N N Hoort de barcode bij een zending?RedenID int 4 J N N Reden van niet leveren, te kiezen uit

vaste waardenReden nvarchar 500 J N N Een zelf op te stellen reden van niet

leveren

Settingsname nvarchar 25 N J J De naam van de instellingvalue nvarchar 100 N N N De waarde van de instelling

UsersID int 4 N J JNaam nvarchar 50 N N N

4 ConclusieMet het programmeren van IlsaNet PE heb ik ondervonden dat programmeren op een Pocket PC niet altijd even vlot ging.Eerst en vooral is het testen een stuk moeilijker door de beperkte invoermogelijkheden van het apparaat. Ook het plaatsen (deployen) van een nieuwe versie gaat stukken trager. Dit zorgde voor een langere ontwikkeltijd.Daarbij was niet alles zoals we dachten. We hadden bepaalde code in het gewone .NET Framework die werkte maar toen we die wilden gebruiken in het .NET Compact Framework kwamen we tot het besluit dat er een bepaalde method ontbreekt in de gebruikte klasse.Omdat IlsaNet PE een afgeleide versie is van IlsaNet Classic DE moest ik de databank van IlsaNet Classic DE ook onder de knie krijgen zodat ik IlsaNet PE kon ontwikkelen. Deze

databank is door de jaren heen langzaam aangegroeid tot meer dan 80 tabellen met enkele 10-tallen velden en 10000-en records.

ConclusieTijdens deze stage bij eNetricity bvba heb ik met verschillende nieuwe technieken kennis kunnen maken. Hierbij was niet enkel Internet een goede bron van informatie en voorbeelden, maar ook mijn collega’s bij eNetricity zorgden voor de nodige assistentie. Enkele nieuwe technieken waarmee ik kennis maakte zijn:

Webservices; DotNetNuke; het gebruik en programmatie van een Pocket PC; NHibernation techniek; …

Naast de nieuwe technieken kon ik ook mijn huidige kennis testen en combineren in grotere programma’s. In grote programma’s is het immers belangrijk dat er goed nagedacht wordt over de opbouw ervan zodat verdere uitbreiding geen problemen geeft.

BronnenHibernation:

http://www.allapplabs.com/hibernate/introduction_to_hibernate.htmWebservices:

http://wsdn.nl/SiteManager.php?cSite=16&cLayout=38&cPage=193&cId=1DotNetNuke:

http://www.dotnetnuke.com http://www.is.nl/base.aspx?pageid=727

SQL Mobile http://www.microsoft.com/sql/editions/sqlmobile/sqlmobile.mspx http://msdn2.microsoft.com/en-us/library/ms171951.aspx

Goedkeuring verslag

Gelezen en goedgekeurd.

Lieven Bogaert - Stagementor Kristien Roels – Stagebegeleider