Utveckling av
lagerhanteringsapplikation
för handterminal
Kristoffer Rönnberg
Marcus Magnusson
EXAMENSARBETE 2007
DATATEKNIK
Postadress: Besöksadress: Telefon: Box 1026 Gjuterigatan 5 036-10 10 00 (vx) 551 11 Jönköping
Utveckling av
lagerhanteringsapplikation
för handterminal
Development of
storage management application
for PDA
Kristoffer Rönnberg Marcus Magnusson
Detta examensarbete är utfört vid Tekniska Högskolan i Jönköping inom ämnesområdet Datateknik.Arbetet är ett led i den treåriga
högskoleingenjörsutbildningen
Författarna svarar själva för framförda åsikter, slutsatser och resultat. Handledare: Bengt Ekeberg
Omfattning: 10 poäng (C-nivå) Datum: 2007-06-15
Sammanfattning
1
Abstract
This exam paper has been a collaboration between the writers and System Anderson AB. The assignment was about completing a client application, running on a PDA, and a server application, running as a web service. The web service handles the communication with System Anderssons existing database. The main goal for the application is that it will be used to increase efficiency in storage management. The client application will hold functions for withdrawal, purchase, delivering and inventory. This project brings up the implementation of the functions for withdrawal and purchasing.
A part of this exam paper contains the basic theory that underlies the project. It also contains a summary of the different choices that has been made.
The result of this exam paper is a well-functioning version of our application. The application contains functions for withdrawal and purchasing.
Sammanfattning
2
Sammanfattning
Detta examensarbete har gjorts i samarbete med System Andersson AB. Uppdraget bestod i att färdigställa en klientapplikation för en handterminal samt en serverapplikation i form av en webbtjänst som sköter all
kommunikation med företagets befintliga databas. Målet är att applikationen skall användas för att effektivisera lagerhantering inom verkstadsindustrin. Klientapplikationen ska innehålla funktioner för uttag, inköp, inleverans och inventering. Detta projekt avgränsar sig till att implementera funktionerna för uttag och inköp.
Rapporten innehåller en grundläggande teoridel som tar upp den teori som ligger till grund för projektet. Dessutom innehåller den en redogörelse för de olika metodval som gjorts.
Resultatet av detta examensarbete är en väl fungerande applikation.
Applikationen innehåller fungerande funktioner för såväl uttag som inköp.
Nyckelord
Systemutveckling, Handterminal, Compact Framework, C#, XML, Streckkoder, Prestanda, Driftsäkerhet, Användargränssnitt
Sammanfattning
3
Figurlista
Figur 1 Kompileringsförlopp, Java [2] ... 13
Figur 2 Gotive H42 ... 19
Figur 3 Interleaved 2 of 5 ... 22
Figur 4 Code 39 ... 23
Figur 5 Upp- och nerpil ... 29
Figur 6 Backspace ... 29
Figur 7 Exit ... 29
Figur 8 Alfanumeriskt tangentbord ... 32
Figur 9 Numeriskt tangentbord ... 33
Figur 10 Anställningsvy ... 34 Figur 11 Funktionsmeny ... 35 Figur 12 Uttagsmeny ... 36 Figur 13 Uttag TO ... 36 Figur 14 UtgPlanTO ... 37 Figur 15 UtgEjPlanTO ... 37 Figur 16 UtgTOUttaget ... 38
Figur 17 Fritt Uttag ... 38
Innehållsförteckning 4
Innehållsförteckning
1 Inledning ... 6 1.1 FÖRORD ... 6 1.2 BAKGRUND ... 7 1.2.1 Uppdraget ... 7 1.2.2 Företagets bakgrund ... 8 1.3 SYFTE OCH MÅL ... 9 1.4 AVGRÄNSNINGAR ... 9 1.5 DISPOSITION ... 10 2 Teoretisk bakgrund ... 11 2.1 PROGRAMMERINGSSPRÅK ... 11 2.1.1 Objektorienterad programmering ... 11 2.1.2 Java ... 12 2.1.3 C# ... 14 2.2 UTVECKLINGSPLATTFORM ... 15 2.2.1 .NET Framework ... 152.2.2 .NET Compact Framework ... 15
2.2.3 Visual Studio.NET ... 15 2.2.4 ASP.NET ... 15 2.2.5 Windows CE ... 15 2.2.6 XML ... 16 2.2.7 Pervasive PSQL ... 18 2.3 HANDTERMINAL ... 19 2.3.1 Gotive H42 ... 19 2.3.2 Gotive SDK ... 20 2.4 STRECKKODER ... 22 2.4.1 Interleaved 2 of 5 ... 22 2.4.2 Code 39 ... 23 3 Genomförande ... 24 3.1 INLEDNINGSFAS ... 24 3.1.1 Utvecklingsmiljö ... 24 3.1.2 Testmiljö ... 25 3.2 PRESTANDA ... 26 3.3 DRIFTSÄKERHET ... 27 3.4 ANVÄNDARVÄNLIGHET ... 28
3.5 DESIGN OCH FUNKTION ... 29
3.5.1 Uppbyggnad ... 29 3.5.2 Knappklass... 29 3.5.3 Streckkodsläsare ... 30 3.5.4 Alfanumeriskt tangentbord ... 32 3.5.5 Numeriskt tangentbord ... 33 4 Resultat ... 34
4.1 DESIGN OCH LAYOUT ... 34
4.1.1 Anställningsvy ... 34
4.1.2 Funktionsmeny ... 35
4.1.3 Uttagsmeny ... 36
4.1.4 Inköpsmeny ... 39
4.2 FRÅGESTÄLLNINGAR OCH MÅL ... 40
Innehållsförteckning
5
6 Referenser ... 42
Inledning
6
1 Inledning
1.1 Förord
Det här examensarbetet är en del av vår kandidatexamen i Datateknik vid Jönköpings Tekniska Högskola. Projektet har gett oss mer insikt och förståelse för hur ett systemutvecklingsprojekt fungerar i ”verkligheten”.
Vi skulle först och främst vilja tacka System Andersson AB och dess VD Thomas Candemar för att vi har fått möjligheten att genomföra detta arbete. Ett speciellt tack vill vi rikta till Andreas Käll som har varit till stor hjälp genom hela arbetet samt övrig personal som varit delaktiga i projektet. Vi vill också tacka all personal på företaget för det varma bemötandet vi har möts av vid våra besök. Till sist tackar vi vår handledare på JTH, Bengt Ekeberg, som varit till stöd och hjälp under vår rapportskrivning.
Arbetet på System Andersson AB har varit till stor nytta och har gett oss en ökad förståelse för ett ingenjörsmässigt arbete samt en god inblick i det
stundande arbetslivet. Vi hoppas att vårt arbete i sin tur kan generera nytta för företaget på samma sätt som det gjort för oss.
Inledning
7
1.2 Bakgrund
1.2.1 Uppdraget
Detta examensarbete har gjorts i samarbete med System Andersson AB. System Andersson har under 8 års tid använt sig av en äldre generation handterminaler. Då företaget gjort en behovsanalys och sett ett behov för vidareutveckling av marknaden ämnar de att utveckla en applikation för användning på den nya generationens handterminaler. En detaljerad beskrivning har därför tagits fram av företaget.
Projektet omfattar design, implementering och dokumentation av en applikation för handterminalen från företaget Gotive. Applikationen skall innehålla funktioner för:
• Inleverans – Matchar inköpsorders mot verkligt levererat antal • Uttag – Registrerar uttag av material och verktyg från lagret • Inköp – Bokar inköp för framtida arbeten
• Inventering – Matchar lagersaldo (databas) mot verkligt lagersaldo Tanken är att en färdig version ska visas på Elmia Subcontractor i november 2007. Applikationen kommer att bestå av en klientapplikation som körs på handterminalen samt en serverapplikation i form av en webbtjänst som körs på en central server. Tanken är att klientapplikationen kommunicerar med
webbtjänsten. Webbtjänsten i sin tur har hand om all databashantering. Viktiga punkter för företaget i projektet är:
• Prestanda • Driftsäkerhet
• Användarvänlighet
Inom prestanda ligger främst tyngdpunkten på att få ner svarstiderna. Detta för att produkten överhuvudtaget skall ha en framtid på marknaden. Med
driftsäkerhet menas att produkten alltid skall vara uppkopplat mot nätverket. Endast när hela nätverket går offline är det acceptabelt att handterminalen inte har kontakt. Eftersom även personer med liten eller ingen datorvana skall arbeta med terminalen ställs höga krav på användarvänlighet i applikationen. Programmet skall vara lättnavigerat och tydligt för att undvika fel och
Inledning
8
1.2.2 Företagets bakgrund
System Andersson AB grundades år 1980. System Andersson är
marknadsledande inom verkstadssystem, med över 1500 installationer på tillverkande företag. Företaget har idag ca.20 anställda.
Förra året levererade System Andersson över 100 verkstadssystem.
Huvudprodukten är Andersson Qwick MPS, som är ett verkstadssystem, men System Andersson levererar även egna kringprodukter, exempelvis
handterminaler. System Andersson kan om kunderna så vill, ta helhetsansvar och koppla såväl Affärssystem som CRM system till deras egenutvecklade verkstadssystem.
Inledning
9
1.3 Syfte och mål
Målet med detta examensarbete är att färdigställa klient- och server-applikation för handterminalen så att de motsvarar de mål och krav som satts upp samråd med företaget.
• Prestanda
Hur uppnås korta svarstider vid kommunikation mellan server- och klientapplikation?
• Driftsäkerhet
Hur ska klientapplikationen behandla kommunikationsproblem med server?
• Användarvänlighet
Hur strukturerar man ett användargränssnitt för att det ska passa såväl personer med datorvana, som personer utan?
En avgörande del i projektet är att handterminalen ska effektivisera personalens arbete. Detta uppnås genom korta svarstider, hög driftsäkerhet och ett väl genomtänkt användargränssnitt.
1.4 Avgränsningar
För att färdigställa projektet inom tidsramen för examensarbetet, kommer vi att avgränsa oss till att endast implementera funktionerna för inköp och uttag. I mån av tid kommer vi även att implementera funktionerna för inventering och inleverans.
Inledning
10
1.5 Disposition
Rapporten utgår från att läsaren har viss kännedom om programmering. Teori
I teoridelen tar vi upp den teori som ligger till grund för rapporten. Vi börjar med att jämföra de olika programmeringsspråk som är intressanta för projektet. Sedan tar vi upp och förklarar de olika delarna i den utvecklingsmiljö vi har valt. Tills sist har vi ett avsnitt som berör den handterminal vi använt i projektet.
Genomförande
I denna del av rapporten tar vi först upp och förklarar vilket
programmeringsspråk och vilken utvecklingsmiljö vi har valt och varför vi gjorde dessa val. Vidare förklaras hur vi satte upp en fungerande testmiljö. Sedan följer vår utredning av de viktigaste punkterna i projektet. Avsnittet avslutas med en ingående redogörelse för hur applikationen fungerar och de problem vi stött på under projektets gång.
Resultat
I detta avsnitt av rapporten tar vi upp hur slutresultatet blev. Vi redogör även för hur applikationen svarar upp mot de mål som satts upp.
Diskussion
Teoretisk bakgrund
11
2 Teoretisk bakgrund
2.1 Programmeringsspråk
2.1.1 Objektorienterad programmering
Med objektorientering avses det att man ser till de objekt som programsystemet ska byggas upp av istället för att fokusera på funktionerna. Om man ser till programmeringen så innebär det att bygga upp sitt program av ett antal objekt som är väl avgränsade. Grundstenarna i objektorientering är:
• Klasser • Inkapsling • Arv
• Polymorfism
En klass är en beskrivning av en grupp objekt med likadana egenskaper och operationer. Klassen Bil skulle t.ex. kunna bestå av egenskapen färg och operationen accelerera.
Vanligtvis brukar man gömma ett objekts attribut för omvärlden och endast visa ett ”interface” utåt. Om man använder klassen Bil så kan man se att den har en operation för att accelerera men man kan inte se hur den utför
operationen. Genom att dölja objektets attribut från omvärlden garanteras att alla ändringar i objektet utförs inom klassen, så kallad inkapsling.
Ett sätt att återanvända klasser kan vara genom arv. Om vi ser klassen Bil som en basklass och Terrängbil och Sportbil som subklasser så ärver de två
subklasserna basklassens attribut och operationer. Subklasserna kan även förfoga över egna attribut och operationer.
Polymorfism innebär att en operation som finns i flera klasser kan ha olika utföranden av metoden, t.ex. accelerationen ska utföras annorlunda hos en terrängbil jämfört med en sportbil.
Teoretisk bakgrund
12
2.1.2 Java
2.1.2.1 Historia
Java är idag en av de stora aktörerna på programmeringsmarknaden. Språket är utvecklat av amerikanen James Gosling. Det som till slut blev
programmeringsspråket Java hette från början OAK och var det språk som fanns i Suns produkt *7 (Star Seven). Detta var en apparat som bestod av en pekskärm med vilken man kunde styra flera olika elektronikapparater i hemmet, t.ex. tv, video och stereo. När inte den fick genomslagskraft las projektet ner. När man sedan insåg att internet var nästa stora grej utvecklade Gosling OAK till ett fullt utvecklat programmeringsspråk. Inför lanseringen i maj 1995 döptes språket om från OAK till Java.[1]
2.1.2.2 Översikt
Det som Sun hade för ögonen när Java utvecklades för framförallt tre punkter • Inbyggt stöd för objektorientering
• Säkert
• Plattformsoberoende
Java är till 100 % objektorienterat till skillnad mot en del andra språk
exempelvis C++ där man kan välja om man vill skriva objektorienterat eller inte.
Att Java är plattformsoberoende möjliggörs genom att den färdigprogrammerade koden översätts till bytekod. Många andra
programmeringsspråk översätts till maskinkod, vilket medför att de ofta är plattformsberoende eftersom olika plattformar tolkar koden olika. Men med detta steg att översätta till bytekod blir det ett steg extra i kompileringsfasen. Man måste ha en så kallad ”Java Virtual Machine” (JVM)installerad som kan översätta denna bytekod till maskinkod. Detta har gjort att Java historiskt sett har ansetts vara ett lite långsammare programmeringsspråk än andra
Teoretisk bakgrund
13
Nedan visas en skiss över processen från skriven kod till körklar kod.
Figur 1 Kompileringsförlopp, Java
Det finns flera olika plattformar för programutveckling inom Java. Nedan följer en lista på de olika plattformar som finns
• SE, Standard Edition
Den vanligaste plattformen som används inom medelstora datasystem • ME, Micro Edition
Version som är nedbantad, används bl.a. till mobiltelefoner och handdatorer
• EE, Enterprise Edition
Den mest avancerade plattformen, används inom komplexa och stora dator- och server-system
2.1.2.3 Kodexempel
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!"); }
Teoretisk bakgrund
14
2.1.3 C#
2.1.3.1 Historia
C# skapades av Anders Hejslberg. Hejslberg hade tidigare jobbat med en kompilerare för programmeringsspråket Pascal. Denna kompilerare, som kallades Turbo Pascal, blev senare integrerad i Borlands IDE. Hejslberg anställdes senare av Borland och blev slutligen chefsarkitekt där. 1999 lämnade han Borland för Microsoft och skapade språket J++, som är Microsofts implementering av Java. År 2000 påbörjade han sitt jobb som huvuddesigner av programmeringsspråket C#, uttalas C-Sharp. [2]
2.1.3.2 Översikt
Målet med C# var att skapa ett språk som var enkelt, modernt och generellt. 2001 släpptes den första versionen av C# på marknaden. Ett C# projekt består av en eller ett antal källkodsfiler. Nedan visas tillvägagångssättet för hur en kompilering av ett C# projekt går till, om än något förenklad.
• Transformering • Översättning • Syntax analys
Vid transformering konverteras koden man skrivit till en ordnad sekvens av Unicodetecken, Unicode är en global standard för teckenkodning.
I nästa steg översätts sekvensen av Unicodetecken till en ström av tokens. Syntaxanalys innebär att strömmen av tokens översätts till exekverbar kod.[3] 2.1.3.3 Kodexempel using System; namespace HelloWorld { class Hello {
public static void Main() {
Console.WriteLine("Hello World!"); }
} }
Teoretisk bakgrund
15
2.2 Utvecklingsplattform
2.2.1 .NET Framework
.NET Framework är ett ramverk för utveckling av applikationer skapat av Microsoft. Ramverket ger stöd för att använda olika programspråk och
bibliotek, samt förenklar skapandet av windowsapplikationer. Ett exempel på ett färdigt bibliotek som ingår är Windows Forms, som används för att förenkla utvecklandet av grafiska gränssnitt.
Med stöd för ett antal olika programmeringsspråk ger .NET Framework programmeraren en möjlighet att välja det som språk som passar denne bäst.
2.2.2 .NET Compact Framework
.NET Compact Framework är en förenklad version av .NET Framework. Microsoft skapade Compact Framework för användning på handdatorer, varför det krävdes ett mindre ramverk. Genom att hålla nere storleken höjdes
prestandan.
2.2.3 Visual Studio.NET
Visual Studio.NET är en programutvecklingsmiljö eller en IDE (Integrated Development Environment) som kan användas för att skriva program med en rad olika programmeringsspråk.
2.2.4 ASP.NET
Microsoft ASP.NET är benämningen på en samling tekniker som används för att bygga dynamiska webbapplikationer. Man kan även använda det för att skapa dynamiska hemsidor eller XML-webbtjänster.
2.2.5 Windows CE
Operativsystemet som vår handterminal från Gotive använder sig av är Windows CE.NET 5.0.Det är utvecklat av Microsoft för att kunna köras på enheter med väldigt lite primärminne. Windows CE används till inbyggda system, såsom handdatorer och mobiltelefoner.
Teoretisk bakgrund
16
2.2.6 XML
XML (eXtensible Markup Language) är en standard för strukturering av data. Standarden är utvecklad av W3C (World Wide Web Consortium) som handhar det mesta inom webben. XML har stöd från samtliga viktiga aktörer på
marknaden vilket gör att man kan satsa på XML utan risk för att standarden ska dö ut inom den närmsta tiden.
XML härstammar från SGML (Standard Generalised Markup Language), som är en ISO-standard. SGML används främst för dokumenthantering och de flesta användarna finns inom militärindustrin. Standarden tillhandahåller en syntax för att representera innehållet i ett dokument. SGML är mycket komplext och kräver således hög kompetens, vilket i sin tur gör att kostnaden för att använda det blir väldigt hög. HTML är till viss del framtaget med SGML som grund. Man tog delar från SGML och kallade det nya språket HTML. Den stora skillnaden mellan språken är att HTML blandar innehåll och presentation medan SGML skiljer strikt mellan dessa delar.
När XML skapades gjorde man i princip samma sak. De delar av SGML som användes mest togs och resterande kasserades. En del förändringar gjordes också för att XML skulle anpassas för webben.
2.2.6.1 Struktur
Ett XML-dokument är uppbyggt av ett eller flera element. Varje element kan innehålla ytterligare element eller text. Elementen formar en hierarkisk
uppbyggnad. Dokumentet börjar alltid med ett element, kallat rotelement, som talar om dokumentets typ. Resterande element ligger under rotelementet. Varje element består av en starttagg och en sluttagg. En tagg kan liknas vid en etikett. En starttagg har symbolen ”<” och en sluttagg ”>”. Mellan start- och sluttaggen ligger elementnamnet. Nedan visas ett exempel på hur ett XML-dokument kan vara strukturerat.
<adressbok> <namn>
<fornamn>Kalle</fornamn>
<efternamn>Svensson</efternamn> </namn>
<adress>
<gatuadress>Svenssongatan 12</gatuadress> <postnr>12345</postnr>
<ort>Hedemora</ort> </adress> <telefon> <hemtfn>0122345566</hemtfn> <mobiltfn>07012345678</mobiltfn> </telefon> <emailadress>
<email>kalle@svensson.com</email> </emailadress>
Teoretisk bakgrund
17
2.2.6.2 Användningsområde
XML utvecklades inte för att användas inom ett speciellt problem- eller applikationsområde. Detta gör att XML har ett väldigt brett
användningsområde. Man kan, i princip, använda XML på två olika sätt. Antingen använder man det strikt för att strukturera data som ska läsas av datorer eller för sådant som ska läsas av både datorer och människor. När XML används för att läsas av datorer brukar det fungera som ett ”middleware”. Ett middleware, eller ett mellanprogram på svenska, är ett program vars uppgift är att underlätta kommunikationen mellan användarens program och dess resurser, t.ex. en databas.[4] Här används alltså XML-dokument för att skicka meddelanden mellan olika applikationer. Dessa dokument är ofta väldigt enkelt uppbyggda.
Använder man istället XML-dokument för att strukturera data som ska läsas av både människor och datorer krävs ofta någon form av stilmall för att presentera data. Dessa dokument brukar vara komplexa. [5]
Teoretisk bakgrund
18
2.2.7 Pervasive PSQL
Pervasive PSQL är en relationsdatabas utvecklad av Pervasive Software. Databasen är designad för att enkelt kunna distribueras ihop med en applikation. De plattformar som stöds är Linux, Novell Netware samt
Microsoft Windows. Pervasive PSQL finns i två olika versioner, workgroup och server. Workgroup har stöd för upp till fem användare medan
serverversionen stöder sex eller flera användare.
Pervasive tillhandahåller en ”dataprovider” för användning i .NET-miljö. En dataprovider är ett lager mellan en applikation och en databas som underlättar kommunikationen mellan dessa. En typisk funktion som skapar en anslutning till databasen, hämtar data och stänger anslutningen kan se ut som följer. [6] [WebMethod]
public DataSet GetEmployees() {
//Skapar ett objekt av typen PsqlConnection
//med anslutningsdata
PsqlConnection myConnection = new
PsqlConnection("server=localhost; serverDSN=winmps; encoding=437");
//Skapar en anslutning till databasen.
myConnection.Open();
//Skapar ett objekt av typen PsqlDataAdapter
//med en SQL-fråga.
PsqlDataAdapter pDataAdPerson = new PsqlDataAdapter(" SELECT NickName FROM Sasreg03 WHERE Terminal10 = 1 ", myConnection);
//Skapar ett objekt av typen DataSet
DataSet dsPerson = new DataSet();
//Fyller upp dsPerson med den data som SQL-frågan ovan returnerar
//Det är också här själva exekveringen av SQL-frågan sker.
pDataAdPerson.Fill(dsPerson);
//Stänger anslutningen till databasen
myConnection.Close(); //Returnerar ett dsPerson
return dsPerson; }
Teoretisk bakgrund
19
2.3 Handterminal
2.3.1 Gotive H42
Handterminalen som används inom detta projekt är framtagen av företaget Gotive och har beteckningen H42. H42 är en robust och slagtålig konstruktion som är utvecklad för att klara hårda industri- och verkstadsmiljöer.
Figur 2 Gotive H42
H42 är utrustad med en förhållandevis stor skärm (6,2”, 640x240 pixels) i jämförelse med andra handterminaler. Den är även utrustad med tre
programmeringsbara snabbknappar. Hårdvarumässigt kan H42 utrustas med olika funktioner beroende på kundens behov. Den kan utrustas med följande funktioner: • Bluetooth • GPS • GSM/GPRS • WLAN • BCR – streckkodsläsare • SIM/SD • CF Card, type 2 • SCR – smartcard läsare • Fingeravtrycksläsare [7]
Teoretisk bakgrund
20
2.3.2 Gotive SDK
För att kunna utnyttja handterminalens alla inbyggda funktioner så finns det en så kallad SDK (Software Development Kit) som man kan ladda ner från
företagets hemsida (http://www.gotive.com). En SDK är i grund och botten ett utvecklingsverktyg, som gör det möjligt för programmerare att utnyttja alla funktioner som finns i ett visst programpaket.
Gotives SDK består av 6st huvudklasser. Dessa klasser är: • LCD class • SysInfo class • ActionKey class • BCR class • GO class • DS class
Nedan kommer en förklaring av de olika klasserna.
2.3.2.1 LCD class
LCD klassen innehåller metoder för att styra pekskärmen. Ett exempel på de olika funktioner man kan styra med denna klass är: ljusstyrka och kontrast. 2.3.2.2 SysInfo class
Innehåller metoder för att få information om statusen på handterminalen. Ett exempel på en metod är GetDeviceID som returnerar information om
handeterminalen.
2.3.2.3 ActionKey class
Handterminalen från Gotive är utrustad med tre snabbknappar som kan konfigureras. Det finns två metoder inom denna klass:
• GetData • SetData
Med GetData så läser man av vilken knapp som tryckts ner, hurdant klick det var (snabbt klick eller ihållande tryckning) och vad som ska hända när knappen trycks ner (exempelvis en tangentbordstryckning). [8]
Teoretisk bakgrund
21
2.3.2.4 BCR class
För att kunna använda streckkodsläsaren måste man först öppna
kommunikationen med att kalla på metoden ”BCR.open”, därefter kan övriga metodanrop göras. Nedan följer en lista över klassens alla metoder:
• Open
Öppnar BCR-porten • Close
Stänger BCR-porten • GetData
Metoden som läser av streckkoderna • GetRevision
Returnerar mjuk- och hårdvarans versionsnummer • GetParameters
Läser av satta parametrar • SetParameters
Sätter parametrar • ResetParameters
Återställer parametrarna till default
• SetAim
Kontrollerar funktionen för sikte 2.3.2.5 GO class
Denna klass används för att implementera specifika H42 funktioner. Exempel på en sådan här är funktionen ”GO.WakeOn Power” som innebär att
handterminalen endast går ur viloläge om den känner att den har strömförsörjning.
2.3.2.6 DS class
Dockningstationens API (Application Programming Interface) erbjuder programmeraren att utnyttja alla fördelar och funktioner som finns för dockningsstationen (nedan kallad DS). Även i denna klass måste var je
funktion man implementerar börja med att man öppnar kommunikationen med att kalla på metoden ”DS.open”.
DS API:t kapslar också in några publika klasser och i denna text tas ett exempel upp.
PS2 Tangentbord
Detta innebär att ett PS2 tangentbord kan kopplas in till DS och underlätta inmatning när handterminalen sitter i DS. Koderna från
tangentbordstryckningarna översätts och simulerar en vanlig tangenttryckning i Windows.
Teoretisk bakgrund
22
2.4 Streckkoder
Streckkoder uppfanns år 1934 av en man vid namn John T Kermode som satt och funderade på om det inte fanns något sätt att automatisera sorteringen av utgående fakturor. Det han kom på var att sätta olika breda och olika många svarta streck bredvid varandra. Som läsanordning använde han en magnetisk spole som kunde avläsa strecken. Streckkoder förknippas kanske mest med dagligvaruhandel, men finns i princip inom alla olika branscher. Det finns många olika standarder framtagna, var och en specialiserade efter det område där det ska användas. Streckkoder fungerar så att man placerar olika tjocka svarta streck intill olika tjocka ljusa mellanrum. När man låter en ljusstråle belysa strecken omvandlas ljuset till elektriska signaler varpå en kod kan utläsas. Vissa standarder kan bara läsa de svarta strecken, medans vissa standarder även läser de ljusa mellanrum som finns. [9]
2.4.1 Interleaved 2 of 5
Interleaved 2 of 5 är en är en kontinuerlig kod, som betyder att även ljusa streck används för att lagra information. Koden är strikt numerisk och måste bestå av ett jämnt antal siffror eftersom varje sifferpar ses som ett element. Då kodens start- och stopptecken är kortare än elementen förordas att man lägger en någon form av checksiffra i koden för att öka säkerheten. [9]
Exempel på Interleaved 2 of 5:
Teoretisk bakgrund
23
2.4.2 Code 39
En kod som är väldigt vanlig inom kommersiellt och industriellt bruk. Det är en alfanumerisk kod av variabel längd. Kan innehålla versala bokstäver A-Z, tecken 0-9 samt följande specialsymboler: - . $ / + %. Code 39 lämpar sig inte väl vid långa teckenserier då koden blir väldigt lång. [9]
Exempel på Code 39:
Genomförande
24
3 Genomförande
3.1 Inledningsfas
3.1.1 Utvecklingsmiljö
Innan själva applikationsprogrammeringen kunde komma igång var man tvungen att reda ut vilken utvecklingsmiljö som skulle användas. Nedan kommer de avsnitt som förklarar vilken miljö som valts och varför det just är denna miljö som valts.
3.1.1.1 Val av programmeringsspråk
Som programmeringsspråk fanns några alternativ att välja mellan. Bland de som låg närmast till hands fanns C++, C# och Java. Eftersom vår utbildning innehållit programmeringskurser med nästan uteslutande C++ som språk, bestämdes ganska snart att Java inte skulle användas, då detta var ett helt nytt språk att sätta sig in i. Om Java skulle valts så skulle man dessutom behöva tänka på att man måste installera en ”Java Virtual Machine” (JVM) på handterminalen. Då det inte finns någon JVM optimerad för handterminalen från Gotive skulle man då behöva gå in och konfigurera om i en befintlig för att den skulle fungera optimalt efter de önskemål som fanns. Efter att Java tagits bort bland programmeringsspråksvalen så fördes diskussioner med företaget om vilket språk de rekommenderade oss att använda. I dessa beslutades det att C# skulle användas på klientsidan. Eftersom klientapplikationen består av ett grafiskt gränssnitt är C# ett bra val, då detta språk lämpar sig mycket väl för grafisk programmering. Även om det knappt lästs någon C# under utbildningen sågs inte detta som något stort problem. Då C# bygger på C++ är det relativt lätt att lära sig det ena om man kan det andra. Detta sågs istället som ett
ypperligt tillfälle att lära sig ytterligare ett programmeringsspråk som man kan komma att ha nytta av i arbetslivet.
När det kom till webbtjänsten som är byggd på ASP.NET teknik, fanns också ett par alternativ att välja mellan bl.a. C#.NET eller VB.NET. Även här
bestämdes det att programmeringen skulle ske i C#. Detta dels på grund av att under utbildningen inte har funnits någon undervisning i VB.NET. Dels för att en genomgående tråd genom projektet skulle finnas och då att det var enklast att hålla sig till samma programmeringsspråk.
Genomförande
25
3.1.1.2 Val av programutvecklingsmiljö
När det bestämts vilket programmeringsspråk som skulle användas var det dags att gå vidare och bestämma vilken IDE som skulle användas. Här var det inte lika svårt att komma fram till ett beslut. Under vår utbildning har det
uteslutande jobbats i Microsoft Visual Studio. Även på företaget används detta program inom programutveckling så då var det naturligt att detta verktyg skulle användas. Den version av programmet som använts för att utveckla
applikationen är ”Visual Studio 2005”. 3.1.1.3 Val av databas
System Andersson har länge använt sig av Pervasive PSQL. Eftersom vår handterminal ska vara en del av deras befintliga verkstadssystem var det klart från början att denna databas också kom att användas vid framtagningen av denna applikation.
3.1.2 Testmiljö
För att kunna arbeta med detta projekt krävdes en fungerande testmiljö. Under projektets framtagning förfogades det över två datorer och det bestämdes tidigt att sätta upp en miljö som skulle likna den miljö som applikationen skulle komma att fungera i.
En av datorerna sattes upp som en central server. På servern installerades databasservern Pervasive PSQL v8 och en webbserver. Webbservern behövdes för att köra serverdelen av applikationen som en webbtjänst. En enkel
konfiguration gjordes på webbservern för att kunna köra ASP.NET. Efter kontakt med företaget erhölls en exempeldatabas av deras existerande system. Därefter installerades Visual Studio.NET och det sågs till att det fanns en fungerande koppling mellan webbtjänsten och databasen. Från denna dator sköttes all programmering av serverdelen av applikationen.
Handterminalen kopplades via USB till den andra datorn. För kontakt mellan handterminalen och datorn användes synkroniseringsprogrammet ActiveSync, utvecklat av Microsoft. Sedan installerades Visual Studio.NET och det sågs till att programmet fick kontakt med handterminalen. Därefter gjordes ett enkelt program där det kontrollerades att man kunde ansluta till vår webbtjänst på servern. På denna dator sköttes all programmering av klienten.
Både handterminalen och servern kopplades till ett trådlöst nät. Här stöttes det på en del problem. Det användes en router som ofta kopplade ner de anslutna enheterna men efter en del konfigurering erhöll vi en acceptabel situation utan alltför mycket krångel.
Genomförande
26
3.2 Prestanda
En viktig punkt från företaget och således för oss, var prestanda. Därför valdes det att tidigt i programmeringsfasen reda ut vilka faktorer som kom att påverka prestandan till störst grad. Efter en del undersökande insågs det att den största flaskhalsen skulle vara dataöverföring från webbtjänsten.
För att testa kapaciteten av dataöverföringen lånades en större testdatabas från företaget och frågor skapades som hämtade så stor datamängd som möjligt. Därefter gjordes en funktion i klienten som körde dessa frågor. Vid
extremfallet tog det 25 sekunder att hämta all data men den datamängd som då hämtades är inte rimlig i praktiken. Efter lite diskussion med företaget kom man överens om att den maximala överföringstiden fick vara 15 sekunder. För att hålla nere svarstiderna görs de flesta större beräkningar i
serverapplikationen. Detta avlastar handterminalen vars beräkningskapacitet är mindre än serverns.
Genomförande
27
3.3 Driftsäkerhet
Denna punkt är förmodligen den viktigaste. Fungerar inte handterminalen spelar det ingen roll om man har topprestanda eller hög användarvänlighet. Varken kund eller slutanvändar kommer att kunna acceptera en sådan produkt. Enda gången det kan vara godtagbart att handterminalen försätts ur funktion är när hela det trådlösa nätverket slutar att fungera, av en eller annan orsak. När man jobbar med trådlösa nätverk måste man dock vara beredd på det kan uppstå kommunikationsproblem. Om man t.ex. jobbar i ett stort lager med bristfällig täckning är det svårt att undvika att handterminalen tappar signalen. Rent programmeringsmässigt löstes detta med att fånga upp så kallade
”Exceptions” eller undantag. När ett fel uppstår under programkörning ”kastas” ett Exception, i C# sker detta per automatik. Om man fångar upp ett sådant kan man få programmet att ”krascha kontrollerat”. I kodexemplet nedan visas ett exempel på hur man kan lösa det.
int tal = 100; try
{
//Inom try-blocket läggs all kod som kan krascha vid
programkörning
int kvot = tal / 0; }
catch (Exception excep) {
//Inom catch-blocket läggs all kod som ska hantera undantaget
MessageBox.Show(excep.ToString()); }
I exemplet försöker man dividera ett tal med noll varpå programmet kommer att kasta ett undantag. Här behandlas inte undantaget utan det skrivs bara ut i en textruta. När dessa undantag kastas i vårt program ser vi till att behandla dessa för att undvika att programmet låser sig. Vid t.ex. en kommunikationsstörning löste vi det genom att visa en ruta med texten ”försök igen”.
Med driftsäkerhet menas också kontroll av inmatade värden. Då
handterminalen ska agera ihop med det befintliga systemet och således dess databas krävs stor noggrannhet vid inmatning av värden för att förhindra en korrupt databas. Detta har vi, på de flesta ställen, löst med if-satser. Större delen av den data, inmatad av användaren, som ska modifiera databasen består av siffror vilket gör att inmatningskontrollen kan göras på ett enklare sätt i jämförelse med kontroll av text.
Genomförande
28
3.4 Användarvänlighet
Användarvänlighet är den av företagets viktiga punkter som det lagts ner mest tid på. Anledningen till att det lagts ner så mycket tid på denna del av projektet är att det inte ställs krav på datorvana hos den personal som skall arbeta med handterminalen. För att möta det ökade kravet på designen som detta ger har vi som programmerare försökt tänka igenom allt väldigt noga. Struktureringen av applikationen är gjord så att det skall finnas en genomgående tråd genom alla funktioner i hela projektet. Ett exempel på röd tråd är att oavsett vilken funktion man är inne på, så ska t.ex. knappen för sifferinmatning sitta på samma ställe och se likadan ut. Följande grupperingar av knapparna har gjorts:
• Inmatningsknappar • Datagridknappar • Listningsknapparna • Ok-/Exit- knapp
Inmatningsknapparna är de knappar där man vid knapptryckning kommer till siffertangentbordet eller till det alfanumeriska tangentbordet. Exempel på när det numeriska tangentbordet kommer att användas är om man vill ändra antal i ett lageruttag. Det alfanumeriska tangentbordet kommer bland annat att
användas till sökningar vid materiallistningar. Vi kommer längre ner i detta kapitel att ta upp mer om dessa två tangentbord.
Datagridknapparna sitter i direkt anslutning till datagriden och används när man vill bläddra upp och ner genom datagriden. Vid en tryckning på nedåtpil markeras helt enkelt raden under den aktuella. På samma sätt funkar
uppåtpilen, fast den markerar raden ovanför den aktuella.
Listningsknapparna används för att komma till vyer med olika register. Beroende på inom vilken funktion i applikationen knappen trycks, listas rätt register.
Exit-knappen används för att backa ett steg bakåt i programmet. Ok knappen bekräftar de val man gör i de olika vyerna. Ett exempel på detta är att vid ett lageruttag trycker man OK när man valt rätt antal att plocka ut. Det är vid tryckning på OK-knappen som uttaget registreras i databasen.
Något som är lika viktigt som att knapparna är konsekventa i sin funktion är även dennes placering i displayfönstret. Här har det förts diskussioner med företaget om vart olika knappar ska placeras så att programmet blir så lättförståeligt som möjligt.
Genomförande
29
3.5 Design och Funktion
Nedan följer en redogörelse för hur klient- och serverapplikationerna är uppbyggda.
3.5.1 Uppbyggnad
Klientapplikationen är uppbyggt av ett antal windows forms. Uppbyggnaden är av hierarkisk struktur.
Programmet är tänkt att köras i helskärmsläge och därför skapades alla forms med en storlek av 640x240 pixlar.
Serverdelen tas upp väldigt grundläggande då denna inkluderas i företagets sekretess.
Serverdelen består av en klass som heter DataExchange. Dess främsta funktion är att tillhandahålla en tjänst för kommunikation med databas. De flesta stora beräkningar görs också på serverdelen.
3.5.2 Knappklass
Som del av vårt jobb mot en hög användarvänlighet var ett krav att kunna designa egna knappar och därför köptes en ny knappklass in från
www.pocketpccontrols.com. Denna klass möjliggjorde att man kan lägga in egna bilder på knapparna och på så sätt skapa den design som önskas. Denna klass används för samtliga knappar i klientapplikationen. Till många av knapparna används två bilder, en för ej intryckt knapp och en för när knappen är intryckt. Nedan visas typisk knappdesign:
Figur 5 Upp- och nerpil
Figur 6 Backspace
Genomförande
30
3.5.3 Streckkodsläsare
Företaget har idag ett system för märkning av både material, operationer och tillverkningsorders. Operationer och tillverkningsordernummer har streckkoder av typen Interleaved 2 of 5 och materialet har streckkoder av typen Code 39. Dessa båda typer stöds av handterminalen från Gotive. För att underlätta arbetet för personalen som arbetar med terminalen har det implementerats en global funktion i klientapplikationen för läsning av streckkoder.
Streckkodsläsning kan användas inom både uttag och inköp. Exempel på en funktion är att när man listar alla tillverkningsorders och vill hitta en specifik order som man har en streckkod på, ska man kunna scanna av streckkoden och programmet letar automatiskt upp rätt arbetsorder och markerar den aktuella raden i listan. Ett ytterligare exempel är att om man vill göra ett fritt inköp och har hela artikelregistret listat i rutan är det lättare att man läser in streckkoden som det specifika materialet har än att stega neråt i listan.
För att aktivera streckkodsläsaren trycker man på en av de tre snabbknappar som finns på handterminalen. Här dök det första problemet upp. Till en början fick vi inte programmet att reagera på en knapptryckning. Men efter en del efterforskande så lyckades en lösning hittas. Problemet löstes genom att konfigurera handterminalen så att den simulerade en viss knapptryckning vid en tryckning på en av snabbknapparna. När detta var löst skulle en funktionen för själva streckkodsläsningen implementeras. Denna del krävde också noga studerande av dokumentationen. Det som var svårt var att lista ut vilka parametrar man var tvungen att sätta för att det skulle rama in alla tänkbara streckkodslängder som kan förekomma i systemet. Nedan följer koden till funktionen vi implementerade:
Genomförande
31 public string readBCR()
{
//Öppnar porten för streckkodsläsaren (BCR)
BCR.Open();
//Skapar ett objekt av typen BCR.DATA, kommer innehålla det inscannade värdet
BCR._BCRDATA d = new BCR._BCRDATA();
//Skapar ett parameterobjekt innehållande de parametrar man väljer att sätta
BCR._BCRPARAMETERS par = new BCR._BCRPARAMETERS(); //Möjliggör streckkodsläsning
par.beep_code = 1;
//Denna parameter möjliggör läsning av Interleaved 2 of 5
par.i2of5 = 1;
//Dessa 2 parametrar bestämmer streckkodens tillåtna längder
par.len_i2of5_l1 = 0; par.len_i2of5_l2 = 0;
//Denna parameter möjliggör läsning av Code 39
par.code39 = 1;
//Dessa 2 parametrar bestämmer streckkodens tillåtna längder
par.len_code39_l1 = 2; par.len_code39_l2 = 55;
//Sätter de paramterar man bestämt
BCR.SetParameters(par);
//Om scanning lyckas, skickas resultatet tillbaka. I annat fall returneras -1
if (BCR.GetData(ref d, 5000)) { BCR.Close(); return d.code; } else { BCR.Close(); string n = "-1"; return n; } }
Genomförande
32
3.5.4 Alfanumeriskt tangentbord
Figur 8 Alfanumeriskt tangentbord
För att underlätta att hitta rätt produkt vid olika materiallistningar och dylikt lade vi in en sökfunktion där man både kan söka på artikelnummer och
benämning. Då det inbyggda tangentbordet i Windows CE ansågs vara alldeles för litet för att användas med fingertryckning såg vi oss tvungna att skapa ett eget. Det byggdes upp som en form med knappar som motsvarar varje tangent. En inmatningsruta lades längst upp i bild där man ser det man matat in. När man trycker på OK-knappen returneras en sträng med det man matat in. Kodexempel för att visa hur A-tangenten är programmerad:
private void btnA_Click(object sender, EventArgs e) { if (txtInput.Text.Length <= 20) { txtInput.Text += "A"; } }
Benämningsfältet visar inte fler än 20 tecken, därför lades en if-sats in som kollar att man inte matat in längre än 20 tecken i strängen.
Genomförande
33
3.5.5 Numeriskt tangentbord
Figur 9 Numeriskt tangentbord
För att underlätta inmatning av siffror valde vi att skapa en ny form med detta som syfte då det alfanumeriska tangentbordet kändes överflödigt. I denna form gjordes knapparna större för att vara lättare att trycka på med fingrarna.
Detta tangentbord används när endast siffror ska matas in, t.ex. vid sökning av ordernummer eller när ett antal ska matas in vid uttag. Vid tryck på OK returneras ett heltal med det värde som står i textrutan.
Resultat
34
4 Resultat
Resultatet av detta examensarbete är en väl fungerande applikation.
Applikationen innehåller fungerande funktioner för såväl uttag som inköp. Nedan finns en detaljbeskrivning av uttagsdelen samt en grundläggande förklaring av inköpsdelen.
4.1 Design och layout
4.1.1 Anställningsvy
Figur 10 Anställningsvy
När man startar applikationen visas anställningsvyn. Här listas de användare som har behörighet till handterminalen. De användare som ska ha tillgång till handterminalen har en speciell flagga satt i databasen som talar om att de ska listas. Vid listningen loopar vi igenom dessa användare och skapar dynamiskt nya knappar med deras namn. Här skapas också en händelse för vad som ska hända när man klickar på en knapp. Nedan följer ett kodexempel som visar hur det ser ut i praktiken.
//Hämta behöriga användare från webbtjänsten
DataSet dsPerson = de.GetEmployees();
int count = 0;
//Sätter startpositionen.
int yloc = 61; int xloc = 26;
string[] nicks = new string[50];
//För varje användare som hämtats körs koden nedan.
foreach (DataRow pRow in dsPerson.Tables[0].Rows) {
ColorButton btnanst = new ColorButton(); btnanst.Text = pRow["NickName"].ToString(); btnanst.Location = new Point(xloc, yloc); btnanst.Height = 60;
btnanst.Width = 160;
btnanst.Click += new System.EventHandler(this.btn_Click); this.Controls.Add(btnanst);
Resultat
35 xloc += 185;
count++;
//När 3 nya knappar skapats byter man rad
if (count % 3 == 0) { count = 0; yloc += 86; xloc = 26; } }
private void btn_Click(object sender, EventArgs e) {
ChooseFunc cf = new ChooseFunc(); //Visar funktionsvy
cf.Show(); }
När användaren sedan klickar på knappen med sitt namn visas funktionsmenyn.
4.1.2 Funktionsmeny
Figur 11 Funktionsmeny
I funktionsmenyn listas de funktioner som ska ingå i handterminalen: uttag, inköp, inleverans samt inventering. Dessa funktionsval visas i form av knappar med olika färger. Färgerna motsvarar en viss funktion, knappen för uttag är t.ex. röd. Trycker man på det vita krysset kommer man tillbaks till
anställningsvyn. Alla funktioner listas även om detta examensarbete endast omfattar design och implementering av uttag och inköp.
Resultat
36
4.1.3 Uttagsmeny
Figur 12 Uttagsmeny
I denna meny listas de olika alternativ av uttag som användaren kan göra. Med tanke på företagets sekretess kommer vi inte gå in på databasens uppbyggnad utan förklarar bara applikationens funktion.
4.1.3.1 Uttag TO
Figur 13 Uttag TO
I denna vy listas alla aktiva tillverkningsorders (TO). Här skapades en knapp (T) för sökning av TO som visade det numeriska tangentbordet. Dessutom kan man genom att använda streckkodsläsaren hitta rätt TO direkt. Övriga knappar är upp- och nerpil för att underlätta bläddrande när man använder fingrarna för att navigera. När man valt sin TO trycker man OK för att gå vidare till vyn för planerade artiklar på aktuell tillverkningsorder.
Resultat
37
4.1.3.2 UtgPlanTO
Figur 14 UtgPlanTO
Här listas planerade artiklar på aktuell TO. Artikelnummerfältet skall här kunna växla mellan nummer och benämning och sorteras i nummerordning respektive bokstavsordning. Vill man ändra antal markerar man önskad artikel, sedan trycker man på ändra antal och kommer då till den numeriska knappsatsen. Vill man lägga till en ej planerad artikel trycker man på ”Art” för att komma till artikelregistret. Vid tryck på OK registreras ett uttag på den artikel man markerat. De artiklar som redan är uttagna kan nås genom att trycka på ”Uttaget” .
4.1.3.3 UtgEjPlanTO
Figur 15 UtgEjPlanTO
I denna vy listas samtliga artiklar som finns i artikelregistret. Här väljer man önskad artikel och trycker ”OK”, då läggs markerad artikel till i föregående form, UtgPlanTO. När man sedan är klar trycker man på ”krysset” för att återgå till UtgPlanTO.
Resultat
38
4.1.3.4 UtgTOUttaget
Figur 16 UtgTOUttaget
När man i UtgPlanTO trycker på ”uttaget” visas denna vy. Här visas de artiklar som redan är uttagna på aktuell TO. Om man av någon anledning vill hämta ut några fler av en speciell artikel använder man denna vy. Markera önskad artikel, tryck ”Antal” för att ändra antal och tryck slutligen på ”OK” för att genomföra uttaget.
4.1.3.5 Fritt Uttag
Figur 17 Fritt Uttag
Denna vy används för att hämta ut artiklar utan koppling till någon
tillverkningsorder. Om man t.ex. saknar en skiftnyckel kan denna hämtas ut via ”Fritt Uttag”. Från början är artikellistan helt tom. För att lägga till artiklar trycker man på ”A” för att nå artikelregistret och kan där välja de artiklar man önskar. När man valt sina artiklar och tryckt OK i artikelregistret listas de sedan i Fritt Uttag. För att bekräfta ett uttag väljer man ett antal och trycker på ”OK” varpå artikeln försvinner.
Resultat
39
4.1.4 Inköpsmeny
Figur 18 Inköpsmeny
I projektet ingår även att implementera funktionen för inköp. Men på grund av företagets sekretess väljer vi att inte gå in på lika djup nivå i inköp som vi gör i uttag. Utan vi väljer att här bara ta upp de generella funktioner som finns inom inköpsfunktionen.
Generellt kan man säga att huvudfunktionen för inköp är att boka olika material och verktyg för inköp. När man från funktionsmenyn valt inköp får man två alternativ att välja på. Om man vill göra inköp beroende på tillverkningsorder eller om man vill göra ett inköp som inte beror på en tillverkningsorder. Väljer man att göra ett inköp beroende på tillverkningsorder kommer man till en ny vy som i stort liknar funktionen för tillverkningsorderbundet uttag (utgTO). Väljer man att göra ett oberoende inköp så kommer man till en vy med liknande funktioner som finns i Fritt uttag.
Resultat
40
4.2 Frågeställningar och mål
Vår första frågeställning handlade om prestanda och hur låga svarstider skulle kunna uppnås. Till stor del löstes detta genom att utföra stora beräkningar på serverdelen. En annan del av lösningen ligger i att man vid överföring av stora datamängder hämtar data i flera omgångar.
Vår andra frågeställning berörde hur man behandlar kommunikationsproblem mellan server och klient. Detta löstes genom att fånga upp ett så kallat
undantag när klienten tappar kontakten med servern. Om klienten vid till exempel hämtning av data till en tabell tappar kontakten med servern visas en knapp med texten ”Försök igen”. Vid tryckning på denna knapp försöker kontakt återetableras och frågan skickas om. Om kontakt återfås döljs knappen och hämtad data visas.
Den sista frågeställningen handlade om användarvänlighet. För att åstadkomma en god användarvänlighet har vi försökt hålla en röd tråd genom hela projektet. Den röda tråden fås genom att vi har varit konsekventa med att ha samma design och placering på knapparna projektet igenom.
Slutsats och diskussion
41
5 Slutsats och diskussion
I avseende på de mål som sattes upp i början av projektet anser vi att vår applikation svarar upp väldigt bra gentemot dessa. Vi har implementerat de funktioner som vi avgränsade oss till. Vi är glada för att vi avgränsade oss till att inte implementera funktionerna för inleverans och inventering. Till en början verkade inte projektet bli så stort men vi insåg snart att de delar vi valt tog längre tid än vi först trott.
Anledningen till att det tog så lång tid berodde främst på den tid det tog för oss att sätta oss in i företagets befintliga databasstruktur. För att lösa detta hölls med jämna mellanrum möten med företaget där vi fick genomgångar av delar i systemet. En annan sak till tidsåtgången var att vi programmerade i ett, för oss, relativt nytt programmeringsspråk. Efter hand försvann detta problem. Ju mer vi programmerade desto mer lärde vi oss att lösa problemen på ett smidigt och strukturerat sätt.
Då vi hade att göra med handterminaler som har en begränsad skärmyta låg mycket av utmaningen i att skapa lättförståeliga program som ska innehålla mycket information men som samtidigt inte får vara röriga. Med hjälp av företaget tycker vi att vi kommit fram till ett bra användargränssnitt.
Angående fortsatt utveckling för den här produkten ser vi stor potential för att den ska bli framgångsrik på marknaden. Produkten är i det här läget en början till en konkurrenskraftig produkt inom verkstadsindustrin. Vi hoppas att företaget kommer att ha nytta av den grund som vi har lagt.
Vi tycker att det har varit ett jätteintressant och spännande projekt att jobba med. Vi har fått en bra inblick i hur ett systemutvecklingsprojekt sköts utanför skolans väggar. Det har varit intressant att se hur den teori vi läst i skolan, om ingenjörsmässigt arbete fungerar i praktiken. Vi kommer att ha stor nytta av de erfarenheter vi lärt oss under projektet.
Referenser
42
6 Referenser
[1] Formation of the secret Green Team
http://webcast-east.sun.com/ramgen/archives/GSN-2100/GSN-2100_01_225.rm (acc. 2007-04-17)
[2] Life and Times of Anders Hejlsberg
http://download.microsoft.com/download/7/d/3/7d3de91e-0a61-4c31-bcc4-628bc81c635a/Behind_The_Code_2_512k.wmv (acc. 2007-04-17) [3] C# Language Specifikation http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf (acc 2007-04-18)
[4] Free On-Line Dictionary of Computing ,
http://foldoc.org/index.cgi?query=middleware (acc. 2007-05-17) [5] En skonsam introduktion – XML , Lars Celander
http://www.azelia.se/xml.pdf (acc. 2007-05-17) [6] Data Provider for .NET Guide
http://www.pervasive.com/library/docs/psql/950/adonet/index.html
(acc. 2007-05-17) [7] Gotive H42 – Datasheet
http://www.gotive.com/products/H42-datasheet-large.htm (acc. 2007-05-16)
[8] H41/H42 Software Development Kit for .NET
http://www.gotive.com/support/Software/3_Sdk/h4x_sdk_dotnet_2 _0_8.zip (acc. 2007-03-28)
[9] Streckkod System AB
Sökord 43