M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Mobiln´ı aplikace pro inventarizaci majetku ´ D IPLOMOV A´ PR ACE
Bc. Josef Zapletal
Brno, Podzim 2014
Prohl´asˇ en´ı ˚ Prohlaˇsuji, zˇ e tato diplomov´a pr´ace je mym ım autorskym ´ puvodn´ ´ d´ılem, kter´e jsem vypracoval samostatnˇe. Vˇsechny zdroje, prameny a literaturu, kter´e jsem pˇri vypracov´an´ı pouˇz´ıval nebo z nich cˇ erpal, v pr´aci rˇ a´ dnˇe cituji ´ s uveden´ım upln´ eho odkazu na pˇr´ısluˇsny´ zdroj.
Vedouc´ı pr´ace: RNDr. Jaroslav Pelik´an, Ph.D. ii
Podˇekov´an´ı Dˇekuji RNDr. Jaroslavu Pelik´anovi za odborn´e veden´ı diplomov´e pr´ace a poskytov´an´ı cennych ´ rad pˇri jej´ım zpracov´an´ı. D´ale chci podˇekovat Kateˇrinˇe ˚ cen´ı zaˇr´ızen´ı. Klosov´e ze spoleˇcnosti Motorola za zapujˇ
iii
Shrnut´ı T´ematem pr´ace je navrˇzen´ı a implementace syst´emu pro zpracov´an´ı inventury. Syst´em se skl´ad´a z aplikace pro operaˇcn´ı syst´em Android, kter´a ´ u˚ a doplnˇen´ı bude slouˇzit pro sn´ım´an´ı zboˇz´ı pomoc´ı cˇ teˇcky cˇ a´ rovych ´ kod dalˇs´ıch informac´ı k dan´emu zboˇz´ı. D´ale se zde nach´az´ı server, ktery´ poskytuje data mobiln´ı aplikaci (data poch´az´ı z extern´ıho informaˇcn´ıho syst´emu) a nasn´ıman´a data z mobiln´ı aplikace d´ale zpracov´av´a. Pˇres webov´e roz˚ eh hran´ı serveru je moˇzn´e prov´est pˇr´ıpadnou korekturu dat a sledovat prubˇ inventury. Data jsou ukl´ad´ana v SQL datab´azi. Jakmile jsou vˇsechna inventurn´ı data naˇctena, tak je proveden zpˇetny´ z´apis inventury do informaˇcn´ıho syst´emu.
iv
Kl´ıcˇ ov´a slova Android, operaˇcn´ı syst´em, server, aplikace, WCF, ASP, ASP.NET, SQL, datab´aze, mobiln´ı telefon
v
Obsah 1
Platforma Android . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Obecn´e informace . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Architektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Vyvoj aplikac´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ ˇ 1.4 Zivotn´ ı cyklus aplikace . . . . . . . . . . . . . . . . . . . . . . 2 Prubˇ ˚ eh inventarizace . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Souˇcasny´ stav . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Navrhnut´e nov´e rˇ eˇsen´ı . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Novy´ postup inventury . . . . . . . . . . . . . . . . . 3 Popis a implementace aplikace . . . . . . . . . . . . . . . . . . . . 3.1 Vyuˇzit´e knihovny . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Jackson - zpracov´an´ı form´atu JSON . . . . . . . . . . ´ u˚ pomoc´ı fo3.1.2 ZXing - zpracov´an´ı 1D/2D cˇ a´ rovych ´ kod toapar´atu . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Techniky pouˇzit´e v aplikaci . . . . . . . . . . . . . . . . . . . 3.2.1 Pr´ace s datab´az´ı SQLite . . . . . . . . . . . . . . . . . 3.2.2 N´avrhovy´ vzor ViewHolder . . . . . . . . . . . . . . . 3.2.3 Vyuˇzit´ı lintu a dalˇs´ı tipy . . . . . . . . . . . . . . . . . 3.3 Srovn´an´ı s existuj´ıc´ımi rˇ eˇsen´ımi . . . . . . . . . . . . . . . . . 3.4 Motorola Extension (Mx) . . . . . . . . . . . . . . . . . . . . . 4 Popis a implementace serveru . . . . . . . . . . . . . . . . . . . . 4.1 Popis datab´aze . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Popis komunikace mezi aplikac´ı a serverem . . . . . . . . . . 4.3 Popis webov´eho rozhran´ı . . . . . . . . . . . . . . . . . . . . 4.3.1 WebForms vs. MVC . . . . . . . . . . . . . . . . . . . 4.3.2 Vyuˇzit´ı MasterPage . . . . . . . . . . . . . . . . . . . . 4.4 Popis komunikace mezi serverem a informaˇcn´ım syst´emem 5 Z´avˇer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Uk´azkov´e zdrojov´e kody ´ . . . . . . . . . . . . . . . . . . . . . . .
3 3 5 6 9 11 11 12 14 16 16 16 17 19 19 21 21 22 24 27 27 31 34 36 39 40 43 44
1
´ Uvod Zpracov´an´ı inventury je pro mnoho firem velmi n´aroˇcn´a a zdlouhav´a cˇ innost. Vˇetˇsina firem vyuˇz´ıv´a nˇejaky´ informaˇcn´ı syst´em, ale uˇz nevyuˇzij´ı ˚ ych data, kter´a maj´ı uloˇzena v tomto syst´emu pro optimalizaci ruzn ´ druhu˚ procesu˚ ve firmˇe (napˇr´ıklad pˇr´ıjem nebo vydej zboˇz´ı). ´ C´ılem t´eto diplomov´e pr´ace je vytvoˇrit aplikaci pro OS Android, kter´a bude obsahovat data z extern´ıho informaˇcn´ıho syst´emu. Obsluha bude m´ıt tedy pˇrehled o dan´e inventuˇre a poloˇzk´ach, kter´e tato inventura obsa´ ´ huje. D´ıky vyuˇz´ıt´ı cˇ teˇcky cˇ a´ rovych bude moˇzn´e sn´ımat cˇ a´ rov´e kody ´ kodu jednotlivych poloˇzek. Po naˇcten´ı vˇsech poloˇzek a doplnˇen´ı dalˇs´ıch dat ´ (napˇr´ıklad mnoˇzstv´ı), budou vˇsechny informace odesl´any na server, kde dojde k dalˇs´ımu zpracov´an´ı. Na serveru je moˇzn´e prov´est napˇr. editaci dat, ˚ eh samotn´e inventury atd. Jakmile dojde k nasn´ım´an´ı vˇsech sledovat prubˇ dat, tak obshluha provede zpˇetny´ import dat do IS a t´ımto je inventura ukonˇcena. Samotny´ text t´eto pr´ace je rozdˇelen do nˇekolika kapitol. Popis operaˇcn´ıho syst´emu Android a z´akladn´ı specifikace vyvoje aplikac´ı pro ´ tuto platformu jsou uvedeny v kapitole 1. Kapitola 2 obsahuje popis ˚ ehu inventury ve zvolen´e firmˇe a navrˇzeny´ novy, st´av´aj´ıc´ıho prubˇ ´ rychlejˇs´ı a pˇresnˇejˇs´ı postup. Kapitola 3 popisuje zaj´ımav´e implementaˇcn´ı cˇ a´ sti aplikace a analyzuje existuj´ıc´ı rˇ eˇsen´ı. V kapitole 4 je pops´ana datab´aze, kter´a slouˇz´ı pro ukl´ad´an´ı dat, d´ale je zde uveden popis serveru a webov´eho rozhran´ı a komunikace mezi serverem a aplikac´ı. Posledn´ı kapitola shrnuje cely´ vyvoj aplikace a dosaˇzen´e vysledky. ´ ´
2
Kapitola 1
Platforma Android 1.1
Obecn´e informace
Android [3] je operaˇcn´ı syst´em (OS) pro mobiln´ı zaˇr´ızen´ı, ktery´ je postaven na linuxov´em j´adˇre. Prvn´ı verze Androidu byla vyd´ana v roce 2008. ˚ ych Prim´arn´ı urˇcen´ı syst´emu je pro pouˇzit´ı na ruzn mobiln´ıch zaˇr´ızen´ıch ´ s dotykovou obrazovkou (smartphony, tablety atd.). V souˇcasn´e dobˇe se ale ˚ a prostˇred´ı a vyuˇzit´ı. st´ale cˇ astˇeji objevuj´ı upraven´e verze syst´emu pro ruzn´ Napˇr´ıklad modifikace s n´azvem Android Auto se pouˇz´ıv´a v modern´ıch au´ tomobilech, d´ale tˇreba uprava Android TV, kter´a najde uplatnˇen´ı v televizorech a nebo syst´em Android Wear, ktery´ lze naj´ıt napˇr´ıklad v chytrych ´ hodink´ach nebo fitness n´aramc´ıch (tzv. Wearables). Android je moˇzn´e modifikovat pro opravdu sˇ irok´e vyuˇzit´ı a nemus´ı j´ıt jenom o zaˇr´ızen´ı, kter´a se ovl´adaj´ı pomoc´ı dotyku˚ (lze jej naj´ıt tˇreba i v digit´aln´ıch kamer´ach). Ovl´ad´an´ı vlastn´ıho syst´emu je zaloˇzeno na vyuˇz´ıv´an´ı dotykovych ´ gest (swiping, tapping, ...), kter´e uˇzivateli pˇrijdou srozumiteln´a a intuitivn´ı. D´ale Android vyuˇz´ıv´a napˇr´ıklad virtu´aln´ı kl´avesnici nar ozd´ıl od klasick´e hardwarov´e kl´avesnice, kterou vyuˇz´ıvaj´ı jin´e OS. Dle [4] je Android v souˇcasn´e dobˇe nejrozˇs´ırˇ enˇejˇs´ım mobiln´ım operaˇcn´ım syst´emem na svˇetˇe. Do roku 2013 bylo prod´ano v´ıce zaˇr´ızen´ı s Androidem neˇz zaˇr´ızen´ı s operaˇcn´ımi syst´emy Windows Mobile, Mac a iOS dohromady. V internetov´em obchodˇe Google Play [25], pˇres ktery´ si uˇzivatel´e stahuj´ı obsah do sv´eho zaˇr´ızen´ı, je nahr´ano v´ıce neˇz 1 milion aplikac´ı a her. Celosvˇetovy´ trˇzn´ı pod´ıl t´eto platformy je kolem 80 %. Druhy´ je syst´em iOS s 12 % a tˇret´ı je Windows Phone s cca 3 % (data jsou za rok 2014, viz [20]). ´ syst´emu jsou dostupn´e pod open-source licenc´ı a vˇetˇsina Zdrojov´e kody velkych vyrobc u˚ dod´av´a vlastn´ı zaˇr´ızen´ı s lehce modifikovanym An´ ´ ´ droidem a s pˇredinstalovanym vlastn´ım propriet´arn´ım softwarem. Sa´ motny´ syst´em je tedy speci´alnˇe navrˇzen a upraven pr´avˇe pro bˇeh na mobiln´ıch zaˇr´ızen´ıch, kde je nedostatek pamˇeti, omezen´a kapacita baterie atd. Z´arovenˇ bylo j´adro implementov´ano tak, aby mohlo byt ´ spuˇstˇeno na 3
1. P LATFORMA A NDROID
Obr´azek 1.1: Graf s celkovym ´ pod´ılem jednotlivych ´ mobiln´ıch OS na trhu (data pˇrevzata z [20])
˚ ych ruzn typech hardwaru. Syst´em je tedy moˇzn´e spustit na zaˇr´ızen´ıch ´ s odliˇsnou cˇ ipovou sadou, velikost´ı displeje a podobnˇe. D´ıky svoj´ı ˚ e druhy a typy otevˇrenosti je Android snadno modifikovatelny´ pro ruzn´ zaˇr´ızen´ı. Vyhodou Androidu je existence velk´e komunity fanouˇsku˚ a ´ ˚ kteˇr´ı tento OS podporuj´ı. vyvoj´ ´ arˇ u, Spoleˇcnost Android Inc., kter´a st´ala u zrodu t´eto platformy, byla zaloˇzena v rˇ´ıjnu 2003 v Kalifornii. Google tuto spoleˇcnost odkoupil v roce 2005 a vlastn´ı ji doposud. Prvn´ım komerˇcnˇe dostupnym ´ smartphonem s Androidem byl telefon HTC Dream, ktery´ se zaˇcal v USA prod´avat v roce 2008 a souˇcasnˇe s t´ımto telefonem bylo uveˇrejnˇeno prvn´ı SDK (Software Development Kit) pro vyvoj´ ´ arˇ e aplikac´ı. Za celou dobu existence Androidu bylo vyd´ano mnoho aktualizac´ı a novych ´ verz´ı. V dobˇe psan´ı t´eto pr´ace je ´ aktu´aln´ı verze 4.4 s kodov ym ´ oznaˇcen´ım KitKat. 4
1. P LATFORMA A NDROID
Obr´azek 1.2: Uk´azka uˇzivatelsk´eho rozhran´ı Androidu 4.4
1.2
Architektura
Hlavn´ı hardwarovou platformou pro Android je 32bitov´a architektura ARMv7 (Advanced RISC Machine), kter´a pracuje s instrukˇcn´ı sadou RISC (Reduced Instruction Set Computing). Aby Android mohl bˇezˇ et i na procesorech s architekturou x86, kter´e pracuj´ı s instrukˇcn´ı sadou CISC (Complex Instruction Set Computing), tak existuje projekt Android-x86 [5], ktery´ por˚ tuje tento OS i pro x68 procesory. V souˇcasn´e dobˇe Android tak´e pro svuj bˇeh vyˇzaduje GPU podporuj´ıc´ı OpenGL ES 2.0. Android spolupracuje s mnoha volitelnymi hardwarovymi komponen´ ´ tami. Jedn´a se napˇr´ıklad o akcelerometry, gyroskopy, barometry a podobnˇe. Nˇekter´e komponenty nejsou pˇr´ımo vyˇzadov´any pro bˇeh syst´emu, ˚ Tak´e dˇr´ıve byly ale st´avaj´ı se postupnˇe standardn´ım vybaven´ım telefonu. nˇekter´e harwdarov´e komponenty vyˇzadov´any (napˇr´ıklad mikrofon), ale v souˇcasn´e dobˇe jsou pouze voliteln´e. Aktu´aln´ı verze Androidu 4.4 bˇezˇ ´ı na linuxov´em j´adˇre verze 3.4. Vˇetˇsina architektury je podobn´a jako u standardn´ı linuxov´e distribuce, ale nˇekter´e cˇ a´ sti jsou odliˇsn´e. Jedn´a se napˇr´ıklad o jinou spr´avu Out-Of-Memory ˚ ych vyjimek, logov´an´ı ruzn ´ ´ druhu˚ ud´alost´ı (Android Logger) nebo Android Power Management. ˚ tˇemto zmˇen´am nen´ı moˇzn´e jednoduˇse portovat jiˇz existuj´ıc´ı apliKvuli ˚ kace pro Linux na Android. Je potˇreba pˇrizpusobit aplikaci dan´emu OS. 5
1. P LATFORMA A NDROID
Obr´azek 1.3: Diagram architektury syst´emu (Pˇrevzato z [6]) Na obr´azku cˇ ´ıslo 1.3 je zobrazena softwarov´a architektura samotn´eho syst´emu. Z´akladem je linuxov´e j´adro, kter´e oddˇeluje hardware a software. Nad touto vrstvou je vystavˇen middleware, knihovny a API. Vˇsechny aplikace bˇezˇ ´ı na vrstvˇe Applications Framework.
1.3
Vyvoj aplikac´ı ´
Aplikace pro Android maj´ı pˇr´ıponu apk (Android Application Package). Soubor apk slouˇz´ı pro distribuci a instalaci aplikac´ı a je podobny´ souboru typu zip. Obsahuje vˇsechny potˇrebn´e soubory pro spuˇstˇen´ı aplikace. Nach´az´ı se zde pˇreloˇzen´e soubory typu dex (jedn´a se o konvertovan´e soubory typu class do Dalvik byte code), bin´arn´ı verze souboru AndroidManifest.xml, ktery´ obsahuje dalˇs´ı doprovodn´e informace k aplikaci (potˇrebn´a povolen´ı, certifik´aty apod.) a v neposledn´ı rˇ adˇe soubor apk obsahuje ne˚ e obr´azky a pozkompilovateln´a data pro aplikaci, jako jsou napˇr´ıklad ruzn´ dobnˇe. ´ ˚ ych Vlastn´ı kompilace kodu zahrnuje nˇekolik ruzn n´astroju˚ a o cely´ ´ proces se vˇetˇsinou star´a zvolen´e IDE. Nejprve Android Asset Packa˚ ymi ging Tool (aapt) vezme vˇsechny soubory s ruzn zdroji pro aplikaci ´ 6
1. P LATFORMA A NDROID (jako je soubor AndroidManifest.xml, XML soubory s definic´ı layoutu˚ pro Activity, ...) a soubory zkompiluje. Vznikne soubor R.java, pˇres ktery´ se ˚ zeme k tˇemto zdrojum ˚ odkazovat z naˇseho Java kodu ´ muˇ pomoc´ı referenc´ı (napˇr´ıklad R.drawable.myimage). Pot´e jsou vˇsechny Java soubory (vˇcetnˇe R.java a dalˇs´ıch doprovodnych ´ ˚ zkompilov´any pomoc´ı pˇrekladaˇce jazyka Java. Vystupem souboru) ´ pˇrekladu jsou soubory typu class. Tyto soubory spolu s knihovnami tˇret´ıch stran a pˇr´ıpadnˇe dalˇs´ımi pˇriloˇzenymi ´ class soubory k projektu pˇrekonvertuje n´astroj dex tool do Dalvik byte code. Vzniknou tedy soubory typu dex. V dalˇs´ım kroku jsou vˇsechny nezkompilovan´e soubory, zkompilovan´e soubory a dex soubory pˇred´any n´astroji apkbuilder, ktery´ je vˇsechny zabal´ı do souboru apk. Vytvoˇreny´ soubor apk mus´ı byt ´ podeps´an n´astrojem Jarsinger, jinak by syst´em nepovolil instalaci aplikace. Vytvoˇreny´ soubor apk se podepisuje ´ celu je apk bud’ pomoc´ı debug kl´ıcˇ e nebo release kl´ıcˇ e. Z´aleˇz´ı k jak´emu uˇ soubor pouˇzit. Pokud je aplikace podeps´ana release kl´ıcˇ em, tak se mus´ı jeˇstˇe upravit vysledn y´ apk soubor pomoc´ı n´astroje zipalign. D´ıky tomuto procesu m´a ´ fin´aln´ı apk niˇzsˇ´ı n´aroky na operaˇcn´ı pamˇet’. Diagram pˇrekladu aplikace ja zachycen na obr´azku cˇ ´ıslo 1.4. V´ıce informac´ı o cel´em procesu je moˇzn´e naj´ıt zde [10]. Vysledn´ a aplikace po spuˇstˇen´ı bˇezˇ ´ı v tzv. sandboxu. Kaˇzd´a aplikace m´a ´ ˚ ze pracovat a kam muˇ ˚ ze ukl´adat pˇridˇelenou diskovou oblast, se kterou muˇ ˚ data, ale nem´a pˇr´ıstup k zˇ a´ dnym pokud j´ı uˇzivatel ´ syst´emovym ´ zdrojum, ˚ bezpeˇcnosti a tak´e k ochranˇe explicitnˇe pˇr´ıstup nepovol´ı. Je to jednak kvuli soukrom´ı uˇzivatele. Aplikace pro Android jsou tedy vyv´ıjeny prim´arnˇe v programovac´ım jazyce Java. Pro snadnˇejˇs´ı vyvoj aplikac´ı je dostupny´ Android Software De´ ˚ zit´e n´astroje pro velopment Kit (SDK). Android SDK obsahuje vˇsechny duleˇ vyvoj aplikac´ı jako je debugger, emul´ator, softwarov´e knihovny, uk´azky ´ ˇ adn´e ofici´aln´ı vyvojov´ ´ kodu atd. Z´ e prostˇred´ı (IDE) pro tento OS zat´ım nee´ xistuje. Doporuˇcovanou variantou pro vyvoj aplikac´ı je pouˇzit´ı prostˇred´ı ´ Eclipse [14] s vyuˇzit´ım Android Development Tools (ADT) pluginu. V souˇcasnosti spoleˇcnost Google dokonˇcuje vlastn´ı IDE pro vyvoj aplikac´ı. ´ Jedn´a se o Android Studio [29], kter´e se m´a st´at ofici´aln´ım IDE pro tuto platformu. Android Studio by mˇelo pˇrin´est mnohem vˇetˇs´ı komfort a rychlost pˇri samotn´em vyvoji aplikac´ı. ´ Samozˇrejmˇe je moˇzn´e tak´e aplikace vyv´ıjet v jazyce C nebo C++ pomoc´ı NDK (Native Developement Kit). D´ale existuje moˇznost vyuˇzit´ı 7
1. P LATFORMA A NDROID
8
Obr´azek 1.4: Diagram pˇrekladu aplikace (zdroj: [10])
1. P LATFORMA A NDROID nˇejak´eho frameworku pro multiplatformn´ı vyvoj. Mezi nejzn´amˇejˇs´ı a nej´ pouˇz´ıvanˇejˇs´ı framework patˇr´ı Xamarin, ktery´ vyuˇz´ıv´a programovac´ı jazyk C#. Dalˇs´ım rozˇs´ırˇ enym ´ frameworkem je napˇr´ıklad PhoneGap, ktery´ je zaloˇzen na HTML5, CSS3 a JavaScriptu.
1.4
ˇ Zivotn´ ı cyklus aplikace
Z´akladn´ım stavebn´ım kamenem aplikace je tˇr´ıda Activity. Activity je v podstatˇe prezentaˇcn´ı vrstva aplikace, kter´a se star´a o zobrazen´ı dat z niˇzsˇ´ıch vrstev. Aplikace vˇetˇsinou obsahuje v´ıce Activit, mezi kterymi se uˇzivatel ´ pˇrep´ın´a. Vytvoˇren´ı nov´e Activity je n´aroˇcn´a cˇ innost na vypoˇ ´ cetn´ı vykon ´ (alokace pamˇeti, vytvoˇren´ı nov´eho procesu, ...), takˇze se vytvoˇren´e Activity ukl´ad´aj´ı do z´asobn´ıku. O pr´aci s t´ımto z´asobn´ıkem a Activitami se star´a Activity Manager. V´ıce o zˇ ivotn´ım cyklu Activity viz obr´azek 1.5. D´ale je ˚ ych tu komponenta Service, kter´a se star´a o bˇeh ruzn ´ dlouhotrvaj´ıc´ıch akc´ı na pozad´ı (napˇr´ıklad o stahov´an´ı vetˇs´ıch objemu˚ dat z internetu), aby ne˚ zitym doch´azelo ke zpomalen´ı uˇzivatelsk´eho rozhran´ı. Dalˇs´ım duleˇ ´ prvkem ˚ ym je Content Provider, ktery´ poskytuje snadny´ pˇr´ıstup k ruzn ´ informac´ım (napˇr. obsah datab´aze) a v neposledn´ı rˇ adˇe Broadcast Receiver, ktery´ reaguje na pˇr´ıchoz´ı ozn´amen´ı. Program´ator pouze nastav´ı ud´alosti, kter´e se maj´ı hl´ıdat a jakmile tato ud´alost nastane, tak je vyvol´an tento receiver. Vˇsechny tyto komponenty mus´ı byt ´ definov´any v souboru AndroidManifest.xml, ktery´ je uloˇzen v koˇrenov´em adres´arˇ i projektu. Kromˇe Content Provideru mohou komponenty mezi sebou kooperovat pomoc´ı zpr´av, tzv. ˚ Intentu.
9
1. P LATFORMA A NDROID
ˇ Obr´azek 1.5: Zivotn´ ı cyklus Activity (zdroj: [2])
10
Kapitola 2
Prubˇ ˚ eh inventarizace C´ılem t´eto diplomov´e pr´ace nen´ı jen vytvoˇrit mobiln´ı aplikaci pro inventarizaci majetku, ale navrhnout cely´ syst´em komunikace mezi samotnou aplikac´ı a pouˇz´ıvanym ´ informaˇcn´ım syst´emem v konkr´etn´ı firmˇe. Navrˇzeny´ syst´em by nemˇelo byt ´ pˇr´ıliˇs sloˇzit´e rozˇs´ırˇ it, aby mohl slouˇzit i pro pˇr´ıjem a vydej zboˇz´ı nebo jinou obdobnou cˇ innost. Tak´e by nemˇel byt ´ ´ ˚ uzpusoben pouze jednomu informaˇcn´ımu syst´emu. Mˇela by byt ´ podporov´ana modul´arnost a moˇznost jednoduch´eho upraven´ı vysledn´ eho rˇ eˇsen´ı ´ pro jiny´ informaˇcn´ı syst´em. Vyvoj aplikace byl realizov´an ve spolupr´aci se zamˇestnanci podniku Su´ permarket Svit´avka. Tento obchod m´a 6 st´alych ´ zamˇestnancu˚ a pˇribliˇznˇe 30 000 poloˇzek v syst´emu. V souˇcasnosti obchod pˇrech´az´ı na novy´ syst´em, jelikoˇz se starym ´ syst´emem, ktery´ jeˇstˇe bˇezˇ el pod OS DOS, byla ukonˇcena spolupr´ace. Se zmˇenou IS by r´adi provedli modernizaci sv´eho skladov´eho hospod´arˇ stv´ı. Prim´arnˇe chtˇej´ı zefektivnit inventrizaci majetku a v pozdˇejˇs´ıch f´az´ıch projektu i pˇr´ıjem zboˇz´ı, pˇr´ıpadnˇe dalˇs´ı pohyby na skladˇe nebo prodejnˇe.
2.1
Souˇcasny´ stav
V souˇcasn´e dobˇe inventarizace prob´ıh´a pomalym a neefektivn´ım ´ ˚ zpusobem. Prodavaˇcky mus´ı nejprve spoˇc´ıtat vˇsechny kusy od kaˇzd´eho zboˇz´ı. Pot´e se vezme vˇzdy jeden artikl od kaˇzd´eho druhu zboˇz´ı, na ktery´ se nap´ısˇ e kolik kusu˚ bylo napoˇc´ıt´ano. Po spoˇc´ıt´an´ı urˇcit´e cˇ a´ sti prodejny se vezmou vˇsechny vybran´e artikly s napsanym ´ poˇctem kusu˚ k pokladnˇe, kde ´ a vloˇz´ı se poˇcet kusu˚ zboˇz´ı. Uˇz zde je napˇr´ıklad se naˇcte jejich cˇ a´ rovy´ kod zbyteˇcny´ pˇresun vˇseho zboˇz´ı k pokladnˇe a pot´e opˇetovn´e vr´acen´ı zboˇz´ı na ˚ jeho puvodn´ ı m´ısto. Toto je moˇzn´e pomoc´ı aplikace vyˇreˇsit. Dalˇs´ı probl´em nast´av´a, kdyˇz se na pokladnˇe zad´a napˇr´ıklad m´ısto 100 kusu˚ 1 000 kusu˚ zboˇz´ı. Obsluha si nemus´ı vˇsimnout chyby a pot´e se na probl´em pˇrijde aˇz po vytiˇstˇen´ı souhrnn´eho listu za celou inventuru. Zde je 11
˚ Eˇ H INVENTARIZACE 2. P R UB vˇsak probl´em identifikovat konkr´etn´ı poloˇzku, kde doˇslo k navyˇ ´ sen´ı poˇctu ˚ jelikoˇz je na skladˇe pˇres 30 000 poloˇzek. Pˇri pouˇzit´ı aplikace by uˇz toto kusu, nast´avat nemˇelo. Obsluha je vˇzdy upozornˇena, pokud zad´a vˇetˇs´ı mnoˇzstv´ı neˇz je vedeno v syst´emu a tak´e po zad´an´ı mnoˇzstv´ı vid´ı vloˇzenou hod˚ ze smazat a vloˇzit novou nebo notu na displeji a pˇr´ıpadnˇe tuto hodnotu muˇ ´ prov´est upravu.
2.2
Navrhnut´e nov´e rˇeˇsen´ı
Po konzultaci se zamˇestnanci a veden´ım firmy byly stanoveny tyto funkˇcn´ı poˇzadavky na vysledn y´ syst´em: ´ •
Napojen´ı na novy´ IS Stormware Pohoda
•
Moˇznost jednoduch´eho exportu a importu inventurn´ıch dat
•
´ Moˇznost zobrazen´ı, kontroly a upravy dat prob´ıhaj´ıc´ı inventury spr´avcem
•
Editace zadan´eho mnoˇzstv´ı v aplikac´ı, vyhled´av´an´ı zboˇz´ı v aplikaci
•
Odstranˇen´ı nutnosti manipulace se zboˇz´ım (pˇrenos k pokladnˇe a zpˇet)
•
Moˇznost vzd´alen´e kontroly inventury
•
Aplikace nesm´ı byt ´ v´az´ana na jedno konkr´etn´ı zaˇr´ızen´ı
Vysledn y´ syst´em by mˇel byt ´ ´ dostateˇcnˇe robustn´ı, rychly´ a spolehlivy. ´ Tak´e doba odezvy serveru i aplikace by mˇela byt ´ co nejrychlejˇs´ı a uˇzivatel by mˇel byt ´ vˇzdy informov´an o prob´ıhaj´ıc´ıch akc´ıch. Pro uloˇzen´ı vlastn´ıch dat se bude pouˇz´ıvat relaˇcn´ı SQL datab´aze, kter´a je dostateˇcnˇe rychl´a a ˇ splnuje vˇsechny vyˇ ´ se uveden´e poˇzadavky. Tak´e na firemn´ım poˇc´ıtaˇci, kde bude datab´aze a server um´ıstˇen, beˇz´ı OS Windows, takˇze nebude probl´em na tomto PC datab´azi zprovoznit. Vlastn´ı server bude vyv´ıjen pomoc´ı technologie Windows Communication Foundation (WCF) [15]. WCF je framework od spoleˇcnosti Microsoft pro vyvoj servisnˇe orientovanych to´ ´ aplikac´ı (SOA). Nejvˇetˇs´ı vyhodou ´ ˚ ych hoto frameworku je spojen´ı ruzn ´ technologi´ı od spoleˇcnosti Microsoft do jedn´e. WCF zahrujne napˇr´ıklad tyto technologie: •
ASP.NET Web Services - zajiˇst’uje interoperabilitu 12
˚ Eˇ H INVENTARIZACE 2. P R UB
Obr´azek 2.1: Use Case diagram syst´emu
13
˚ Eˇ H INVENTARIZACE 2. P R UB •
Web Services (WS) - servisn´ı orientace
•
.NET Framework - vykonnost ´
•
Enterprise Services - distribuovan´e transakce, spr´ava zˇ ivotn´ıho cyklu aplikace
•
Microsoft Message Queuing (MSMQ) - spolehliv´e doruˇcov´an´ı dat
˚ z´ıitych D´ale je tu mnoho dalˇs´ıch duleˇ vlastnost´ı, kter´e WS podpo´ ruje. Jedn´a se napˇr´ıklad o podporu AJAX a REST (Representational State Transfer) sluˇzeb, pˇres kter´e se bude komunikovat s vyslednou Android ´ ˚ aplikac´ı (v´ıce napˇr´ıklad zde: [31]). Tak´e je zde kladen duraz na zabezpeˇcen´ı. D´ale viz [15]. Vlastn´ı aplikace by mˇela bˇezˇ et na datov´em termin´alu pro sn´ım´an´ı ´ u. ˚ Na vˇetˇsinˇe tˇechto termin´alu˚ bˇezˇ ´ı OS Windows Mobile pro cˇ a´ rovych ´ kod ktery´ uˇz Microsoft ukonˇcil podporu. Na nejnovˇejˇs´ıch termin´alech je moˇzn´e naj´ıt OS Android a tento OS by mˇel byt ´ vhodnym ´ rˇ eˇsen´ı spolu s vyuˇzit´ım rozˇs´ırˇ en´ı Motorola Extension (Mx). Vyhodou aplikace bude moˇznost jej´ıho ´ spuˇstˇen´ı i na jin´em zaˇr´ızen´ı s Androidem (napˇr´ıklad mobiln´ı telefon), takˇze aplikace nebude v´az´ana pouze na zvoleny´ termin´al a jeho OS. 2.2.1 Novy´ postup inventury Pˇred zapoˇcet´ım vlastn´ı inventury na termin´alech bude provedeno sestaven´ı inventurn´ıch dat v informaˇcn´ım syst´emu. N´aslednˇe ve webov´em rozhran´ı pro inventarizaci se provede pomoc´ı stisku jednoho tlaˇc´ıtka export dat z informaˇcn´ıho syst´emu do SQL datab´aze serveru. Pot´e je vˇse pˇripraveno k zapoˇcet´ı vlastn´ı inventury. Uˇzivatel´e budou m´ıt spuˇstˇenou mobiln´ı aplikaci, kde si st´ahnou seznam dostupnych ´ inventur na serveru. Pot´e vybranou inventuru spolu se vˇsemi inventarizovanymi poloˇzkami si uloˇz´ı do termin´alu. Data se vloˇz´ı ´ do SQLite datab´aze v aplikaci. Jednu inventuru si bude moci st´ahnout i ˚ ale v praxi zat´ım bude pouze jeden. Jakmile je vˇse staˇzeno, v´ıce termin´alu, tak si uˇzivatel vybere konkr´etn´ı staˇzenou inventuru a zobraz´ı se mu seznam vˇsech poloˇzek k inventarizaci. Pot´e uˇz proch´az´ı skladem nebo prodej´ nou a postupnˇe sn´ım´a jednotliv´e cˇ a´ rov´e kody poloˇzek a zad´av´a mnoˇzstv´ı ´ (pˇr´ıpadnˇe dalˇs´ı potˇrebn´e udaje). Naˇcten´a data se budou postupnˇe ukl´adat do SQLite datab´aze v mobiln´ı aplikaci. Jakmile dojde k nasn´ım´an´ı vˇsech poloˇzek nebo nˇejak´e cˇ a´ sti dat, tak je moˇzn´e data odeslat na server ke zpracov´an´ı. Pˇr´ıpadnˇe by bylo moˇzn´e rovnou naˇcten´a data pos´ılat na server ke 14
˚ Eˇ H INVENTARIZACE 2. P R UB zpracov´an´ı, ale na prodejnˇe nen´ı vˇsude ide´aln´ı pokryt´ı WiFi sign´alem, takˇze toto rˇ eˇsen´ı nebude vyuˇzito a implementov´ano. Uˇzivatel tedy bude moci data pos´ılat bud’ najednou nebo po cˇ a´ stech. ˚ eh inventury. Uˇzivatel Pˇres webov´e rozhran´ı bude moˇzn´e sledovat prubˇ bude moci jednotliv´e poloˇzky editovat, filtrovat atd. Po naˇctˇen´ı vˇsech inventurn´ıch dat se provede import dat zpˇet do informaˇcn´ıho syst´emu. Opˇet stiskem jednoho tlaˇc´ıtka. Pot´e v syst´emu dojde k vytvoˇren´ı reportu inventury a zapoˇcet´ı dalˇs´ıch souvisej´ıc´ıch ud´alost´ı s inventurou (toto uˇz z´aleˇz´ı na konkretn´ım informaˇcn´ım syst´emu). Je tak´e moˇzn´e prov´adˇet import dat do IS postupnˇe, ale opˇet t´eto moˇznosti nebude vyuˇzito. Jednak proto, aby ˚ moˇznosti jednoduˇssˇ´ı se zamezilo pˇr´ıpadnym ´ koliz´ım mezi daty, ale i kvuli editace naˇctenych ´ dat pˇres webov´e rozhran´ı. Pˇri vyuˇzit´ı navrˇzen´eho rˇ eˇsen´ı bude zpracov´an´ı inventury rychlejˇs´ı a pˇresnˇejˇs´ı neˇz v souˇcasn´e dobˇe pouˇz´ıvany´ postup inventury. D´ıky tomuto rˇ eˇsen´ı by mˇelo doj´ıt k zamezen´ı st´avaj´ıc´ıch chyb, pˇr´ıpadnˇe k jejich dˇr´ıvˇejˇs´ımu odhalen´ı a snadnˇejˇs´ı n´apravˇe. Dalˇs´ı inventarizaci by firma uˇz mˇela prov´adˇet pomoc´ı nov´eho informaˇcn´ıho syst´emu spolu se zapojen´ım vytvoˇren´e mobiln´ı aplikace a cel´e infrastruktury pro tuto cˇ innost.
15
Kapitola 3
Popis a implementace aplikace Vlastn´ı aplikace je vytvotˇrena v prostˇred´ı Eclipse [14] s vyuˇzit´ım ADT pluginu. Eclipse je jedn´ım z nejpouˇz´ıvanˇejˇs´ıch IDE pro vyvoj Android apli´ ˚ pluginu˚ a dalˇs´ıch materi´alu, ˚ kter´e kac´ı. Pro Eclipse existuje mnoho n´avodu, ˇ ı samotny´ vyvoj usnadnuj´ aplikace. Jakmile bude vytvoˇrena fin´aln´ı verze ´ Android Studia [29] od spoleˇcnosti Google, tak se toto prostˇred´ı stane pravdˇepodobnˇe ofici´aln´ım vyvojov ym ´ ´ IDE pro Android. Samotn´a aplikace je vyv´ıjena pro Android od API cˇ ´ıslo 16, tedy od Androidu verze 4.1.x a vyˇ ´ se. Starˇs´ı verze Androidu je zbyteˇcn´e v souˇcasn´e ˚ zit´e funkce, vyvoj dobˇe podporovat. U niˇzsˇ´ıch verz´ı chyb´ı nˇekter´e duleˇ by ´ byl sloˇzitˇejˇs´ı a vˇetˇsina novych mobiln´ıch telefonu˚ a zaˇr´ızen´ı bˇezˇ ´ı uˇz mi´ nim´alnˇe na Androidu 4.1 nebo na novejˇs´ıch verz´ıch. Novˇejˇs´ı verze Androidu jsou optimalizovanˇejˇs´ı, rychlejˇs´ı a bezpeˇcnˇejˇs´ı neˇz starˇs´ı verze syst´emu.
3.1
Vyuˇzit´e knihovny
Pro snadnˇejˇs´ı vyvoj, ale hlavnˇe pro vˇetˇs´ı efektivitu a lepˇs´ı vyuˇz´ıv´an´ı ´ ˚ e dostupn´e knihovny syst´emovych ´ prostˇredku˚ jsou v aplikaci vyuˇzity ruzn´ a komponenty pro zpracov´an´ı n´aroˇcnych ´ cˇ innost´ı. D´ıky tˇemto ovˇerˇ enym ´ ´ cinnˇe. Tak´e je zde kladen knihovn´am jsou tyto cˇ innosti provedeny rychle a uˇ ˚ duraz na co nejvˇetˇs´ı vydrˇ ´ z baterie. Pouˇzit´e knihovny vyuˇz´ıvaj´ı syst´emov´e zdroje efektivnˇe a tedy sˇ etˇr´ı procesorovy´ cˇ as a baterii. 3.1.1 Jackson - zpracov´an´ı form´atu JSON Jelikoˇz komunikace aplikace se serverem prob´ıh´a pˇres API (Application Programming Interface), kter´e komunikuje ve form´atu JSON (JavaScript Object Notation), tak je v aplikaci vyuˇzita knihovna pro zpracov´an´ı dat pˇrich´azej´ıc´ıch ze serveru a tak´e i pro pˇr´ıpravu dat odes´ılanych ´ na server. ˚ velk´e podpoˇre, tak Komunikace pˇres JSON byla zvolena jednak kvuli ˚ uspoˇ ´ i kvuli re velikosti oproti napˇr´ıklad form´atu XML (pˇribliˇznˇe o 40 %). ´ Kdyˇz se pos´ıl´a soubor, ktery´ obsahuje tis´ıce poloˇzek, tak uˇz je tato uspora 16
3. P OPIS A IMPLEMENTACE APLIKACE zn´at. Soubor JSON obsahuj´ıc´ı pˇres 22 000 poloˇzek m´a velikost 4,3 MB, ty stejn´e z´aznamy ve form´atu XML maj´ı velikost 6,8 MB. V souˇcasn´e dobˇe existuj´ı dvˇe nejrozˇs´ırˇ enˇejˇs´ı knihovny pro zpracov´an´ı JSON dat. Prvn´ı je Gson knihovna [16] a druhou knihovnou je Jackson [19]. Obˇe knihovny uˇsetˇr´ı vyvoj´ ´ arˇ i pr´aci a jsou implementov´any efektivnˇeji, neˇz kdyby si neznaly´ vyvoj´ ´ arˇ parsoval data s´am. Dalˇs´ı knihovny jsou vˇetˇsinou mnohem pomalejˇs´ı nebo star´e a neaktu´aln´ı. V aplikaci je vyuˇzita knihovna Jackson, jelikoˇz jej´ı incializace je rychlejˇs´ı neˇz u knihovny Gson. Tak´e je tato knihovna velice dobˇre optimalizovan´a a ve vˇetˇsinˇe testu˚ pod´av´a lepˇs´ı vysledky neˇz knihovna Gson. Pˇri z´apisu dat ´ nen´ı mezi tˇemito knihovnami takovy´ rozd´ıl, ale pˇri cˇ tˇen´ı dat, zde uˇz rozd´ıl ˇ anek, ktery´ popisuje dalˇs´ı vyhody je docela markantn´ı. Cl´ Jackson knihovny ´ naleznete zde [1]. Jedn´a se napˇr´ıklad o podporu jakychkoliv konstruktoru˚ ´ (ne pouze s pr´azdnymi parametry), kompletn´ ı podpora generick ych ´ ´ typu˚ atd. Testy obou knihoven lze naj´ıt napˇr´ıklad zde [32] nebo zde [11]. Na ˚ ych obr´azku cˇ ´ıslo 3.1 je zn´azornˇeno rychlostn´ı srovn´an´ı ruzn knihoven a ´ ˚ postupu. Pokud se v aplikaci pˇr´ıliˇs s JSON daty nepracuje nebo jsou to mal´e ob˚ jemy dat a nen´ı zde kladen duraz na rychlost, tak je moˇzn´e vyuˇz´ıt standardn´ıch tˇr´ıd JSONObject a JSONTokener. Tyto tˇr´ıdy jsou dostupn´e pro vˇsechny verze Androidu. 3.1.2 ZXing - zpracov´an´ı 1D/2D cˇ a´ rovych ´ u˚ pomoc´ı fotoapar´atu ´ kod Vysledn´ a aplikace BarcodeTerminator bude pracovat nejen na zaˇr´ızen´ıch ´ ´ u, ˚ ale i na obyˇcejnych s hardwarovym ´ sn´ımaˇcem cˇ a´ rovych ´ kod ´ mobiln´ıch telefonech s operaˇcn´ım syst´emem Android. Do aplikace je tedy zahrnuta i ´ u˚ pomoc´ı zabudovan´eho fotoapar´atu, ktery´ m´a moˇznost cˇ ten´ı cˇ a´ rovych ´ kod ˚ vˇetˇsina mobiln´ıch telefonu. ´ Aby aplikace byla schopna cˇ ´ıst i cˇ a´ rov´e kody pomoc´ı fotoapar´atu, tak je potˇreba implementovat algoritmus pro zpracov´an´ı obrazu, ktery´ roz´ a vr´at´ı jej jako text. Toto nen´ı uplnˇ ´ ´ pozn´a cˇ a´ rovy´ kod e jednoduch´a uloha, proto je vyuˇzito extern´ı knihovny, kter´a bude tyto data zpracov´avat a vr´at´ı ´ Vybran´a knihovna by mˇela byt vlastn´ı cˇ a´ rovy´ kod. ´ kvalitn´ı a cˇ asto aktualizov´ana. Pro Android je k dispozici hned nˇekolik knihoven, bohuˇzel vˇetˇsina z nich nebyla uˇz delˇs´ı dobu aktualizov´ana a v podstatˇe existuje pouze jedna moˇznost.
17
3. P OPIS A IMPLEMENTACE APLIKACE
˚ ych Obr´azek 3.1: Srovn´an´ı ruzn ´ postupu˚ parsov´an´ı JSON dat. Zdroj: [8]
Nejpouˇz´ıvanˇejˇs´ı a nejzn´amˇejˇs´ı knihovnou je ZXing (Zebra Crossing) ´ [34]. Tato knihovna pro zpracov´an´ı obrazu sn´ım´a jak 1D kody, tak i 2D ´ (napˇr´ıklad QR kody). ´ ˚ ych kody Jej´ı velkou vyhodou je podpora mnoha ruzn ´ ´ ´ u˚ (Code 39, Code 128, EAN-8, EAN-13, ...). form´atu˚ cˇ a´ rovych ´ kod V aplikaci byla vyzkouˇsena i knihovna Android Barcode. Mˇela by to ˚ e form´aty byt ´ jedna z prvn´ıch knihoven pro Android, kter´a podporuje ruzn´ ´ u. ˚ cˇ a´ rovych ´ kod Obˇe knihovny byly naimportov´any do projektu a byla otestov´ana ´ esˇ nost cˇ ten´ı cˇ a´ rovych ´ u. ˚ Uˇz po prvn´ıch nˇekolika cˇ ten´ı bylo jasn´e, zˇ e uspˇ ´ kod ´ u˚ nejlepˇs´ı bude vyuˇz´ıt knihovnu ZXing. Mˇela jasnˇe lepˇs´ı cˇ ten´ı cˇ a´ rovych ´ kod ´ u˚ z ruzn ˚ ych ´ u˚ bylo mnohem lepˇs´ı a za ide´aln´ıch podm´ınek. I cˇ ten´ı kod ´ uhl ´ u˚ rychlejˇs´ı neˇz u druh´e knihovny. D´ale bylo vyzkouˇseno cˇ ten´ı cˇ a´ rovych ´ kod i za zhorˇsenych ´ svˇetelnych ´ podm´ınek a opˇet byla ZXing knihovna lepˇs´ı (je vidˇet, zˇ e zde vyvoj st´ale prob´ıh´a a algoritmus se poˇra´ d zdokonaluje). ´ 18
3. P OPIS A IMPLEMENTACE APLIKACE I pˇresto, zˇ e tyto knihovny pro zpracov´an´ı obrazu proˇsly velkym ´ vyvojem (samotn´e fotoapar´aty samozˇrejmˇe tak´e), tak je st´ale mnohem po´ ´ u˚ vyuˇz´ıvat hardwahodlnˇejˇs´ı, rychlejˇs´ı a pˇresnˇejˇs´ı pro cˇ ten´ı cˇ a´ rovych ´ kod rovy´ skener. Tym, ktery´ vytvoˇril ZXing knihovnou, vyd´av´a vlastn´ı aplikaci Barcode ´ ´ u˚ a je postavena nad jejich Scanner, kter´a slouˇz´ı pro cˇ ten´ı cˇ a´ rovych kod ´ vlastn´ı knihovnou. Barcode Scanner je volnˇe ke staˇzen´ı zde [26]. Samotn´a aplikace m´a velice dobr´e uˇzivatelsk´e hodnocen´ı a je pravidelnˇe aktuali´ zov´ana. Jakmile dojde k upravˇ e knihovny, tak aktualizuj´ı vyvoj´ ´ arˇ i i tuto aplikaci. Vyhodou Barcode Scanneru je moˇznost spuˇstˇen´ı aplikace pˇres ji´ ´ nou aplikaci, pˇreˇcten´ı cˇ a´ rov´eho kodu a pot´e Barcode Scanner tento naˇcteny´ ´ vr´at´ı puvodn´ ˚ cˇ a´ rovy´ kod ı aplikaci. N´avod na toto propojen´ı aplikac´ı pomoc´ı Intentu naleznete zde [18]. Jestliˇze uˇzivatel nem´a tuto aplikaci nainstalovanou, tak je odk´az´an na Google Play ke staˇzen´ı aplikace. ˚ Tato forma implementace byla vybr´ana hlavnˇe z duvodu automatickych ´ ´ u. ˚ Pokud tedy bude knihovna aktualizac´ı aplikace pro cˇ ten´ı cˇ a´ rovych ´ kod ZXing aktualizov´ana, tak dojde i k aktualizaci aplikace Barcode Scanner. Automaticky se do syst´emu st´ahne nov´a verze aplikace a uˇzivatel bude m´ıt ´ zbu aplikace je k dispozici vˇzdy nejnovˇejˇs´ı aplikaci. Pro dalˇs´ı vyvoj a udrˇ ´ ˚ ych ˚ dobr´e, kdyˇz je postavena z ruzn ´ na sobˇe nez´avislych ´ modulu.
3.2
Techniky pouˇzit´e v aplikaci
˚ kter´e zvyˇsuj´ı a optimaliBarcodeTerminator vyuˇz´ıv´a d´ale nˇekolik postupu, zuj´ı vykon aplikace. ´ 3.2.1 Pr´ace s datab´az´ı SQLite Vˇsechna data se kterymi ´ se v mobiln´ı aplikaci pracuje jsou ukl´ad´ana do SQLite datab´aze [24]. Jedn´a se o standardn´ı relaˇcn´ı datab´aze, kter´a podporuje SQL pˇr´ıkazy. Vyhodou SQLite datab´azov´eho enginu je jeho n´ızk´a n´aroˇcnost ´ na operaˇcn´ı pamˇet a tud´ızˇ je vhodnym ´ rˇ eˇsen´ım pro mobiln´ı platformu. Pro ˚ bˇeh potˇrebuje pouze stovky KB. svuj SQLite podporuje datov´e typy: •
Text - podobny´ Stringu v Javˇe
•
Integer - podobny´ datov´emu typu long
•
Real - podobny´ datav´emu typu double 19
3. P OPIS A IMPLEMENTACE APLIKACE Vˇsechny ostatn´ı datov´e typy mus´ı byt ´ pˇred uloˇzen´ım do datab´aze konvertov´any na tyto z´akladn´ı typy, ale samotny´ SQLite nekontroluje jak´e datov´e typy do jednotlivych ´ sloupcu˚ ukl´adate, takˇze do datov´eho typu Inte˚ zete uloˇzit i rˇ etˇezec. ger muˇ SQLite datab´aze je zabudovan´a v kaˇzd´em Android zaˇr´ızen´ı, takˇze se nemus´ı nic instalovat nebo nastavovat nˇejak´a administrace. Staˇc´ı pouze pˇripravit SQL pˇr´ıkazy pro vytvoˇren´ı datab´aze a pot´e se uˇz o vˇse postar´a syst´em automaticky. Jelikoˇz pˇr´ıstup k datab´azi je podobny´ jako pˇr´ıstup k souborov´emu syst´emu, tak je doporuˇceno prov´adˇet vˇsechny akce spojen´e s datab´azi asynchronnˇe. Vˇsechny zmˇeny (update, insert a delete) v SQLite datab´azi jsou ACID (atomick´e, konzistentn´ı, izolovan´e, trvanliv´e). Bohuˇzel toto znamen´a vˇetˇs´ı zat´ızˇ en´ı datab´aze a jelikoˇz v aplikaci se bude nach´azet tˇreba 30 000 poloˇzek, ´ tak jsou tyto operace neunosnˇ e drah´e. Jenom insert pro cca 20 000 poloˇzek ˚ zeme trval pˇres 40 sekund. Proto je vhodn´e vyuˇz´ıt transakce, kdy muˇ vˇsechny inserty spojit do jedn´e transakce a pot´e prov´est tuto transakci. D´ıky tomu dojde k rapidn´ımu zlepˇsen´ı vykonu (po dobu bˇehu transakce ´ SQLite uzamkne datab´azi). S vyuˇzit´ım transakce se uˇz vloˇzen´ı vˇsech 20 000 poloˇzek provedlo cca za 8 sekund.
Listing 3.1: Uk´azka vyuˇzit´ı transakce v prostˇred´ı OS Android db.beginTransaction(); try { for (int i = 0; i < values.lenght; i++) { // pripravime si data db.insert(MyTable, null, values); // v pripade ze je tech dat mnoho yieldIfContededSafely(); } db.setTransactionSuccessful(); //provedem transakci } finally { db.endTransaction(); }
Existuje mnoho dalˇs´ıch moˇznost´ı jak zvyˇ pˇri pr´aci s SQ´ sit vykonnost ´ Lite datab´az´ı. Jedn´a se tˇreba o vyuˇzit´ı indexu˚ nebo o spr´avnou volbu pozic ˚ e tipy argumentu˚ u klauzule where. V´ıce informac´ı viz napˇr´ıklad [17]. Ruzn´ nejen ohlednˇe optimalizace pr´ace s datab´az´ı lze naj´ıt v knize [21]. 20
3. P OPIS A IMPLEMENTACE APLIKACE 3.2.2 N´avrhovy´ vzor ViewHolder Vˇsechny poloˇzky inventury jsou zobrazeny v listu (komponenta ListView) a jestliˇze bude inventura obsahovat nˇekolik tis´ıc poloˇzek, tak zobrazov´an´ı tˇechto dat je potˇreba tak´e optimalizovat. V listu jsou naˇcteny pouze ty poloˇzky, kter´e jsou zobrazen´e (pˇr´ıpadnˇe nˇekolik dalˇs´ıch). Zbytek poloˇzek se naˇc´ıt´a postupnˇe. Pokud tedy uˇzivatel listuje poloˇzkami, tak se mus´ı ˚ ze naˇc´ıtat postupnˇe dalˇs´ı poloˇzky. Toto je pomˇernˇe drah´a operace a muˇ doch´azet k trhan´emu“ listov´an´ı poloˇzkami, jestliˇze uˇzivatel listuje rychle ” pˇres mnoho poloˇzek. Jelikoˇz se pˇri naˇc´ıt´an´ı poloˇzek vol´a nˇekolikr´at funkce findViewById(), kter´a m´a velky´ vliv na celkovy´ vykon, tak je potˇreba tuto cˇ a´ st optimali´ zovat pomoc´ı n´avrhov´eho vzoru ViewHolder. Objekt ViewHolder ukl´ad´a kaˇzdou komponentu (textov´e pole, obr´azek, ...) do pole tag aktu´aln´ıho layoutu. Takˇze se jednotliv´e komponenty vˇzdy vyhledaj´ı pomoc´ı funkce fin˚ ze k nim ihned pˇristoupit pˇres pole dViewById() pouze jednou a pot´e se muˇ tag. Nemus´ı se tedy hledat komponenty opakovanˇe. V´ıce informac´ı naleznete zde [27]. Listing 3.2: Uk´azka vyuˇzit´ı vzoru ViewHolder static class ViewHolder { TextView text; ImageView icon; } ViewHolder holder = new ViewHolder(); holder.icon = (ImageView) myView.findViewById(R.id.item_image); holder.text = (TextView) myView.findViewById(R.id.item_text); convemyViewrtView.setTag(holder);
3.2.3 Vyuˇzit´ı lintu a dalˇs´ı tipy Android SDK obsahuje mimo jin´e i n´astroj zvany´ lint (viz [33]), ktery´ slouˇz´ı ´ u˚ aplikace. Lint vyhled´av´a struktur´aln´ı pro skenov´an´ı vˇsech zdrojovych ´ kod probl´emy aplikace bez jak´ehokoliv sloˇzit´eho testov´an´ı. Pom´ah´a odhalit ˚ e chyby v aplikaci. Tak´e zobraz´ı vyvoj´ ˚ kter´e pomoruzn´ ´ arˇ i seznam tipu, hou optimalizovat samotnou aplikaci. Kaˇzdy´ detekovany´ probl´em je pro´ gram´atorovi vr´acen spolu s jeho popisem, urovn´ ı z´avaˇznosti a kategori´ı (celkem je tu 6 kategori´ı). Lint je moˇzn´e jednoduˇse spustit i z IDE Eclipse. Mnoho dalˇs´ıch tipu˚ jak zvyˇ a rychlost aplikace lze naj´ıt v [30]. ´ sit vykon ´ Jsou zde uvedeny nˇekter´e z´akladn´ı tipy, jako je napˇr´ıklad vyuˇz´ıv´an´ı sta21
3. P OPIS A IMPLEMENTACE APLIKACE tickych ´ promˇennych ´ pro konstanty, nevytv´arˇ en´ı zbyteˇcnych ´ objektu˚ a podobnˇe. Tipy jsou rozdˇeleny dle kategori´ı (optimalizace UI, optimalizace vydrˇ ´ ze na baterii atd.). Dalˇs´ı uˇziteˇcnou str´ankou je Android Developers Blog [9].
Obr´azek 3.2: Workflow lintu. Zdroj: [33]
Obr´azek 3.3: Uk´azka vystupu programu lint ´
3.3
Srovn´an´ı s existuj´ıc´ımi rˇeˇsen´ımi
Pro OS Android existuje cel´a rˇ ada aplikac´ı, kter´e slouˇz´ı pro zpracov´an´ı inventury. Mezi tˇemito aplikacemi jsou velk´e rozd´ıly jak v kvalitˇe a zpracov´an´ı, tak i v grafick´e podobˇe a pˇrehlednosti. Nˇekter´e aplikace nab´ızej´ı 22
3. P OPIS A IMPLEMENTACE APLIKACE pouze z´akladn´ı funkce, cˇ asto jsou uˇz nˇekolik let star´e a neaktualizovan´e. ˚ Tak´e grafick´e zpracov´an´ı tˇechto aplikac´ı neodpov´ıd´a modern´ım trendum. Na Google Play existuj´ı i pokroˇcilejˇs´ı aplikace, kter´e maj´ı mnohem v´ıce funkc´ı, ale vˇetˇsinou se jedn´a o placen´e aplikace (cena se cˇ asto pohybuje v des´ıtk´ach korun). Mnoho aplikac´ı nepodporuje komunikaci s nˇejakym ´ informaˇcn´ım syst´emem, takˇze se mus´ı vysledn´ a data (nejˇcasteji soubory ´ typu CSV) d´ale zpracovat. Pro srovn´an´ı s aplikac´ı BarcodeTerminator byly vybr´any dvˇe aplikace. Tyto aplikace jsou mezi prvn´ımi nab´ızenymi ´ aplikacemi na Google Play a jsou zdarma. Vybran´e aplikace maj´ı dobr´e uˇzivatelsk´e hodnocen´ı a jsou cˇ astˇeji aktualizovan´e. Prvn´ı aplikac´ı je Stocktaking, kter´a je ke staˇzen´ı zde [28]. Stocktaking m´a z´akladn´ı grafick´e uˇzivatelsk´e rozhran´ı. Po spuˇstˇen´ı aplikace je uˇzivateli zobrazen seznam vˇsech dostupnych inventur s moˇznost´ı vytvoˇren´ı nov´e ´ ˇ inventury (zad´av´a se pouze n´azev inventury). Stocktaking umoˇznuje veˇ Po zvolen´ı nebo vytvoˇren´ı nov´e inventury se den´ı v´ıce inventur z´aroven. uˇzivatel dostane na hlavn´ı obrazovku aplikace, kde vid´ı seznam naˇcten´eho zboˇz´ı a tak´e m´a moˇznost vloˇzit novou poloˇzku (viz obr´azek cˇ ´ıslo 3.4). ˚ ze vyslednou Jakmile uˇzivatel naˇcte vˇsechny poloˇzky, tak muˇ inventuru ´ odeslat ve form´atu CSV jako pˇr´ılohu emailu. Pot´e se mus´ı data d´ale zpracovat, aplikace nen´ı propojena s zˇ a´ dnym ´ informaˇcn´ım syst´emem. Stocktaking ˇ umoˇznuje prov´est i import informac´ı o naˇc´ıtanych poloˇzk´ach do vlastn´ı ´ ´ datab´aze aplikace. D´ıky t´eto funkci dojde po naˇcten´ı cˇ a´ rov´eho kodu k dohled´an´ı informac´ı k dan´e poloˇzce z datab´aze a zobrazen´ı popisu poloˇzky. ´ Pˇri vkl´ad´an´ı dat je moˇzn´e Jinak se m´ısto n´azvu poloˇzky zobraz´ı cˇ a´ rovy´ kod. ˚ e typy jednotek (kusy, litry, ...). Stocktaking podporuje Android zvolit ruzn´ 2.2 a vyˇssˇ´ı. Druhou aplikac´ı je Inventory od spoleˇcnosti XMS Developers. Inventory je moˇzn´e spustit na Androidu verze 1.5 a vyˇssˇ´ı. Oproti Stocktaking m´a ˇ Inventory m´enˇe pˇrehledn´e uˇzivatelsk´e rozhran´ı, neumoˇznuje zad´av´an´ı lokac´ı a tak´e je moˇzn´e zpracov´avat pouze jednu inventuru. Po spuˇstˇen´ı apli´ nebo vykace je zobrazeno menu, pˇres kter´e je moˇzn´e naˇc´ıst cˇ a´ rovy´ kod hled´avat v poloˇzk´ach dle n´azvu. Vyhodou aplikace Inventory je moˇznost ´ vkl´ad´an´ı kategorie k poloˇzce, pˇr´ıpadnˇe pˇres dalˇs´ı pole vloˇzit dodavatele, obr´azek nebo popis. Vysledn´ a data je moˇzn´e exportovat napˇr´ıklad do Ex´ celu (form´at CSV). Inventory je propojena s aplikac´ı Prisjakt/PriceSpy 1.13.2 (od stejn´e firmy) pˇres kterou je moˇzn´e vyhledat cenu naˇcten´e poloˇzky a dalˇs´ı informace. ´ u˚ kniObˇe aplikace jsou anglicky a vyuˇz´ıvaj´ı pro cˇ ten´ı cˇ a´ rovych kod ´ ´ je moˇzn´e zadat i pˇres kl´avesnici. Stocktahovnu ZXing. Vlastn´ı cˇ a´ rovy´ kod king i Inventory obsahuj´ı z´akladn´ı moˇznosti nastaven´ı aplikace. V apli23
3. P OPIS A IMPLEMENTACE APLIKACE
Obr´azek 3.4: Uk´azka obrazovky z aplikace Stocktaking a Inventory kaci Inventory je nab´ıdka nastaven´ı rozs´ahlejˇs´ı. Uˇzivatel m´a napˇr´ıklad moˇznost nastavit mnoˇzstevn´ı hodnotu, kter´a se bude vˇzdy u poloˇzky ˇ pˇredvyplnovat. Srovn´an´ı aplikac´ı je moˇzn´e naj´ıt v tabulce 3.1. Pro pˇr´ıklad placen´e aplikace byl zvolen Inventory Droid [13]. Inventory ˇ ˚ ych Droid umoˇznuje online vyhled´av´an´ı informac´ı k naˇcten´e poloˇzce v ruzn ´ datab´az´ıch (Google, Amazon, ...). D´ale je tu moˇznost pˇridat vlastn´ı nov´a ˚ ych pole pro zad´av´an´ı ruzn hodnot, vybˇ ´ ´ er z mnoha druhu˚ jednotek atd. Aplikace exportuje data do form´atu CSV a je zde umoˇznˇena z´aloha datab´aze a jej´ı opˇetovny´ import. Inventory Droid tak´e podporuje kategorie, tak´e je moˇzn´e k poloˇzk´am pˇrid´avat fotografie, d´ale je zde moˇznost ˚ ych uzamˇcen´ı inventury pomoc´ı hesla, podpora ruzn ´ ciz´ıch mˇen a nˇekolik dalˇs´ıch funkc´ı.
3.4
Motorola Extension (Mx)
OS Android je prim´arnˇe urˇcen pro bˇezˇ n´e koncov´e uˇzivatele, kteˇr´ı maj´ı tento syst´em na mobiln´ım telefonu. Nen´ı tedy pˇr´ımo vyvinut pro vyuˇzit´ı ve fi˚ zit´a ochrana dat a omezen´ı uˇzivatelskych remn´ım prostˇred´ı, kde je duleˇ ´ pravomoc´ı. Android proch´az´ı postupnym a rozˇsiˇruje svoje funkce, ale ´ vyvojem ´ ˚ zit´e funkce pro firemn´ı z´akazn´ıky. Vˇsechny dast´ale tu chyb´ı nˇekter´e duleˇ tov´e termin´aly od spoleˇcnosti Motorola (na kterych ´ bˇezˇ ´ı pr´avˇe i aplikace BarcodeTerminator) jsou standardnˇe vybaveny rozˇs´ırˇ en´ım Mx Extensions [22]. Mx Extensions je v podstatˇe mezivrstva, kter´a je mezi vlastn´ım OS a 24
3. P OPIS A IMPLEMENTACE APLIKACE
Vyhled´av´an´ı v poloˇzk´ach Zad´av´an´ı lokace ˇ Razen´ ı poloˇzek Zad´av´an´ı sˇ arˇz´ı Vkl´ad´an´ı kategori´ı
BT ANO
Stocktaking NE
Inventory ANO
Inventory Droid ANO
ANO ANO ANO NE
ANO NE NE NE
NE ANO NE ANO
ANO ANO ANO ANO
Tabulka 3.1: Srovnan´ı aplikace BarcodeTerminator (BT) s vybranymi An´ droid aplikacemi samotnymi aplikacemi. D´ıky t´eto mezivrstvˇe je moˇzn´e vyuˇz´ıt nov´e funkce ´ a vlastnosti operaˇcn´ıho syst´emu, kter´e nejsou pro bˇezˇ n´e uˇzivatele dostupn´e a udˇelat tak z Androidu syst´em, ktery´ je moˇzn´e pouˇz´ıv´at ve firemn´ım prostˇred´ı. Mx Extension nen´ı standardn´ı souˇca´ st´ı OS Android, neomezuje ˚ funkcionalitu samotn´eho syst´emu a tak´e nezpusobuje probl´emy s kompatibilitou aplikac´ı. Mx Extension pˇrin´asˇ´ı hned nˇekolik rozˇs´ırˇ en´ı jako jsou napˇr´ıklad: •
Mx Security - pˇrin´asˇ´ı nov´e moˇznosti pro zabezpeˇcen´ı vlastn´ıch dat a s´ıt’ov´e komunikace
•
Mx MAM (Mobile Application Management) - pomoc´ı Mx MAM je moˇzn´e kontrolovat, kter´e aplikace budou nainstalov´any do syst´emu a nastavit, zda je moˇzn´e je aktualizovat a jak bude aktualizace prob´ıhat
•
ˇ Mx MDM (Mobile Device Management) - umoˇznuje napˇr´ıklad snaˇzsˇ´ı ˚ ych sd´ılen´ı ruzn ´ nastaven´ı pro dan´eho pracovn´ıka mezi nˇekolik Android zaˇr´ızen´ı
•
Mx Data Capture - tento modul poskytuje n´astroje, pomoc´ı kterych ´ je moˇzn´e jednoduˇse z´ıskavat data ze sn´ımac´ıho zaˇr´ızen´ı
•
Mx Wireless - rozˇsiˇruje moˇznosti Wi-Fi pro zabezpeˇcen´ı robustn´ıho a spolehliv´eho datov´eho pˇrenosu
Barcode Terminator vyuˇz´ıv´a pˇredevˇs´ım rozˇs´ırˇ en´ı Mx Data Capture. ´ ˚ ych Toto rozˇs´ırˇ en´ı obsahuje algoritmy pro dekodov´ an´ı ruzn ´ typu˚ cˇ a´ rovych ´ ´ u. ˚ Vysledek kod tohoto procesu je pot´e poskytnut pˇr´ımo aplikaci. Pˇres inte´ ˚ e parametry, kter´e grovanou aplikaci DataWedge je moˇzn´e nastavovat ruzn´ ´ ovlivn´ı vlastn´ı sn´ım´an´ı kodu a pˇred´an´ı dat aplikaci. Jedn´a se napˇr´ıklad 25
3. P OPIS A IMPLEMENTACE APLIKACE
Obr´azek 3.5: Uk´azka aplikace BarcodeTerminator ˚ eho form´atu vystupu ´ o moˇznost zvolen´ı ruzn´ nebo nastaven´ı, jak´e kody ´ je moˇzn´e cˇ ´ıst. Motorola mimo jin´e nab´ız´ı i vlastn´ı DataCapture SDK pro Android. D´ıky tomuto SDK je moˇzn´e pˇristupovat jak k funkc´ım pro cˇ ten´ı ´ u, ˚ tak i k funkc´ım pro pr´aci s cˇ teˇckou magnetickych cˇ a´ rovych kod karet ´ ´ (Magnetic Stripe Reader - MSR). Pˇri samotn´e inventuˇre se tak´e vyuˇz´ıv´a rozˇs´ırˇ en´ı Mx Security, kter´e ˇ umoˇznuje nastavit aplikaci, kter´a m´a na dan´em zaˇr´ızen´ı bˇezˇ et. T´ımto se ˚ ˚ e zabr´an´ı uˇzivatelum, aby spouˇstˇeli jin´e programy nebo prov´adˇeli ruzn´ zmˇeny v syst´emu. D´ale je moˇzn´e pomoc´ı toho rozˇs´ırˇ en´ı napˇr´ıklad zak´azat pouˇz´ıv´an´ı Bluetooth nebo USB komunikace.
26
Kapitola 4
Popis a implementace serveru Hlavn´ı cˇ ast serveru je postavena na technologii WCF. V´ıce informac´ı o t´eto technologii lze naj´ıt v knize [23]. Kniha obsahuje i postupy, kter´e byly vyuˇzity pˇri vyvoji. Pro vyvoj serveru bylo zvoleno prostˇred´ı Microsoft Vi´ ´ sual Studio 2013. Jedn´a se o ofici´aln´ı IDE pro tuto platformu. Samotny´ ser˚ ych ver je sloˇzen z nˇekolika odliˇsnych ´ technologi´ı, kter´e jsou naps´any v ruzn ´ programovac´ıch jazyc´ıch a jsou spojeny do jednoho celku. Server se skl´ad´a ze tˇr´ı hlavn´ıch cˇ a´ st´ı. Prvn´ı cˇ a´ st´ı je SQL datab´aze, dalˇs´ı cˇ a´ st´ı je Backend, ktery´ je vytvoˇren pr´avˇe pomoc´ı WCF (naps´ano v jazyce C#) a posledn´ı cˇ a´ st´ı je Frontend. Frontend je vytvoˇren pomoc´ı technologie ASP.NET, kde je ´ vyuˇzita kombinace C# a HTML kodu spojen´eho s kask´adovymi ´ styly (CSS). Na obr´azku cˇ ´ıslo 4.1 je vidˇet vlastn´ı sch´ema cel´eho syst´emu.
4.1
Popis datab´aze
Na zaˇca´ tku cel´eho vyvoje bylo potˇreba navrhnout vhodnˇe datab´azi, aby ´ ´ pˇr´ıpadn´e budouc´ı upravy byly co nejjednoduˇssˇ´ı a zmˇena se serveru dotkla co nejm´enˇe. Jako referenˇcn´ı informaˇcn´ı syst´em slouˇzil IS Pohoda [35] od firmy Stormware. Bylo nutn´e sepsat vˇsechny poˇzadavky na aplikaci od z´akazn´ıka a tak´e zjistit sch´ema samotnych ´ dat, se kterymi ´ se bude pracovat. Vlastn´ı n´avrh datab´aze vych´azel z ERD diagramu (viz obr´azek 4.2). Vysledn´ a datab´aze se skl´ad´a z 5 tabulek. Hlavn´ı tˇri relace jsou Inven´ tury, InventuryPolozky a Polozky. Do tabulky Inventury se ukladaj´ı jednotliv´e inventury. Tedy n´azev a identifik´ator (ID) inventury, ktery´ se z´ısk´av´a z extern´ıho informaˇcn´ıho syst´emu. Tabulka Polozky je cˇ ´ıseln´ıkem ˚ ze byt vˇsech poloˇzek. Tato tabulka muˇ ´ vyuˇzita i pro dalˇs´ı budouc´ı moduly (napˇr´ıklad pˇr´ıjem a vydej zboˇz´ı), kter´e budou pracovat pr´avˇe se sezna´ mem poloˇzek. Tabulka InventuryPolozky spojuje inventuru a jednotliv´e poloˇzky, kter´e k t´eto inventuˇre patˇr´ı. Tak´e se v tabulce InventuryPolozky nach´az´ı dalˇs´ı doprovodn´e informace (napˇr´ıklad mnoˇzstv´ı zboˇz´ı nebo sklad, na kter´em je poloˇzka um´ıstˇena).
27
4. P OPIS A IMPLEMENTACE SERVERU
Obr´azek 4.1: Sch´ema cel´eho syst´emu ˇ Posledn´ı dvˇe tabulky jsou doplnkov´ e. Tabulka Sklady obsahuje seznam ˚ Sklady jsou propojeny s tabulkou InventuryPolozky pˇres vˇsech skladu. identifik´ator skladu. Pomoc´ı druh´e tabulky SeriovaCisla je moˇzn´e v´est ˚ a s´eriov´a cˇ ´ısla, vyrobn´ k dan´e poloˇzce ruzn´ ı cˇ ´ısla nebo napˇr´ıklad sˇ arˇze. Se´ riovaCisla jsou propojena s tabulkou Polozky. Datab´aze je postavena tak, aby neobsahovala zˇ a´ dn´a redundantn´ı data. Tak´e po proveden´ı kaˇzd´e transakce by mˇela byt ´ konzistentn´ı. Datab´aze ˇ je tedy normalizovan´a (splnuje prvn´ı tˇri norm´aln´ı formy). Z´akladn´ı tˇri norm´aln´ı formy jsou (pˇrevzato z [12]): •
1NF - Kaˇzdy´ atribut obsahuje pouze atomick´e hodnoty
•
2NF - Kaˇzdy´ nekl´ıcˇ ovy´ atribut je plnˇe z´avisly´ na cel´em prim´arn´ım kl´ıcˇ i (ne pouze na nˇejak´e jeho podmnoˇzinˇe) 28
4. P OPIS A IMPLEMENTACE SERVERU
Obr´azek 4.2: ERD diagram datab´aze
29
4. P OPIS A IMPLEMENTACE SERVERU •
3NF - Vˇsechny nekl´ıcˇ ov´e atributy mus´ı byt ´ vz´ajemnˇe nez´avisl´e
ˇ Prvn´ı norm´aln´ı formu (1NF) splnuje datab´aze celkem jednoduˇse. Kaˇzdy´ jej´ı atribut je atomicky´ (tedy neobsahuje v´ıce neˇz jednu hodnotu). Napˇr´ıklad atribut Sklad, ktery´ obsahuje pouze jednu hodnotu. Pˇr´ıkladem atributu, ˇ ktery´ nesplnuje 1NF by byl napˇr´ıklad atribut Adresa s hodnotou ”Jan Nov´ak, N´adraˇzn´ı 42, Zl´ın 12300”. ˇ Druhou norm´aln´ı formu (2NF) datab´aze splnuje tak´e, jelikoˇz toto se rˇ eˇs´ı pouze, pokud se v relaci nach´az´ı nˇejaky´ v´ıcehodnotovy´ prim´arn´ı kl´ıcˇ . V datab´azi zˇ a´ dny´ v´ıcehodnotovy´ prim´arn´ı kl´ıcˇ nen´ı. Je tak´e vidˇet, zˇ e vˇsechny nekl´ıcˇ ov´e atributy jsou z´avisl´e na jednom prim´arn´ım kl´ıcˇ i. ˇ ˇ Aby datab´aze splnovala tˇret´ı norm´aln´ı formu (3NF), mus´ı splnovat pˇredchoz´ı dvˇe a nav´ıc kaˇzdy´ jej´ı nekl´ıcˇ ovy´ atribut nesm´ı byt ´ zavisly´ na jin´em nekl´ıcˇ ov´em atributu. Napˇr´ıklad kdybychom v relaci ukl´adali inforˇ tak by pr´avˇe tyto dva mace o zamˇestnanc´ıch spolu s bydliˇstˇem a PSC, nekl´ıcˇ ov´e atributy byly na sobˇe z´avisl´e (kaˇzd´emu m´ıstu odpov´ıd´a jedno ˇ Museli bychom je tedy d´at do zvl´asˇ tn´ı tabulky a spojit ji pˇres idenPSC). tifik´ator s relac´ı zamˇestnanci. Takto je napˇr´ıklad vyˇreˇseno propojen´ı tabulky Polozky s InventuryPolozky. Proto jsou vˇsechny nekl´ıcˇ ov´e atributy nez´avisl´e. D´ıky splnˇen´ı tˇechto tˇr´ı z´akladn´ıch norm´aln´ıch forem je moˇzn´e datab´azi ˚ e jednoduˇseji udrˇzovat a spravovat. Lze napˇr´ıklad prov´adˇet snadnˇeji ruzn´ ´ upravy (updaty) poloˇzek. Tak´e pokud se smaˇze nˇejak´a cˇ a´ st datab´aze, tak se neodstran´ı zbyteˇcnˇe data, kter´a byla nez´avisl´a na smazanych ´ datech. Listing 4.1: SQL kod ´ pro vygenerov´an´ı tabulky InventuryPolozky CREATE TABLE [dbo].[InventuryPolozky]( [Id] [int] NOT NULL, [IdInventura] [int] NOT NULL, [IdPolozka] [nvarchar](50) NOT NULL, [Mnozstvi] [decimal](18, 0) NULL, [MnozstviSkutecne] [decimal](18, 0) NULL, [SerioveCislo] [nvarchar](50) NULL, [Sklad] [int] NULL, CONSTRAINT [PK_InventuryPolozky] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
30
4. P OPIS A IMPLEMENTACE SERVERU
4.2
Popis komunikace mezi aplikac´ı a serverem
Pro komunikaci mezi klientem a sluˇzbami je vyuˇzito frameworku WCF. ˚ WCF se skl´ad´a ze tˇr´ı z´akladn´ıch stavebn´ıch prvku: •
Zpr´ava (message)
•
Sluˇzba (service)
•
Koncovy´ bod (endpoint)
WCF je zaloˇzeno na komunikaci mezi klientem a serverem, kdy klient zahajuje komunikaci a server mu odpov´ıd´a. V naˇsem pˇr´ıpadˇe klientem je mobiln´ı aplikace BarcodeTerminator. Sluˇzbou je server, ktery´ cˇ ek´a na poˇzadavky od aplikace a pos´ıl´a odpovˇedi. Pro vz´ajemnou komunikaci WCF vyuˇz´ıv´a pr´avˇe zpr´avy. Zpr´ava je skupina dat, obsahuj´ıc´ı z´ahlav´ı a tˇelo (napˇr´ıklad HTTP poˇzadavek). Z´akladn´ım prvkem WCF je sluˇzba. Sluˇzba je syst´em, ktery´ poskytuje je˚ Koncov´e body slouˇz´ı pro pˇr´ıjem a odes´ıl´an´ı den nebo v´ıce koncovych ´ bodu. SOAP (Simple Object Access protocol) zpr´av. Sluˇzba tak´e poskytuje metadata, kter´a popisuj´ı konkr´etn´ı sluˇzbu. D´ıky tomuto popisu klient v´ı, jak m´a s danou sluˇzbou komunikovat nebo na jak´e adrese bˇezˇ ´ı atd. Sluˇzba se skl´ad´a ze tˇr´ı z´akladn´ıch cˇ a´ st´ı: •
Tˇr´ıda sluˇzby - vlastn´ı implementace sluˇzby
•
˚ ze to byt Hostovac´ı prostˇred´ı - bˇehov´e prostˇred´ı sluˇzby (muˇ ´ IIS nebo tˇreba klasicky´ Windows proces)
•
Koncov´e body - jeden nebo v´ıce
Koncovy´ bod specifikuje m´ısto, kde se pˇrij´ımaj´ı a odes´ılaj´ı data. Skl´ad´a ze tˇr´ı cˇ a´ st´ı: •
Adresa (Address) - vlastn´ı adresa sluˇzby, kam se zpr´avy pos´ılaj´ı
•
´ Vazba (Binding) - specifikuje komunikaˇcn´ı protokol, kodov´ an´ı atd.
•
Kontrakty (Contract) - specifikuje rozhran´ı (napˇr´ıklad metody sluˇzby)
Uk´azku nastaven´ı koncov´eho bodu lze naj´ıt na vypise cˇ ´ıslo 4.2. Toto ´ nastaven´ı lze zmˇenit na serveru v souboru Web.config. 31
4. P OPIS A IMPLEMENTACE SERVERU Listing 4.2: Pˇr´ıklad nastaven´ı koncov´eho bodu v konfiguraˇcn´ım souboru App.config <endpoint address="http://localhost:8080/library" binding="basicHttpBinding" contract="Client.Library.ILibrary" />
˚ e druhy kontraktu. ˚ Mezi Pˇri definici vlastn´ı sluˇzby vyuˇz´ıv´ame ruzn´ z´akladn´ı kontrakty patˇr´ı kontrakt sluˇzby (ServiceContract), kontrakt dat (DataContract) a kontrakt zpr´av (MessageContract). ˚ ze klient volat. Staˇc´ı napsat Kontrakt sluˇzby definuje operace, kter´e muˇ [ServiceContract] napˇr´ıklad pˇred definici rozhran´ı a samotn´e metody pot´e oznaˇcit pomoc´ı [OperationContract]. Definice rozrann´ı IWebService, kter´e se vyuˇz´ıv´a pˇri komunikaci mezi mobiln´ı aplikac´ı a serverem je uvedeno na vypise cˇ ´ıslo 4.3. ´ Listing 4.3: Popis rozhran´ı IWebService pro komunikaci s Android aplikac´ı [ServiceContract] public interface IWebService { [OperationContract] [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "SeznamInventury")] List
SeznamInventury(); [OperationContract] [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "SeznamSklady")] List<Sklad> SeznamtSklady(); [OperationContract] [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "SeznamSeriovaCisla")] List<SerioveCislo> SeznamSeriovaCisla(); [OperationContract] [WebInvoke(Method = "GET", BodyStyle= WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "SeznamInventuraPolozky?id={idInventura}")] List SeznamInventuraPolozky(string idInventura);
32
4. P OPIS A IMPLEMENTACE SERVERU [OperationContract] [WebInvoke(UriTemplate = "ZpracujInventuraPolozky?id={idInventura}", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle= WebMessageBodyStyle.Bare)] bool ZpracujInventuraPolozky(List polozky, string idInventura); }
D´ale je moˇzn´e u metod naj´ıt tˇreba atribut Method, ktery´ urˇcuje, zˇ e tato metoda bude volateln´a metodou GET protokolu HTTP. Atribut UriTemplate slouˇz´ı pro nastaven´ı sˇ ablony URL. Do sloˇzenych z´avorek se uv´ad´ı ´ parametry metody. Parametry mohou byt ´ jen datov´eho typu string. ResponseFormat urˇcuje form´atov´an´ı odpovˇedi. V tomto pˇr´ıpadˇe JSON, ale je moˇzn´e vyuˇz´ıt tˇreba i XML. Pˇres definovan´e rozhran´ı je potˇreba tak´e pos´ılat i jin´e datov´e typy, neˇz je ´ celu vyuˇzijeme kontrakt pro data. Tento kontrakt int nebo string. K tomuto uˇ definuje vlastn´ı datov´e typy pro komunikace mezi klientem a sluˇzbou. Staˇc´ı oznaˇcit zvolenou tˇr´ıdu nebo strukturu atributem [DataContract] a jednotliv´e cˇ leny pak oznaˇc´ıme jako [DataMember]. Pˇr´ıklad takov´eto tˇr´ıdy, kter´a se vyuˇz´ıv´a lze naj´ıt na vypise cˇ ´ıslo 4.4. Na vypise je tak´e vidˇet, zˇ e je nastavena ´ ´ ˇ vlastnost Name u kaˇzd´e promˇenn´e. Tato vlastnost umoˇznuje pˇrepsat implicitn´ı jm´eno dan´e promˇenn´e, takˇze pˇri komunikaci bude dan´a promˇenn´a vystupovat pod uvedenym ´ jm´enem. Listing 4.4: Pˇr´ıklad tˇr´ıdy Sklad s definovanym ´ datovym ´ kontraktem [DataContract(Name = "Sklad")] public class Sklad { [DataMember(Name = "id")] public int Id { get; set; } [DataMember(Name = "nazev")] public string Nazev { get; set; } [DataMember(Name = "popis")] public string Popis { get; set; } public Sklad(int id, string name, string popis) { this.Id = id; this.Nazev = name; this.Popis = popis; } }
33
4. P OPIS A IMPLEMENTACE SERVERU T´ımto je definov´ano API (Application Programming Interface) pro komunikaci mezi serverem a mobiln´ı aplikac´ı. Na serveru je nutn´e implementovat samotnou funkˇcnost API. Toto se prov´ad´ı v souboru WebService.svc.cs, ktery´ implementuje pr´avˇe rozhran´ı IWebService. Uk´azku implementace metody SeznamInventury z rozhran´ı IWebService (viz vypis ´ 4.3) lze naj´ıt v pˇr´ıloze A vypis cˇ ´ıslo A.1. Tato metoda z´ısk´a seznam vˇsech ´ inventur z datab´aze a vr´at´ı je ve form´atu JSON mobiln´ı aplikaci. ˚ zitym Dalˇs´ım duleˇ souborem v tomto projektu je Web.config, ktery´ ´ slouˇz´ı jak pro konfiguraci koncov´eho bodu sluˇzby (viz vyˇ ´ se), tak i dalˇs´ıch parametru˚ serveru (nastaven´ı session, zabezpeˇcen´ı atd.). Tento konfiguraˇcn´ı soubor vyuˇz´ıv´a tak´e technologie ASP.NET, kter´a je vyuˇzita pro vytvoˇren´ı webov´eho rozhran´ı server (viz kapitola 4.3).
4.3
Popis webov´eho rozhran´ı
Webov´e rozhran´ı serveru pro spr´avu vˇsech akc´ı je vytvoˇreno pomoc´ı technologie ASP.NET [7]. Tato technologie od spoleˇcnosti Microsoft je souˇca´ st´ı .NET Frameworku a slouˇz´ı pr´avˇe pro tvorbu webovych ´ aplikac´ı a sluˇzeb. ASP.NET je n´astupcem technologie ASP (Active Server Pages). ASP se mnohem v´ıce podob´a PHP na rozd´ıl od ASP.NETu. ASP.NET je zaloˇzen na jazyku CLR (Common Language Runtime), ktery´ je sd´ılen vˇsemi aplikacemi postavenymi na .NET Frameworku. Takˇze ´ pro vyvoj aplikac´ı v ASP.NET je moˇzn´e pouˇz´ıvat jakykoliv programovac´ı ´ ´ jazyk, ktery´ CLR podporuje (napˇr´ıklad pr´avˇe C# nebo Visual Basic .NET). Aplikace zaloˇzen´e na ASP.NET jsou pˇredkompilov´any do nˇekolika dll knihoven a jsou rychlejˇs´ı neˇz aplikace postaven´e napˇr´ıklad na skriptovac´ıch jazyc´ıch, kde jsou str´anky pˇri kaˇzd´em pˇr´ıstupu znovu kompilov´any. D´ıky ´ kompilovan´emu kodu je tak´e zachyceno v´ıce chyb uˇz pˇri vyvoji. ASP.NET ´ bˇezˇ ´ı na stranˇe serveru a vystupem aplikace v ASP.NET je HTML str´anka. ´ Dalˇs´ı vyhodou ASP.NETu je moˇznost vyuˇz´ıt uˇzivatelsky definovanych ´ ´ ovladac´ıch prvku˚ jako sˇ ablon. D´ıky tomu se vyznamnˇ e redukuje duplicitn´ı ´ ´ ASP.NET nab´ız´ı tak´e bohaty´ vybˇ ˚ ych kod. ´ er komponent a ruzn ´ knihoven, kter´e velmi zrychluj´ı vyvoj aplikac´ı. D´ale je tu schopnost cachovat celou ´ str´anku nebo pouze jej´ı cˇ a´ sti. Toto m´a tak´e podstatny´ vliv na vykon serveru. ´ ˚ ych D´ıky ASP.NETu lze server provozovat na ruzn ´ operaˇcn´ıch syst´emech i webovych ´ serverech, napˇr. IIS nebo Apache (Windows, Linux), takˇze nen´ı dan´e rˇ eˇsen´ı z´avisl´e na jedn´e platformˇe. Webov´e rozhran´ı pro inventuru se skl´ad´a ze dvou hlavn´ıch komponent. Prvn´ı komponentou je GridView. Tato komponenta slouˇz´ı pro zobrazov´an´ı 34
4. P OPIS A IMPLEMENTACE SERVERU hodnot z datab´aze. Hodnoty jsou zobrazeny v pˇrehledn´e tabulce, kde kaˇzdy´ sloupec pˇredstavuje jedno pole z datab´aze a kaˇzdy´ rˇ a´ dek obsahuje jeden z´aznam. Vlastn´ı z´aznamy je moˇzn´e editovat, rˇ adit a prov´adˇet nad nimi dalˇs´ı operace. Uk´azku nastaven´ı t´eto komponenty lze naj´ıt na vypise ´ ´ je vloˇzen do tˇela str´anky (mezi tagy ) cˇ ´ıslo 4.5. Tento kod do souboru InventuraPage.aspx. Listing 4.5: Uk´azka nastaven´ı komponenty GridView v ASP.NET
˚ zitou komponentou je SqlDataSource. D´ıky t´eto kompoDruhou duleˇ ˚ ych nentˇe je moˇzn´e z´ısk´avat data z ruzn ´ typu˚ relaˇcn´ıch datab´az´ı. Komponenta GridView m´a nastavenou vlastnost DataSourceID pr´avˇe na SqlData˚ zit´e Source, ze kter´eho cˇ erp´a data pro zobrazen´ı. V SqlDataSource je duleˇ nastavit parametr ConnectionString, ktery´ odkazuje na SQL datab´azi, se ˚ zitou vlastnost´ı je spr´avnˇe sestaveny´ kterou se bude pracovat. Dalˇs´ı duleˇ pˇr´ıkaz select, ktery´ spojuje data z nˇekolika tabulek a tyto data poskytuje komponentˇe GridView pro jejich zobrazen´ı uˇzivateli (viz vypis 4.6). Cely´ ´ ´ komponenty SqlDataSource lze naj´ıt v pˇr´ıloze A.2 kod Listing 4.6: Uk´azka pˇr´ıkazu select, ktery´ vyuˇz´ıv´a komponenta SqlDataSource SelectCommand="SELECT InventuryPolozky.Id, InventuryPolozky. IdInventura, InventuryPolozky.IdPolozka, InventuryPolozky. Mnozstvi, InventuryPolozky.MnozstviSkutecne, InventuryPolozky.SerioveCislo, InventuryPolozky.Sklad, Sklady.Nazev, Polozky.CarovyKod, Polozky.Nazev AS Expr1, Polozky.Cena, Polozky.KodPolozky, Polozky.Sledovani FROM InventuryPolozky INNER JOIN Polozky ON InventuryPolozky.IdPolozka = Polozky.ID INNER JOIN Sklady ON Sklady.ID = InventuryPolozky.Sklad INNER JOIN SeriovaCisla ON SeriovaCisla.RefIdPolozka = InventuryPolozky. IdPolozka"
Vˇsechny serverov´e komponenty ASP.NET zaˇc´ınaj´ı tagem asp, n´asleduje dvojteˇcka a n´azev dan´e komponenty. Co bezpodm´ıneˇcnˇe mus´ı komponenta m´ıt, je vlastnost runat=”server”a identifik´ator (vlastnost ID). Vlast35
4. P OPIS A IMPLEMENTACE SERVERU nost runat=”server”znamen´a, zˇ e skript se m´a spustit na stranˇe serveru, neˇz je zobrazen uˇzivateli. Vˇetˇsina komponent se zapisuje p´arovym ´ tagem, ovˇsem jsou i takov´e, kter´e by se daly zapsat nep´arovˇe. Takovou komponentou je napˇr´ıklad Label. Pokud budeme cht´ıt zmˇenit nˇejakou vlastnost komponenty pˇr´ımo ´ v kodu na pozad´ı, tak je potˇreba pomoc´ı identifik´atoru (ID) naj´ıt komponentu a v poˇzadovan´e metodˇe zmˇenit danou vlastnost. Pˇr´ıklad jednoduch´e zmˇeny vlastnosti je nastaven´ı parametru PageSize, pr´avˇe u komponenty GridView pˇri naˇcten´ı str´anky nebo nastaven´ı hodnoty Text u komponenty Label. Uk´azku tˇechto vyuˇzitych cˇ ´ıslo 4.7 ´ zmˇen lze naj´ıt na vypise ´ Listing 4.7: Uk´azka zmˇeny vlastnosti ASP.NET komponenty pˇr´ımo v kodu ´ protected void Page_Load(object sender, EventArgs e) { GridView1.PageSize = 50; } protected void SqlDataSource_OnSelected(object sender, SqlDataSourceStatusEventArgs e) { //celkovy pocet zaznamu v databazi Label3.Text = e.AffectedRows.ToString(); }
4.3.1 WebForms vs. MVC ASP.NET nab´ız´ı dva hlavn´ı postupy, jak webov´e str´anky vytv´arˇ et. Prvn´ı moˇznost´ı je vyuˇzit´ı WebForms. Druhou moˇznost´ı je MVC (Model-viewcontroller). Obˇe metody jsou zaj´ımav´e a maj´ı sve vyhody a nevyhody. ´ ´ D´ıky konceptu ASP.NET WebForms jsou str´anky poskl´ad´any z objektu˚ ˚ v desktopovych a komponent, kter´e jsou obdobn´e ovl´adac´ım prvkum ´ aplikac´ı (WinForms) a tedy pro vyvoj´ ´ arˇ e nen´ı pˇrechod z t´eto platformy na ASP.NET n´aroˇcny. ´ Pˇri tvorbˇe webov´e str´anky je moˇzn´e pouˇz´ıvat kompo˚ a tlaˇc´ıtka (Button), n´apisy (Label) a podobnˇe. nenty, jako jsou napˇr´ıklad ruzn´ ˚ lze pˇriˇrazovat urˇcit´e vlastnosti, zachyt´avat na nich ud´alosti Tˇemto prvkum ´ (viz napˇr´ıklad 4.5), ktery´ tvoˇr´ı cˇ a´ st vysledn´ atd. Tak´e produkuj´ı HTML kod e ´ str´anky poslan´e do klientova prohl´ızˇ eˇce. Aplikace se chov´a podobnˇe jako desktopov´a, ale na pozad´ı je sloˇzitˇejˇs´ı logika, protoˇze nasimulovat deskto˚ povou aplikaci na webu je obt´ızˇ n´e a to z toho duvodu, zˇ e protokol HTTP je bezstavovy. ´
36
4. P OPIS A IMPLEMENTACE SERVERU
Obr´azek 4.3: Uk´azka webov´eho rozhran´ı serveru Stavem je myˇsleno napˇr´ıklad zapamatov´an´ı si vyplnˇen´e hodnoty v pol´ıch a podobnˇe. Server nem´a informace o tom, v jak´em stavu je aplikace. Pouze k nˇemu pˇrijde nˇejaky´ poˇzadavek od aplikace a na z´akladˇe tohoto poˇzadavku server vygeneruje HTML str´anku. Po odesl´an´ı str´anky klientovi vˇetˇsina informac´ı na serveru zanik´a. Pokud uˇzivatel napˇr´ıklad vypln´ı nˇejakou hodnotu, tak chceme, aby ˚ na nov´e str´ance zustaly tyto hodnoty vyplnˇen´e, pokud jde o ten stejny´ formul´arˇ . Stav formul´arˇ e se tedy mus´ı nˇekde udrˇzovat, v ASP.NET je to rˇ eˇseno pomoc´ı tzv. ViewState (nebo ControlState). ViewState nen´ı nic jin´eho, neˇz skryt´e formul´arˇ ov´e pole, kter´e na vysledn´ e HTML str´ance ´ uchov´av´a stav aplikace a odeˇsle ho s dalˇs´ım dotazem serveru, ktery´ u sebe obnov´ı stav aplikace, jaky´ mˇela pˇredt´ım, provede nˇejakou akci a opˇet vygeneruje ViewState a stav zapomene. Toto se na pozad´ı opakuje a uˇzivatel si niˇceho nevˇsimne. Vyhodou je velk´a rychlost tvorby zejm´ena aplikac´ı, kde ´ ˚ Nevyhodou ˚ je hodnˇe formul´arˇ u. je zvyˇ ´ ´ sen´a velikost HTML str´anky, kvuli odes´ıl´an´ı ViewState a ponˇekud komplikovanˇejˇs´ı architektura. Server vyuˇz´ıv´a konceptu WebForms, ktery´ je vhodnym ´ rˇ eˇsen´ım pro ´ zbu). potˇrebnou funkcionalitu (nen´ı zbyteˇcnˇe sloˇzity´ a n´aroˇcny´ na udrˇ 37
4. P OPIS A IMPLEMENTACE SERVERU
Obr´azek 4.4: Sch´ema architektury MVC MVC (Model View Controller) je novˇejˇs´ı koncept a pracuje odliˇsnˇe neˇz WebForms. C´ılem konceptu je zpˇrehlednit architekturu webu a rozdˇelit ho na 2 cˇ a´ sti - logiku a vystup. Rozdˇeluje webovou aplikaci na tˇri cˇ a´ sti: ´ •
Model (Model) - datov´a struktura
•
Pohled (View) - prezentuje vlastn´ı data (z modelu)
•
Kontroler (Controller) - reaguje na ud´alosti a zajiˇst’uje zmˇeny v modelu a pohledu
Model jsou tedy data, business logika aplikace a tak´e napˇr´ıklad i pr´ace s datab´az´ı. View je zobrazen´ım modelu a dalˇs´ıch prvku˚ uˇzivatelsk´eho ˇ ıd´ıc´ı komponentou rozhran´ı. Jedn´a se v podstatˇe o takovou sˇ abolonu. R´ je kontroler, ktery´ reaguje na zmˇeny a pˇrij´ım´a data od uˇzivatele a komunikuje s modelem. Kontroler tedy zajiˇstuje aktualizaci modelu (dat) a pˇrekreslov´an´ı pohledu. Jak je vidˇet na obr´azku cˇ ´ıslo 4.4, tak v architektuˇre MVC v principu existuj´ı pouze dvˇe pˇr´ım´e vazby. Controller m´a pˇr´ımy´ odkaz na Model, aby mohl upravit jeho data. View m´a pˇr´ımy´ odkaz na Model, aby mohl jeho data zobrazit. Nikdy nesm´ı existovat pˇr´ım´a vazba Modelu na ostatn´ı dvˇe komponenty. Tak´e je zde naznaˇceno, zˇ e uˇzivatelsky´ vstup prim´arnˇe zachycuje View. MVC nen´ı n´astupcem WebForms. Je to pouze dalˇs´ı alternativa, jak web tvoˇrit a jsou situace, kdy je vyuˇzit´ı MVC vyhodnˇ ejˇs´ı. WebForms je starˇs´ı ´ koncept, ktery´ vˇsak st´ale pˇrevl´ad´a ve firm´ach, kde je tato technologie vhodnˇejˇs´ı. 38
4. P OPIS A IMPLEMENTACE SERVERU 4.3.2 Vyuˇzit´ı MasterPage Aby vˇsechny webov´e str´anky mˇely stejny´ vzhled a nˇekolik spoleˇcnych ´ cˇ a´ st´ı, kter´e se budou chovat vˇzdy stejnˇe, tak je vyuˇzito n´astroje Master´ Page. D´ıky tomuto pˇr´ıstupu nen´ı nutn´e na kaˇzdou str´anku ps´at stejny´ kod. Spoleˇcn´a cˇ a´ st je sd´ılena pro vˇsechny str´anky. Ve webov´e aplikaci je vytvoˇrena jedna MasterPage (m´a pˇr´ıponu master). Tato MasterPage obsahuje jednak definici vzhledu, rozloˇzen´ı atd., ale tak´e m´a vyznaˇcen´a m´ısta, do kterych ´ lze vkl´adat obsah (komponenta ContentPlaceHolder). D´ale staˇc´ı vytvoˇrit klasickou str´anku s pˇr´ıponou aspx a v direktivˇe Page nastavit hodnotu vlastnosti MasterPageFile, jako adresu k souboru s pˇr´ıponou master, kde je definovany´ vzhled. Obsah, ktery´ bude zobrazen, je um´ıstˇen do komponenty Content (viz vypis cˇ ´ıslo 4.9). ´ ˇ ı pouze poˇzadovany´ obOstatn´ı str´anky pot´e do MasterPage doplnuj´ sah. Do MasterPage je moˇzn´e vloˇzit v´ıce komponent ContentPlaceHolder. Uk´azku pouˇzit´ı MasterPage na serveru je moˇzn´e naj´ıt na vypise cˇ ´ıslo 4.8. ´ Tento vypis je zkr´aceny. ´ ´ Listing 4.8: Uk´azka vyuˇzit´ı MasterPage <%@ Master Language="C#" AutoEventWireup="true" CodeBehind= "MasterPage.Master.cs" Inherits="BTService.MasterPage" %> Barcode Terminator
39
4. P OPIS A IMPLEMENTACE SERVERU Listing 4.9: Uk´azka standardn´ı str´anky s komponentou Content <%@ Page Language="C#" Title="Hello world" MasterPageFile="˜/ MasterPage.master" %>
Kromˇe rozloˇzen´ı a chov´an´ı spoleˇcnych ´ ovl´adac´ıch prvku˚ lze v MasterPage tak´e urˇcit vychoz´ ı obsah jednotlivych ´ ´ cˇ a´ st´ı, ktery´ se pouˇzije, pokud nebude ve zvolen´e str´ance definovany´ nˇejaky´ obsah (tedy komponenta asp:Content s odpov´ıdaj´ıc´ım ContentPlaceHolderID). Takto lze napˇr´ıklad vytvoˇrit menu, kter´e bude na vˇetˇsinˇe str´anek stejn´e, ale v pˇr´ıpadˇe potˇreby ˚ ze byt muˇ ı obsah cˇ a´ st´ı se vkl´ad´a v mas´ u nˇejak´e str´anky upraven´e. Vychoz´ ´ ter page dovnitˇr tagu asp:ContentPlaceHolder, jak je vidˇet v n´asleduj´ıc´ı uk´azce: Listing 4.10: Uk´azka vytvoˇren´ı menu
4.4
Popis komunikace mezi serverem a informaˇcn´ım syst´emem
Pro komunikaci mezi serverem a zvolenym ´ informaˇcn´ım syst´emem je vytvoˇreno rozhran´ı IExternalSystemCommunication (viz 4.11). Listing 4.11: Rozhran´ı pro komunikaci mezi serverem a extern´ım IS public interface IExternalSystemCommunication { List SeznamInvetury(); List<Sklad> SeznamSklady(); List<SerioveCislo> SeznamSeriovaCisla(); List SeznamPolozkyInventura(int idInventura); bool UkoncitInventura(int id, List polozky); }
40
4. P OPIS A IMPLEMENTACE SERVERU
Obr´azek 4.5: Sch´ema komunikace mezi serverem a IS Pohoda Pˇres toto rozhran´ı komunikuje server s knihovnami, kter´e zajiˇstuj´ı export a import dat do konkr´etn´ıho informaˇcn´ıho syst´emu. Informaˇcn´ı syst´em Pohoda vyuˇz´ıv´a komunikaˇcn´ı rozhran´ı XML. Pˇres toto rozhran´ı prob´ıh´a pˇr´ıjem i odes´ıl´an´ı dat. Vyhodou XML komunikace ´ ’ je vyˇssˇ´ı bezpeˇcnost operac´ı, nebot pˇri XML komunikaci doch´az´ı ke kontrole a validaci dat samotnym ´ IS. Takˇze by nemˇelo doj´ıt k nˇejak´e nekonzistenci mezi daty. Napˇr´ıklad pˇri importu dokladu˚ ve form´atu XML ´ u, ˚ dopoˇc´ıt´an´ı chybˇej´ıc´ıch informac´ı a doch´az´ı ke kontrole vstupn´ıch udaj v pˇr´ıpadˇe chybovosti importovanych ´ dat tak´e k upozornˇen´ı na nutnost doplnˇen´ı nebo pˇrepracov´an´ı XML souboru bez jeho importov´an´ı. Tato forma komunikace je doporuˇcov´ana autory Pohody. Vyhodou t´eto komunikace ´ je tak´e jej´ı otevˇrenost, nez´avislost, dostupnost a v pˇr´ıpadˇe pouˇzit´ı transformaˇcn´ıch XSL souboru˚ pln´a pˇrenositelnost mezi libovolnymi syst´emy. ´ 41
4. P OPIS A IMPLEMENTACE SERVERU Sch´ema t´eto komunikace je na obr´azku cˇ ´ıslo 4.5. Komunikaci zahajuje server, ktery´ spust´ı IS Pohoda pˇres pˇr´ıkazovy´ rˇ a´ dek spolu s nˇekolika para˚ zitym metry. Duleˇ ´ parametrem je cesta k souboru typu INI, ktery´ obsahuje cestu k importovan´emu obsahu. Pohoda tento obsah zpracuje a vytvoˇr´ı novy´ soubor XML, ktery´ obsahuje odpovˇed’ na pˇrijat´a data a server tento soubor zpracuje. Bohuˇzel pomoc´ı XML komunikace nen´ı v souˇcasn´e dobˇe moˇzn´e prov´est export nebo import inventury. Jedinou moˇznost´ı je vyuˇz´ıt pˇr´ım´eho cˇ ten´ı a z´apisu z a do datab´aze. V tomto pˇr´ıpadˇe to nen´ı velky´ probl´em, jelikoˇz inventurn´ı data jsou v podstatˇe jen ve dvou tabulk´ach. Prvn´ı je skZInvList, coˇz je seznam inventur a SkzInv, kde jsou uloˇzeny poloˇzky k jednotlivym ´ inventur´am. Z´akladn´ı verze Pohody pracuje s datab´az´ı Access a zde prob´ıh´a komunikace pˇres OledDBprovider. Pokroˇcilejˇs´ı verze Pohody vyuˇz´ıvaj´ı uˇz SQL datab´azi, kde prob´ıh´a komunikace pˇres SqlProvider. Uk´azkov´a metoda pro z´ısk´an´ı vˇsech invetur z IS Pohoda je na vypise cˇ ´ıslo ´ 4.12. Jakmile server obdrˇz´ı seznam vˇsech invetur pˇres rozhran´ı IExternalSystemCommunication, tak tyto inventury uloˇz´ı do datab´aze (tabulka Inventury) a pot´e naˇcte pomoc´ı metody SeznamPolozkyByInventury poloˇzky k danym ´ inventur´am z extern´ıho informaˇcn´ıho syst´emu. Listing 4.12: Zdrojovy´ kod ´ pro z´ısk´an´ı vˇsech inventur z IS Pohoda (datab´aze Access) public List SeznamInvetury() { List inventury = new List(); OleDbConnection con = new OleDbConnection(ConectionString); OleDbCommand cmd = new OleDbCommand("SELECT * FROM SKzInvLst", con); con.Open(); OleDbDataReader rd; rd = cmd.ExecuteReader(); if (rd != null) { while (rd.Read()) { inventury.Add(new Inventura((int)rd["ID"], rd[" SText"])); } } con.Close(); return inventury; }
42
Kapitola 5
Z´avˇer Vysledn´ a aplikace byla vyvinuta ve spolupr´aci se Supermarketem ´ Svit´avka. Na vyvoji se pod´ıleli zamˇestnanci podniku a aplikace proˇsla tes´ tovac´ı inventurou, kde byly doladˇeny drobn´e nedostatky a chyby, kter´e ˚ ych byly nalezeny z tohoto testov´an´ı. Tak´e bylo navrˇzeno nˇekolik ruzn ´ zmˇen, kter´e by mohly byt ´ v budoucnu zaˇrazeny do cel´eho syst´emu. Jedn´a ´ se napˇr´ıklad o drobn´e upravy uˇzivatelsk´e rozhran´ı, rozˇs´ırˇ en´ı nastaven´ı aplikace, moˇznost pˇrihl´asˇ en´ı a odhl´asˇ en´ı obshluhy atd. Po proveden´ı testovac´ı inventury bylo zamˇestnanci podniku konstatov´ano, zˇ e novy´ postup inventury je jednoduˇssˇ´ı a rychlejˇs´ı, neˇz st´avaj´ıc´ı postup. Hlavn´ı c´ıle aplikace jsou tedy splnˇeny. V t´eto pr´aci byl pops´an jednak postup pˇri samotn´em vyvoji aplikace. Od ´ ˚ ych popisu OS Android a ruzn exis´ aspektu˚ t´eto platformy, pˇres analyzu ´ tuj´ıc´ıch rˇ eˇsen´ı, pouˇzitych ´ knihoven pˇres n´avrh aplikace a jej´ı implementaci. D´ale je zde pops´an postup n´avhru datab´aze a implementace cel´eho serveru spolu s jeho webovym ´ rozhran´ım. Aplikace BarcodeTerminator m´a velky´ potenci´al. Jedn´a se o univerz´aln´ı ˚ ych aplikaci pro sn´ım´an´ı zboˇz´ı a vkl´ad´an´ı ruzn ´ hodnot. Aplikaci je moˇzn´e ´ po menˇs´ı upravˇ e vyuˇz´ıt i na jin´e firemn´ı procesy (pˇr´ıjem a vydej zboˇz´ı ´ atd.). Je moˇzn´e ji tak´e spustit i na obyˇcejnych ´ mobiln´ıch telefonech, takˇze nen´ı v´az´ana pouze na speci´aln´ı hardware. Pro napojen´ı na jiny´ informaˇcn´ı syst´em staˇc´ı vytvoˇrit knihovnu, kter´a ze zvolen´eho IS provede export dat do datab´aze serveru a pot´e zpracovat inveturu standardn´ım postupem.
43
Pˇr´ıloha A
Uk´azkov´e zdrojov´e kody ´ Listing A.1: Uk´azka implementace cˇ a´ sti rozhran´ı IWebService na serveru public class WebService : IWebService { public List GetInventury() { List seznamInventur = new List(); SqlConnection con = null; try { con = new SqlConnection(Globals. ConectionStringToBarcodeDatabase); SqlCommand cmd = new SqlCommand("SELECT * FROM Inventury", con); con.Open(); SqlDataReader rd; rd = cmd.ExecuteReader(); if (rd != null) { while (rd.Read()) { seznamInventur.Add(new Inventura((int)rd[" Id"], rd["Name"].ToString())); } } } catch (Exception ex) { return null;} finally { if (con != null) con.Close(); } return seznamInventur; } }
44
´ ´ ´ ZDROJOV E´ K ODY A. U K AZKOV E Listing A.2: Uk´azka implementace komponenty SqlDataSource " OnSelected=" SqlDataSource_OnSelected" FilterExpression="Nazev LIKE ’%{0}%’" DeleteCommand="DELETE FROM [InventuryPolozky] WHERE [Id] = @Id" InsertCommand="INSERT INTO [InventuryPolozky] ([Id], [IdInventura], [IdPolozka], [CarovyKod], [Nazev], [ Mnozstvi], [MnozstviSkutecne], [Cena], [KodPolozky], [ Sledovani], [SerioveCislo]) VALUES (@Id, @IdInventura, @IdPolozka, @CarovyKod, @Nazev, @Mnozstvi, @MnozstviSkutecne , @Cena, @KodPolozky, @Sledovani, @SerioveCislo)" SelectCommand="SELECT InventuryPolozky.Id, InventuryPolozky. IdInventura, InventuryPolozky.IdPolozka, InventuryPolozky. Mnozstvi, InventuryPolozky.MnozstviSkutecne, InventuryPolozky.SerioveCislo, InventuryPolozky.Sklad, Sklady.Nazev AS Expr1, Polozky.CarovyKod, Polozky.Nazev, Polozky.Cena, Polozky.KodPolozky, Polozky.Sledovani FROM InventuryPolozky INNER JOIN Polozky ON InventuryPolozky. IdPolozka = Polozky.ID INNER JOIN Sklady ON Sklady.ID = InventuryPolozky.Sklad" UpdateCommand="UPDATE [ InventuryPolozky] SET [IdInventura] = @IdInventura, [ IdPolozka] = @IdPolozka, [CarovyKod] = @CarovyKod, [Nazev] = @Nazev, [Mnozstvi] = @Mnozstvi, [MnozstviSkutecne] = @MnozstviSkutecne, [Cena] = @Cena, [KodPolozky] = @KodPolozky, [Sledovani] = @Sledovani, [SerioveCislo] = @SerioveCislo WHERE [Id] = @Id">
45
´ ´ ´ ZDROJOV E´ K ODY A. U K AZKOV E
46
Literatura [1] 7 Killer Features that set Jackson apart from competition (Java JSON. Cowtalk [online]. http://www.cowtowncoder.com/blog/ archives/2010/11/entry_434.html, 2010. [cit. 10.12. 2014]. [2] Activity. Android Developers [online]. http://developer. android.com/reference/android/app/Activity.html, 2014. [cit. 7.12. 2014]. [3] Android. [online]. https://www.android.com/, 2014. [cit. 7.12. 2014]. [4] Android, the world’s most popular mobile platform. Android Developers [online]. http://developer.android.com/about/index. html, 2014. [cit. 18.12. 2014]. [5] Android-x86. Porting Android to x86 [online]. android-x86.org/, 2014. [cit. 7.12. 2014].
http://www.
[6] Android Architecture. [online]. http://www.tutorialspoint. com/android/android_architecture.htm, 2014. [cit. 7.12. 2014]. [7] ASP.NET. The ASP.NET Site [online]. http://www.asp.net/, 2014. [cit. 10.12. 2014]. [8] Be a Lazy but a Productive Android Developer, Part 3: JSON Parsing Library. Javalobby [online]. http://java.dzone.com/articles/ be-lazy-productive-android, 2014. [cit. 7.12. 2014]. [9] Android Developers Blog. [online]. http:// android-developers.blogspot.cz/, 2014. [cit. 10.10. 2014]. [10] Building and Running Overview. Android Developers [online]. http://developer.android.com/tools/building/ index.html, 2014. [cit. 7.12. 2014]. 47
´ ´ ´ ZDROJOV E´ K ODY A. U K AZKOV E [11] Daniel Lew’s Coding Thoughts. Streaming JSON Parsing Performance Test: Jackson vs. GSON [online]. http://daniel-codes.blogspot.cz/2013/12/ streaming-json-parsing-performance-test.html, 2013. [cit. 10.12. 2014]. [12] Normalizace datab´aze. Wikipedie [online]. http://cs. wikipedia.org/wiki/Normalizace_datab%C3%A1ze, 2014. [cit. 15.12. 2014]. [13] Inventory Droid. Aplikace pro Android ve sluˇzbˇe Google Play [online]. https://play.google.com/store/apps/details?id= com.app.inventorydroid, 2014. [cit. 10.12. 2014]. [14] Eclipse. The Eclipse Foundation open source community website [online]. https://www.eclipse.org/, 2014. [cit. 7.12. 2014]. [15] What Is Windows Communication Foundation. Microsoft [online]. http://msdn.microsoft.com/en-us/library/ms731082(v= vs.110).aspx, 2014. [cit. 3.12. 2014]. [16] google gson. A Java library to convert JSON to Java objects and viceversa [online]. https://code.google.com/p/google-gson/, 2014. [cit. 1.12. 2014]. [17] SQLite Optimization in Android Programming. SQLite Optimization in Android Apps [online]. http://www.android-app-market.com/ sqlite-optimization-in-android-programming-sqlit& e-optimization-in-android-apps.html, 2012. [cit. 7.12. 2014]. [18] Scanning Via Intent. zxing Wiki [online]. https://github.com/ zxing/zxing/wiki/Scanning-Via-Intent, 2014. [cit. 7.12. 2014]. [19] JacksonDownload. FasterXML Wiki [online]. http://wiki. fasterxml.com/JacksonDownload, 2014. [cit. 18.12. 2014]. [20] Mobile operating systems: global market share 2012-2014. Statistic [online]. http://www.statista.com/statistics/272698/ global-market-share-held-by-mobile-operating-syste& ms-since-2009/, 2014. [cit. 7.12. 2014]. 48
´ ´ ´ ZDROJOV E´ K ODY A. U K AZKOV E [21] Mark L. Murphy. The Busy Coder’s Guide to Android Development. CommonsWare, 2008. [22] Extensions (Mx). Motorola Solutions USA [online]. http://www. motorolasolutions.com/US-EN/Business+Product+and+ Services/Software+and+Applications/Mx_Extensions, 2014. [cit. 10.12. 2014]. [23] Fabio Cozzolino Johann Grabner Pablo Cibraro, Kurt Claey. Professional WCF 4: Windows Communication Foundation with .NET 4. WROX PRESS, 2010. [24] SQLite Home Page. [online]. http://www.sqlite.org/, 2014. [cit. 7.12. 2014]. [25] Google Play. [online]. https://play.google.com/store, 2014. [cit. 7.12. 2014]. [26] Barcode Scanner. Aplikace pro Android ve sluˇzbˇe Google Play [online]. https://play.google.com/store/apps/details?id= com.google.zxing.client.android, 2014. [cit. 7.12. 2014]. [27] Making ListView Scrolling Smooth. Android Developers [online]. http://developer.android.com/training/ improving-layouts/smooth-scrolling.html, 2014. [cit. 10.12. 2014]. [28] Stocktaking. Aplikace pro Android ve sluˇzbˇe Google Play [online]. https://play.google.com/store/apps/details?id= de.primaapps.android.inventory, 2014. [cit. 10.12. 2014]. [29] Download Android Studio and SDK Tools. Android Developers [online]. https://developer.android.com/sdk/installing/ studio.html, 2014. [cit. 7.12. 2014]. [30] Performance Tips. Android Developers [online]. http:// developer.android.com/training/articles/perf-tips. html, 2014. [cit. 10.12. 2014]. [31] Representational State Transfer. Wikipedie [online]. http://cs. wikipedia.org/wiki/Representational_State_Transfer, 2014. [cit. 7.12. 2014]. 49
´ ´ ´ ZDROJOV E´ K ODY A. U K AZKOV E [32] JAXB vs. GSON and Jackson. Thomas Uhrig [online]. http: //tuhrig.de/jaxb-vs-gson-and-jackson/, 2014. [cit. 10.12. 2014]. [33] Improving Your Code with lint. Android Developers [online]. http://developer.android.com/tools/debugging/ improving-w-lint.html, 2014. [cit 11.11. 2014]. [34] ZXing. [online]. https://github.com/zxing/zxing/, 2014. [cit. 7.12. 2014]. ´ cetn´ı program POHODA. STORMWARE [online]. http://www. [35] Uˇ pohoda.cz/, 2014. [cit. 18.12. 2014].
50