• Nebyly nalezeny žádné výsledky

2013RadekFrydrysˇek Absolvova´nı´individua´lnı´odborne´praxeIndividualProfessionalPractiseintheCompany VSˇB–Technicka´univerzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky

N/A
N/A
Protected

Academic year: 2022

Podíl "2013RadekFrydrysˇek Absolvova´nı´individua´lnı´odborne´praxeIndividualProfessionalPractiseintheCompany VSˇB–Technicka´univerzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky"

Copied!
43
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Fakulta elektrotechniky a informatiky Katedra informatiky

Absolvova´nı´ individua´lnı´ odborne´

praxe

Individual Professional Practise in the Company

2013 Radek Frydrysˇek

(2)
(3)
(4)

ktere´ mi poskytoval v pru˚beˇhu vykona´va´nı´ te´to odborne´ praxe.

Za´rovenˇ bych chteˇl podeˇkovat doc. Dr. Ing. Eduardu Sojkovi za konzultace a cenne´

prˇipomı´nky spojene´ s vypracova´nı´m me´ bakala´rˇske´ pra´ce.

(5)

Pra´ce pojedna´va´ o absolvova´nı´ odborne´ praxe ve firmeˇ RAYNET s.r.o. Cı´lem je popsat zada´vane´ u´koly a jejich prakticke´ rˇesˇenı´. Bakala´rˇska´ pra´ce se take´ zaby´va´ popisem zı´ska- ny´ch prakticky´ch zkusˇenostı´ v cele´m pru˚beˇhu vykona´va´nı´ odborne´ praxe.

Klı´cˇova´ slova: CRM, RAYNET, Konektor, FlexiBee, GIT, Java

Abstract

This work deals with the individual professional practise in the company RAYNET s.r.o.

The main aim is a description of the ordered loads and their practisse solutions. Bachelor essay i salso deals with the description of gained practical experiences through whole practice.

Keywords: CRM, RAYNET, Connector, FlexiBee, GIT, Java

(6)

CRM – Customer Relationship Management HTTPS – HyperText Transfer Protocol Secure

IoC – Inversion of Control

JSON – JavaScript Object Notation

CSV – Comma-separated values

DBF – DataBase File

XLS – Microsoft Excel spreadsheet file

EDI – Electronic Data Interchange

ISDOC – Information System Document

PDF – Portable Document Format

SQL – Structured Query Language

JAXB – Java Architecture for XML Binding

SCALA – Multiparadigmaticky´ programovacı´ jazyk

GIT – Syste´m spra´vy verzı´

HTML – HyperText Markup Language

CSS – Cascading Style Sheets

CI server – Continuous integration server

CMS – Content Management System

SEO – Search Engine Optimization

(7)

Obsah

1 U´ vod 5

2 Popis odborne´ho zarˇazenı´ firmy a pracovnı´ho zarˇazenı´ studenta 6

2.1 RAYNET Cloud CRM . . . 6

2.2 Pracovnı´ zarˇazenı´ studenta . . . 7

3 Seznam u´kolu˚ zadany´ch studentovi v pru˚beˇhu odborne´ praxe, jejich postup a vyja´drˇenı´ cˇasove´ na´rocˇnosti 11 3.1 Drobne´ u´koly . . . 11

3.2 Testova´nı´ RAYNET Cloud CRM . . . 11

3.3 Doplneˇnı´ CMS o novou funkcionalitu . . . 12

3.4 FlexiBee konektor . . . 14

3.5 Vyja´drˇenı´ cˇasove´ na´rocˇnosti u´kolu˚ . . . 23 4 Teoreticke´ a prakticke´ znalosti zı´skane´ v pru˚beˇhu studia a uplatneˇnı´ v pru˚beˇhu

praxe 25

5 Znalosti a schopnosti chybeˇjı´cı´ v pru˚beˇhu odborne´ praxe 26 6 Dosazˇene´ vy´sledky v pru˚beˇhu odborne´ praxe a jejı´ celkove´ zhodnocenı´ 27

7 Reference 28

Prˇı´lohy 30

A Obrazove´ uka´zky FlexiBee konektoru 30

B Prˇı´loha na CD 37

(8)

Seznam tabulek

1 Galerie . . . 13 2 Fotografie . . . 13 3 Rozdeˇlenı´ pra´ce v pru˚beˇhu praxe . . . 24

(9)

Seznam obra´zku ˚

1 Distribuovane´ syste´my spra´vy verzı´ . . . 8

2 Operace v syste´mu GIT . . . 9

3 Na´stroj GIT Extensions . . . 10

4 Architektura konektoru . . . 19

5 Kontrola synchronizovany´ch za´znamu˚ . . . 23

6 Statistika operacı´ commit . . . 24

7 U´ vodnı´ obrazovka s prˇihla´sˇenı´m . . . 31

8 Nastavenı´ aplikace . . . 32

9 Vy´pis vsˇech spolecˇnostı´ z FlexiBee online . . . 33

10 Dialogove´ okno se specifikacı´ filtru . . . 34

11 Specifikace vlastnı´ka za´znamu prˇed importem . . . 35

12 Seznam vsˇech importovany´ch za´znamu˚ . . . 36

(10)

Seznam vy´pisu ˚ zdrojove´ho ko ´ du

1 Metoda pro zı´ska´nı´ serˇazeny´ch dat z tabulky Galerie . . . 13

2 Smaza´nı´ galerie . . . 13

3 Uka´zka setter injection . . . 16

4 Uka´zka constructor injection . . . 16

5 Uka´zkova´ metoda pro prˇeklad objektu˚ . . . 20

(11)

1 U ´ vod

Alternativa bakala´rˇske´ pra´ce ve formeˇ odborne´ praxe mne velmi zaujala zejme´na z toho du˚vodu, zˇe po u´speˇsˇne´m absolvova´nı´ student zı´ska´ zkusˇenosti, ktere´ mu˚zˇe zuzˇitkovat prˇi prˇı´padne´m prˇijı´macı´m rˇı´zenı´ do budoucı´ho zameˇstna´nı´. Dalsˇı´ vy´hodou je take´ zpeˇtna´

vazba. V pru˚beˇhu praxe se student ihned dozvı´ „jak na tom je“ s odborny´mi znalostmi, ktere´ nabyl za dobu studia.

Praxi jsem si zacˇal zajisˇt’ovat jesˇteˇ prˇed zverˇejneˇnı´m oficia´lnı´ho seznamu firem na webovy´ch stra´nka´ch fakulty. Vzhledem k dobry´m referencı´m jsem se pokousˇel zı´skat mı´sto ve spolecˇnosti RAYNET s.r.o. Po sjedna´nı´ schu˚zky jsem se sesˇel s hlavnı´m projek- tovy´m manazˇerem a domluvili jsme se na podrobnostech.

Sezna´menı´ s kolektivem a obecny´m chodem firmy probeˇhlo 9.7. 2012 na Sprint mee- tingu. Pote´ mi byl prˇirˇazen prvnı´ u´kol.

Mou pozici nelze prˇı´mo specifikovat, protozˇe jsem meˇl praxi rozdeˇlenou na dveˇ cˇa´sti.

V prvnı´ cˇa´sti jsem se seznamoval s cˇinnostmi a provozem ve firmeˇ. V druhe´ cˇa´sti jsem meˇl mozˇnost pracovat na pozici programa´tora, kde bylo my´m u´kolem vyvinout konektor umozˇnˇujı´cı´ synchronizaci dat mezi FlexiBee online a syste´mem RAYNET Cloud CRM.

(12)

2 Popis odborne´ho zarˇazenı´ firmy a pracovnı´ho zarˇazenı´ stu- denta

Spolecˇnost RAYNET s.r.o. byla zalozˇena 7. 10. 2004. Prˇedmeˇtem podnika´nı´ je vy´voj soft- ware, poradenstvı´ v oblasti software a hardware, zpracova´nı´ dat, spra´va sı´tı´, porˇa´da´nı´

odborny´ch kurzu˚, sˇkolenı´ a jiny´ch vzdeˇla´vacı´ch akcı´, marketing, lektorska´ a reklamnı´

cˇinnost.[1]

Nicme´neˇ prima´rnı´m zameˇrˇenı´m je vy´voj informacˇnı´ch syste´mu˚ na mı´ru. Prvnı´m ko- mercˇnı´m produktem, dı´ky ktere´mu se spolecˇnost RAYNET s.r.o. dostala do poveˇdomı´ je SCUDeCRM.

Firma RAYNET s.r.o. ma´ mnoho spokojeny´ch za´kaznı´ku˚, mezi ktere´ patrˇı´ i neˇktere´ z nejvy´znamneˇjsˇı´ch firem v Cˇeske´ republice jako naprˇ.

• WALMARK

• Agel

• Cˇeska distribucˇnı´

V letech 2009 a 2011 zı´skala spolecˇnost RAYNET s.r.o. prestizˇnı´ oceneˇnı´ v ra´mci uzna´- vane´ho programu Delloite, kde se hodnotı´ rychle rostoucı´ technologicke´ spolecˇnosti v regionu strˇednı´ Evropy.[2] Nejvysˇsˇı´ prioritou pro RAYNET s.r.o. je ovsˇem jejich syste´m RAYNET Cloud CRM. V roce 2013 byl spusˇteˇn pilotnı´ provoz anglicke´ verze RAYNET Cloud CRM.

2.1 RAYNET Cloud CRM

RAYNET Cloud CRM je software, ktery´ slouzˇı´ pro podporu a rˇı´zenı´ obchodu. Tento syste´m je poskytova´n jako online sluzˇba, kde se platı´ za meˇsı´cˇnı´ prona´jem podle pocˇtu uzˇivatelu˚. Ke zprovozneˇnı´ syste´mu stacˇı´ takrˇka jaky´koliv pocˇı´tacˇ, ktery´ je prˇipojen k internetu a webovy´ prohlı´zˇecˇ. V prˇı´padeˇ pouzˇitı´ chytre´ho telefonu je prˇı´stupna´ i mobilnı´

verze.

Z du˚vodu cloud rˇesˇenı´ nenı´ nutna´ zˇa´dna´ instalace a slozˇita´ konfigurace. V prˇı´padeˇ hostova´nı´ u dodavatele jsou klientske´ na´klady na provoz nulove´. Za´rovenˇ jsou jizˇ v ceneˇ zahrnuty automaticke´ aktualizace a za´lohy dat.

CRM syste´my jsou zpravidla rozdeˇleny do neˇkolika modulu˚. U RAYNET Cloud CRM se jedna´ o tyto:

• Evidence kontaktu˚

• U´ kolova´nı´, pla´nova´nı´ cˇasu

• Kalenda´rˇ

• Rˇ ı´zenı´ a evidence obchodu

(13)

• Analy´zy a reporty

• Komunikace a sdı´lenı´ dat

• Na´steˇnka

• Uzˇivatelske´ role a skupiny

• Mobilnı´ prˇı´stup

Du˚lezˇitou vlastnostı´, kterou by obecneˇ meˇly mı´t vsˇechny CRM syste´my, je du˚raz na bez- pecˇnost. RAYNET Cloud CRM pouzˇı´va´ sˇifrovane´ spojenı´ pomocı´ certifikovane´ho elek- tronicke´ho podpisu, prˇicˇemzˇ vesˇkera´ data jsou automaticky za´lohova´na a jizˇ v za´kladnı´

ceneˇ je zahrnuto pojisˇteˇnı´ proti posˇkozenı´ a ztra´teˇ azˇ do vy´sˇe 5 milionu˚ ztra´ty na zisku.[3]

2.2 Pracovnı´ zarˇazenı´ studenta

V prvnı´ cˇa´sti odborne´ praxe jsem byl zarˇazen do ty´mu, kde jsem pracoval zejme´na na projektech ty´kajı´cı´ch se webovy´ch prezentacı´. Mimo webove´ zameˇrˇenı´ jsem se podı´lel take´ na psanı´ automatizovany´ch JUnit testu˚.

Druha´ cˇa´st jizˇ byla monotematicka´ se stanoveny´m cı´lem, ktery´m bylo naprogramova´nı´

konektoru, umozˇnˇujı´cı´ho prˇenos dat mezi RAYNET Cloud CRM a u´cˇetnı´m softwarem FlexiBee online.

2.2.1 Pla´nova´nı´ a organizace pra´ce

Pla´nova´nı´ pra´ce probı´ha´ po iteracı´ch o de´lce jednoho ty´dne. Kazˇda´ iterace zacˇı´na´ prvnı´

den v ty´dnu Sprint meetingem. Sprint meetingu se u´cˇastnı´ vzˇdy vsˇichni vy´voja´rˇi a sezna- mujı´ ostatnı´ se svy´m pla´nem pra´ce pro aktua´lnı´ ty´den.

Stejneˇ jako v metodice vy´voje zvane´ Scrum, probı´ha´ pravidelneˇ Stand-up meeting. [4]

Tohoto setka´nı´ se opeˇt u´cˇastnı´ vsˇichni vy´voja´rˇi a stejneˇ jako na Sprint meetingu odpovı´dajı´

na trˇi za´kladnı´ ota´zky. Vzhledem k tomu, zˇe se Stand-up meeting kona´ uprostrˇed ty´dne, tak u´cˇastnı´k odpovı´da´ nejen na ota´zku, co bude deˇlat, ale i to co prozatı´m udeˇlal a take´ je du˚lezˇite´ se podeˇlit o prˇı´padne´ blokujı´cı´ elementy.

Prˇestozˇe jsem si nepla´noval pra´ci na kazˇdy´ Sprint jako ostatnı´, pravidelneˇ jsem se aktivneˇ u´cˇastnil obou setka´nı´.

2.2.2 Pra´ce v ty´mu a na´stroj GIT

Na´stroj GIT je distribuovany´ syste´m spra´vy verzı´.[5] Spra´vou verzı´ rozumı´me syste´m, jehozˇ u´kolem je zaznamena´va´nı´ zmeˇn souboru˚ v pru˚beˇhu vy´voje. Dı´ky te´to spra´veˇ verzı´

je uzˇivatel schopen obnovit jakoukoliv zaznamenanou verzi.

GIT se rˇadı´ mezi tzv. distribuovane´ syste´my spra´vy verzı´. Vy´hodou teˇchto syste´mu˚ je, zˇe uzˇivatel nestahuje jen nejnoveˇjsˇı´ verzi souboru, ale kompletnı´ kopii reposita´rˇe (ulozˇisˇteˇ evidujı´cı´ vsˇechny zmeˇny). Pokud tedy selzˇe server, tak lze data obnovit, od ktere´hokoliv vy´voja´rˇe, jezˇ ma´ k dispozici tento reposita´rˇ. [6]

(14)

Obra´zek 1: Distribuovane´ syste´my spra´vy verzı´

(15)

2.2.2.1 Za´klady pra´ce v GITu

Obra´zek 2: Operace v syste´mu GIT

Diagram popisuje za´kladnı´ akce vyuzˇı´vane´ v GIT. Pro me´ u´cˇely nebyly potrˇebne´

zdaleka vsˇechny a to zejme´na z du˚vodu pouzˇitı´ GIT Extensions mı´sto konzolove´ varianty.

2.2.2.1.1 Za´kladnı´ pojmy

• Repository (repozita´rˇ)

Ulozˇisˇteˇ obsahujı´cı´ samotny´ projekt a take´ vlastnı´ soucˇa´sti GIT.

• Head (head)

Poslednı´ revize v dane´ veˇtvi

• Revision (Version)

Konkre´tnı´ za´znam zmeˇny v urcˇite´ cˇa´sti obsahu, resp. Konkre´tnı´ stav obsahu v cˇase

• Branch (veˇtev)

Paralelnı´ a neza´visla´ varianta obsahu

• Merge (sloucˇit)

Sloucˇenı´ neˇkolika variant obsahu

• Commit (odevzdat, commit)

Ulozˇenı´ urcˇite´ revize obsahu do reposita´rˇe (vcˇetneˇ autorstvı´, data a popisu/komen- ta´rˇe)

(16)

2.2.2.1.2 Za´kladnı´ prˇı´kazy

• Git pull

Aktualizace loka´lnı´ho reposita´rˇe (stazˇenı´ dat ze vzda´lene´ho reposita´rˇe)

• Git checkout

Prˇepnutı´ na pozˇadovanou veˇtev

• Git merge

Sloucˇenı´ dvou veˇtvı´ do jedne´

• Git push

Nahra´nı´ loka´lnı´ch zmeˇn na vzda´leny´ reposita´rˇ

• Git commit

Nahra´nı´ zmeˇn do loka´lnı´ho reposita´rˇe

• Git clone

Naklonova´nı´ vzda´lene´ho reposita´rˇe 2.2.2.1.3 GIT Extensions

Na rozdı´l od veˇtsˇiny ostatnı´ch vy´voja´rˇu˚ jsem nepouzˇı´val GIT v prˇı´kazove´ rˇa´dce, ale vyuzˇı´val jsem aplikaci GIT Extensions [8]. S tı´mto na´strojem lze prova´deˇt takrˇka stejne´

operace jako v prˇı´kazove´ rˇa´dce. Vy´hodou je take´, zˇe v za´kladnı´ instalaci je prˇibalen na´stroj KDiff3, ktery´ umozˇnˇuje zobrazit rozdı´ly ve vybrany´ch souborech. Cozˇ prˇijde vhod v prˇı´padeˇ rˇesˇenı´ konfliktu˚. Konfliktem je nazy´va´n stav, kdy je soubor ve vzda´lene´m a loka´lnı´m reposita´rˇi upraven rozdı´lny´mi zpu˚soby. Pokud nastane tento stav, tak je uzˇivatel vyzva´n, aby provedl u´pravy v souboru s konfliktem, ktere´ sloucˇı´ obeˇ zmeˇny.[7]

Obra´zek 3: Na´stroj GIT Extensions

(17)

3 Seznam u ´ kolu ˚ zadany´ch studentovi v pru ˚ beˇhu odborne´ praxe, jejich postup a vyja´drˇenı´ cˇasove´ na´rocˇnosti

3.1 Drobne´ u´ koly

3.1.1 Plneˇnı´ webovy´ch prezentacı´ pozˇadovany´m obsahem a spolupra´ce na SEO optimalizaci

Dı´lcˇı´ cˇa´st praxe jsem stra´vil plneˇnı´m webovy´ch prezentacı´ obsahem, ktery´ dodal za´kaznı´k.

Veˇtsˇinou se jednalo o jednoduchou pra´ci v CMS syste´mu. Vyskytly se vsˇak i prezentace, ktere´ nebyly vybaveny redakcˇnı´m syste´mem, a proto bylo nutne´ obsah plnit rucˇneˇ pomocı´

HTML ko´du. Zpravidla sˇlo o tagy<ul>a<li>pro seznamy a<p>pro odstavce.

Kromeˇ vyplnˇova´nı´ obsahu jsem take´ spolupracoval s kolegou na SEO optimalizaci pra´veˇ dokoncˇovany´ch webovy´ch prezentacı´. SEO optimalizacı´ se rozumı´ sbı´rka doporu- cˇenı´, jak vytva´rˇet webove´ stra´nky, aby byly na prˇednı´ch pozicı´ch ve vyhleda´vacˇı´ch.[9]

Teˇchto doporucˇenı´ je velke´ mnozˇstvı´, my´m u´kolem vsˇak bylo vyhleda´va´nı´ peˇti nej- vhodneˇjsˇı´ch klı´cˇovy´ch slov. Bylo nezbytne´, aby se tato slova vyskytovala na pozˇadovane´

stra´nce a za´rovenˇ musı´ by´t cˇasto vyhleda´vana´ minima´lneˇ z pohledu vyhleda´vacˇe Google a Seznam.

3.1.2 Graficke´ a ru˚ zne´ kosmeticke´ u´ pravy

V pru˚beˇhu praxe byla ve vy´voji webova´ prezentace, kterou bylo nutne´ doplnit o gra- fickou ilustraci. My´m u´kolem bylo dodane´ obra´zky upravit takovy´m zpu˚sobem, aby se te´maticky vcˇlenily do soucˇasne´ grafiky. Jinak rˇecˇeno, kazˇdy´ obra´zek se musel vyretusˇovat v softwaru Adobe Photoshop. Retusˇ spocˇı´vala v odstraneˇnı´ pozadı´ obra´zku a rusˇivy´ch prvku˚. Pro u´pravy byly vyuzˇı´va´ny prˇedevsˇı´m tyto na´stroje:

• Mnohou´helnı´kove´ laso

• Kouzelna´ hu˚lka

• Klonovacı´ razı´tko

3.2 Testova´nı´ RAYNET Cloud CRM

V te´to cˇa´sti jsem zejme´na spolupracoval s kolegou a to jednak kvu˚li urychlenı´ vy´voje, ale take´ kvu˚li tomu, zˇe jsem se dosud nesetkal s jazykem SCALA, ve ktere´m jsou psa´ny JUnit testy.

Testova´nı´ bylo rozdeˇleno na dveˇ fa´ze, kde v prvnı´ fa´zi jsme obdrzˇeli sdı´leny´ doku- ment, ktery´ obsahoval dva sloupce. V prvnı´m byl na´zev trˇı´dy (xy.java) a ve druhe´m byla javascriptova´ funkce. Tento seznam odpovı´dal testovacı´m prˇı´padu˚m, ktere´ je nutne´ otes- tovat. Postup byl takovy´, zˇe se nejprve musela otevrˇı´t trˇı´da z prvnı´ho sloupce a u metody s na´zvem, ktery´ odpovı´da´ javascriptove´ funkci ze seznamu vytvorˇit breakpoint. Pak uzˇ se jen v RAYNET Cloud CRM otestuje funkcionalita, kterou zajisˇt’uje zachycena´ metoda, odkrokuje se v Eclipse (prˇı´padneˇ v jine´m vy´vojove´m prostrˇedı´) a jestlizˇe nastane chyba,

(18)

tak je nutne´ chybovou hla´sˇku zaznamenat do dokumentu. Pokud kolega chybu opravil, tak za´znam oznacˇil

”RETEST“ a my´m u´kolem bylo prove´st test znovu.

Jakmile bylo vsˇe ze seznamu takto otestova´no, tak se prˇesˇlo do druhe´ fa´ze, kdy se zacˇaly vytva´rˇet JUnit testy, prˇednostneˇ pro ty prˇı´pady, kde nastala neˇjaka´ chyba.

3.2.1 JUnit testy

JUnit je testovacı´ framework urcˇeny´ pro programovacı´ jazyk Java.[10] V me´m prˇı´padeˇ testovacı´ metody byly prˇeva´zˇneˇ jednoduche´ a stacˇily za´klady jazyka SCALA viz. nı´zˇe.

Kazˇda´ z teˇchto metod meˇla mı´t na zacˇa´tku v na´zvu slovo „should“ a jejı´ teˇlo by nemeˇlo by´t prˇı´lisˇ dlouhe´ a za´rovenˇ by nemeˇla testovat vı´ce funkcı´ za´rovenˇ. Vsˇechny metody, ktere´ testujı´ neˇjakou funkcionalitu jsou uvozeny anotacı´ @Test.

3.2.2 Programovacı´ jazyk Scala

Scala je multiparadigmaticky´ programovacı´ jazyk. Integruje rysy objektoveˇ orientova- ne´ho a funkciona´lnı´ho programova´nı´.[11] Scala je zpeˇtneˇ kompatibilnı´ s Javou, nicme´neˇ syntaxe je dosti odlisˇna´ a proto bylo nutne´ prostudovat alesponˇ za´klady.

Du˚lezˇity´m faktem je, zˇe Scala obsahuje vlastnost „Type inference“, cozˇ znamena´, zˇe nenı´ nutne´ vzˇdy uva´deˇt datovy´ typ u definice promeˇnne´. Promeˇnna´ se definuje pomocı´

klı´cˇove´ho slovavar, viz:

var msg = ”testovaciRetezec”

V prˇı´padeˇ, zˇe budeme chtı´t nadefinovat i datovy´ typ tak ko´d bude vypadat takto:

var msg2: String = ”testovaciRetezec”

Stejny´m zpu˚sobem se pracuje s konstantami, jen se pouzˇije klı´cˇove´ slovoval. Pro definici metod se pouzˇı´va´ klı´cˇove´ slovo def, po ktere´m na´sleduje na´zev metody a za´vorky s parametry. V prˇı´padeˇ parametru˚ metod nefunguje type inference a je proto nutne´ zadat i datove´ typy. Na´vratovy´ typ naopak uzˇ nemusı´me (mnohdy) definovat, protozˇe se o neˇj postara´ type interference. Pokud jej vsˇak budeme chtı´t zadat, tak stacˇı´ za za´vorku s parametry zadat: na´vratovy´Typ, viz.:

def max(x: Int , y: Int ) : Int{ return if (x<y) yelsex }

3.3 Doplneˇnı´ CMS o novou funkcionalitu

Po dokoncˇenı´ JUnit testu˚ jsem dostal dalsˇı´ implementacˇnı´ u´kol. Momenta´lneˇ byla ve vy´voji webova´ prezentace doplneˇna´ o CMS a my´m u´kolem bylo zapracova´nı´ za´kaznı´kem pozˇadovany´ch zmeˇn.

Prvnı´m pozˇadavkem bylo upravit tabulku pro vy´pis vy´sledku˚ anket, takovy´m zpu˚so- bem, aby bylo mozˇne´ rˇazenı´ podle jednotlivy´ch sloupcu˚. Rˇ esˇenı´m bylo prˇida´nı´ parame- tru˚ do metody, ktera´ zı´ska´va´ data z databa´ze. Tyto parametry urcˇujı´ rˇazenı´ podle jake´ho

(19)

sloupce se ma´ rˇadit a v jake´m smeˇru. V dalsˇı´m kroku se upravila metoda, ktera´ plnı´

tabulku daty, prˇida´nı´m stejny´ch parametru˚ jako u prˇedchozı´ metody.

Da´le bylo nutne´ prˇidat dalsˇı´ sekci, ktera´ umozˇnˇovala vytva´rˇet fotogalerie. Tento u´kol byl pomeˇrneˇ rozsa´hlejsˇı´ nezˇ prˇedchozı´. Jeho rˇesˇenı´m nebyla pouha´ u´prava sta´vajı´cı´ho ko´du, ale bylo pozˇadova´no vytvorˇit neˇkolik trˇı´d.

Nejprve bylo nutne´ navrhnout tabulky v databa´zi, ktere´ budou prˇedstavovat fotogra- fie a jednotliva´ alba.

Na´zev Typ Velikost

id int 11 primary key, auto increment, not null

nazev varchar 255 not null

datumVytvoreni date not null

Tabulka 1: Galerie

Na´zev Typ Velikost

id int 11 primary key, auto increment, not null

galerie int 11 not null

uvodniFoto tinyint 4 default ’0’

Tabulka 2: Fotografie

Po vytvorˇenı´ tabulek na´sledovala pra´ce na trˇı´deˇ „PhotogalleryDao“, kde bylo nutne´

implementovat metody pracujı´cı´ nad databa´zı´. Zde jsou uka´zky dvou metod z te´to trˇı´dy:

public function getAll ($orderField, $orderType){

if($orderField != null and $orderType != null) {

return $this−>fDb−>fetchAll(”SELECT FROM gallery ORDER BY ‘”.$orderField.”‘”.

$orderType);

} else {

return $this−>fDb−>fetchAll(”SELECT FROM gallery”);

} }

Vy´pis 1: Metoda pro zı´ska´nı´ serˇazeny´ch dat z tabulky Galerie

public function deleteGallery( $galleryId ){

$table = new Zend Db Table(’gallery’);

$where = $table−>getAdapter()−>quoteInto(’id = ?’, $galleryId);

$table−>delete($where);

}

Vy´pis 2: Smaza´nı´ galerie

(20)

V tomto redakcˇnı´m syste´mu byla prˇeva´zˇna´ veˇtsˇina dat zobrazova´na pomocı´ pohledu

„List“ a „Detail“. V projektu pro tento u´cˇel byly jizˇ prˇipravene´ dva soubory „detail.phtml“

a „list.phtml“. My´m u´kolem tedy bylo vytvorˇit HTML v kombinaci s PHP ko´dem jed- notlive´ pohledy. Pro List byly pouzˇity dva vnorˇene´ cykly FOREACH. Prvnı´ procha´zel vsˇechny galerie a druhy´ meˇl na starost jejich obsah, kde vyhleda´val u´vodnı´ fotografii.

V kazˇde´ iteraci docha´zelo k vy´pisu pozˇadovany´ch dat. Detail za´znamu je o pozna´nı´

jednodusˇsˇı´. Obsahuje jen jeden cyklus, ktery´ v kazˇde´ iteraci vypisuje obsah galerie.

Oba tyto pohledy potrˇebujı´ ke sve´mu chodu jesˇteˇ prˇeda´va´nı´ parametru˚. Naprˇı´- klad pro zobrazenı´ detailu je pozˇadova´no id za´znamu, ktery´ chceme zobrazit, stejneˇ tak u listu musı´me prˇedat seznam vsˇech galeriı´. Tato funkcionalita je obsazˇena´ v sou- boru „PhotogalleryController.php“, ktery´ jsem meˇl takte´zˇ doimplementovat. V tomto souboru je obsazˇena stejnojmenna´ trˇı´da „PhotogalleryController“, ktera´ deˇdı´ ze trˇı´dy

„Zend Controller Action“. V konstruktoru probı´ha´ inicializace objektu trˇı´dy „Photogalle- ryDao“, pomocı´ ktere´ho se zı´ska´vajı´ data. Metoda „listAction“ tento objekt vyuzˇı´va´ pro zı´ska´nı´ vsˇech dat a za´rovenˇ zajisˇt’uje zı´ska´nı´ parametru˚ pro rˇazenı´ pomocı´ GET metody.

Druha´ metoda „detailAction“ pomocı´ GET metody zı´ska´va´ id pozˇadovane´ho za´znamu a vola´ s nı´m metodu „getPhotos“ s tı´mto parametrem. Metoda „getPhotos“ je obsazˇena v trˇı´deˇ „PhotogalleryDao“ a vracı´ seznam vsˇech fotografiı´ galerie s id z parametru.

3.4 FlexiBee konektor

Hlavnı´m u´kolem me´ praxe bylo programova´nı´ konektoru mezi RAYNET Cloud CRM a u´cˇetnı´m syste´mem FlexiBee online. V dobeˇ kdy jsem nastoupil, byl jizˇ naimplementova´n konektor pro u´cˇetnictvı´ MoneyS3. Z tohoto konektoru jsem meˇl vycha´zet a dodrzˇovat jizˇ hotovou architekturu s tı´m, zˇe budou provedeny minima´lnı´ zmeˇny.

Vesˇkera´ funkcionalita meˇla by´t stejna´ jako u MoneyS3 konektoru. To znamena´, zˇe meˇl umozˇnˇovat import a export teˇchto entit:

• Firmy

• Prˇijate´ objedna´vky

• Produkty

Prˇi prvnı´m spusˇteˇnı´ musı´ uzˇivatel zadat adresu, uzˇivatelske´ jme´no a heslo pro syste´my FlexiBee online a RAYNET Cloud CRM. A take´ je nutne´ nastavit smeˇr synchronizace pro prˇijatou objedna´vku (z RAYNET Cloud CRM do FlexiBee online anebo naopak). Entita Firma je synchronizova´na obousmeˇrneˇ a produkty jen ve smeˇru z FlexiBee online do RAYNET Cloud CRM.

Nı´zˇe jsou popsa´ny pouzˇite´ technologie, ktery´ch FlexiBee online a MoneyS3 konektor vyuzˇı´va´. S veˇtsˇinou z nich jsem se dosud nesetkal, a proto bylo nutne´ nastudova´nı´ ale- sponˇ nejdu˚lezˇiteˇjsˇı´ch za´kladu˚. Nejna´rocˇneˇjsˇı´ a nejrozsa´hlejsˇı´ bylo studium dokumentace Spring frameworku. Samozrˇejmeˇ nebylo mozˇne´ v kra´tke´m cˇasove´m u´seku obsa´hnout celou dokumentaci, a proto mi bylo doporucˇeno zameˇrˇit se na cˇa´st The IoC container.

Kromeˇ samotny´ch technologiı´ bylo potrˇeba zvla´dnout i FlexiBee API, ktere´ umozˇnˇuje komunikaci se syste´mem FlexiBee online.

(21)

3.4.1 FlexiBee Systems s.r.o. a FlexiBee online

Spolecˇnost FlexiBee Systems s.r.o. byla zalozˇena v roce 1991 a dostala se do poveˇdomı´

prostrˇednictvı´m produktu PC-Strom. V roce 1996 byl tento syste´m portova´n na platformu Windows s na´zvem Winstrom.[12]

FlexiBee online je varianta u´cˇetnı´ho syste´mu FlexiBee, ktera´ umozˇnˇuje online prˇı´stup odkudkoli, kde je dostupne´ internetove´ prˇipojenı´. Variantu online lze provozovat bud’ na serverech spolecˇnosti FlexiBee Systems s.r.o. anebo prˇı´mo na serveru za´kaznı´ka.[13]

3.4.2 Prvnı´ etapa vy´voje

Prvnı´ etapa se ty´kala prˇedevsˇı´m prˇı´pravy na samotny´ vy´voj. Pu˚vodnı´ konektor, ze ktere´ho jsem vycha´zel, vyuzˇı´va´ mnoho technologiı´. Prˇedevsˇı´m se jedna´ o Spring Framework. U ostatnı´ch technologiı´ jako je naprˇı´klad Swing [14] jsem uzˇ znal alesponˇ za´klady. Da´le bylo nutne´ du˚kladne´ prostudova´nı´ syste´mu FlexiBee online a jeho vy´voja´rˇske´ dokumentace.

3.4.2.1 Spring framework

Spring Framework je modula´rnı´ aplikacˇnı´ ra´mec (Framework), ktery´ slouzˇı´ pro vy´voj Java/JEE aplikacı´. Tento Framework se rˇadı´ mezi Lightweight (odlehcˇene´) kontejnery.

[15]

Spring Framework se hojneˇ vyuzˇı´va´ jak u webovy´ch aplikacı´, tak u desktopovy´ch.

Skla´da´ se z prˇiblizˇneˇ 20 modulu˚, prˇicˇemzˇ jsou seskupeny do teˇchto kategoriı´:

• Core container

• Data access/integration

• Web

• Aop (aspect oriented programming)

• Instrumentation

• Test

Dı´ky te´to modulariteˇ mu˚zˇeme prˇi programova´nı´ vyuzˇı´t jen neˇktery´ch modulu˚, cozˇ na´m prˇina´sˇı´ volnost prˇi na´vrhu a vy´voji aplikace.

3.4.2.1.1 Na´vrhovy´ vzor Inversion of Control

Tvorˇı´ ja´dro samotne´ho Spring Frameworku. Inversion of Control je te´zˇ oznacˇova´n jako IoC kontejner. Jedna´ se o na´vrhovy´ vzor, ktery´ zajisˇt’uje prˇesunutı´ zodpoveˇdnosti vytva´rˇenı´ a prova´za´nı´ objektu˚ z aplikace na Framework.

Konfiguraci IoC (Inversion of Control) zajisˇt’ujı´ metadata ve formeˇ XML, anotacı´ anebo properties.

Zı´ska´va´nı´ objektu rˇesˇı´ tzv. Depedency Injection (Vsazova´nı´ za´vislostı´). Objekt, ktery´ je zı´ska´n pomocı´ DI (Dependency Injection) je nazy´va´n Bean (jedna´ se o odkaz na Enterprise

(22)

JavaBeans). Objekty se vytva´rˇejı´ na za´kladeˇ konfiguracˇnı´ho souboru ve forma´tu XML (aplikacˇnı´ kontext), kde jsou zadefinova´ny jednotlive´ Beany (Beans). Vkla´da´nı´ objektu˚ je ve Spring Frameworku mozˇne´ teˇmito zpu˚soby:

3.4.2.1.2 Setter injection

Beana trˇı´dy, ke ktere´ chceme prˇidat za´vislost ma´ pro dane´ vlastnosti setter. Lze vytvorˇit odkaz pro hodnoty, kolekce a jine´ beany. Viz. prˇı´klad z oficia´lnı´ dokumentace [16]:

<bean id=”exampleBean”class=”examples.ExampleBean”>

<!−−setter injection using the nested<ref/>element−−>

<property name=”beanOne”><ref bean=”anotherExampleBean”/></property>

<!−−setter injection using the neater ’ ref ’ attribute −−>

<property name=”beanTwo” ref=”yetAnotherBean”/>

<property name=”integerProperty” value=”1”/>

</bean>

<bean id=”anotherExampleBean”class=”examples.AnotherBean”/>

<bean id=”yetAnotherBean”class=”examples.YetAnotherBean”/>

Vy´pis 3: Uka´zka setter injection

3.4.2.1.3 Constructor injection

Jedna´ se o variantu setter injection, kde se vyuzˇı´va´ mı´sto setteru konstruktor. Prˇi pouzˇitı´ te´to varianty by se meˇlo dodrzˇet pravidlo, zˇe kazˇda´ vytvorˇena´ beana by meˇla by´t validnı´ a tudı´zˇ by meˇly by´t osˇetrˇeny parametry konstruktoru na validnı´ hodnoty. Viz.

prˇı´klad z oficia´lnı´ dokumentace [16]:

<bean name=”foo”class=”x.y.Foo”>

<constructor−arg>

<beanclass=”x.y.Bar”/>

</constructor−arg>

<constructor−arg>

<beanclass=”x.y.Baz”/>

</constructor−arg>

</bean>

Vy´pis 4: Uka´zka constructor injection

3.4.2.2 Vy´voja´rˇska´ dokumentace FlexiBee

V te´to dokumentaci jsem se meˇl zameˇrˇit prˇedevsˇı´m na mozˇnosti exportu˚ a importu˚.

Za´kladem je forma´t XML [17], ktery´ je mozˇne´ da´le prˇeva´deˇt na:

• JSON

• CSV

• DBF

(23)

• XLS

• EDI

• ISDOC

• PDF

Samotna´ integrace je mozˇna´ prostrˇednictvı´m:

• REST API

FlexiBee online podporuje rozhranı´ REST API, ktere´ vy´razneˇ usnadnˇuje prˇı´stup k datu˚m. Data se zı´ska´vajı´ pomocı´ URL odkazu˚ s mozˇnostı´ filtrace a exportu do do ru˚zny´ch forma´tu˚, viz. seznam vy´sˇe. Za´kladnı´ sche´ma pro sestavenı´ URL, pro konkre´tnı´ za´znam je na´sledujı´cı´:

/c/<identifikator firmy>/<evidence>/<ID zaznamu>.<vystupni format>

Naprˇı´klad pro zobrazenı´ prˇijate´ objedna´vky s ID=”1”na demo instanci:

/c/demo/objednavka−prijata/1

V prˇı´padeˇ potrˇeby, lze vy´stup exportovat do takrˇka libovolne´ho forma´tu:

/c/demo/objednavka−prijata/1.xml

Filtrova´nı´ za´znamu˚ je mozˇne´ pomocı´ prˇida´va´nı´ dalsˇı´ch parametru˚ v URL. Naprˇı´- klad pokud chceme zobrazit vydane´ faktury pro firmu s konkre´tnı´m DICˇ, tak URL bude vypadat na´sledovneˇ:

/c/demo/faktura−vydana/(dic=’27CZ7002051235’).pdf

Dalsˇı´ parametry lze prˇida´vat pomocı´ klı´cˇove´ho slovaand.

• Importova´nı´ cely´ch modulu˚

Importova´nı´ cely´ch modulu˚ umozˇnˇuje syste´m FlexiBee online sloucˇit s jiny´m sys- te´mem a naopak. Tato forma integrace nebyla shleda´na jako vhodna´ pro konektor, a proto jsem se jı´ hloubeˇji nezaby´val.

Vesˇkere´ poznatky z mozˇnostı´ integrace bylo nutne´ zaznamenat do dokumentace.

Tento dokument slouzˇı´ pro archivaci aktua´lnı´ch mozˇnostı´ integrace dane´ verze FlexiBee online. Pokud by dosˇlo k urcˇity´m zmeˇna´m, tak dı´ky tomuto dokumentu je mozˇne´ tyto zmeˇny porovnat s minulou verzı´.

(24)

3.4.2.2.1 Uka´zka cˇa´sti dokumentace, zaby´vajı´cı´ se importem a exportem cenı´ku Import cenı´ku

<?xml version=”1.0”encoding=”UTF−8”?>

<winstromversion=”1.0”>

<cenik>

<id>ext:RCRM:4</id>

<kod>ZC1</kod>

<nazev>Testovaci cenik</nazev>

<cenaZakl>123.0</cenaZakl>

</cenik>

</winstrom>

Import se provede tı´mto prˇı´kazem:

curl −u jmeno:heslo−L ”http://demo.flexibee.eu:5434/c/demo/cenik.xml”−T import−cenik.xml

Vy´stup importu

Po provedenı´ importu dojde k reportu o u´speˇchu cˇi neu´speˇchu operace. Pro u´speˇsˇny´

import cenı´ku dle vy´sˇe uvedene´ho importnı´ho XML bude report na´sledujı´cı´:

<winstromversion=”1.0”>

<success>true</success>

<stats>

<created>1</created>

<updated>0</updated>

<deleted>0</deleted>

<skipped>0</skipped>

<failed>0</failed>

</stats>

<results>

<result>

<id>id zaznamu</id>

<request−id>ext:RCRM:4</request−id>

<ref>/c/demo/cenik/.xml</ref>

</result>

</results>

</winstrom>

Export cenı´ku byl realizova´n na´sledujı´cı´m prˇı´kazem

curl −u jmeno:heslo−sslv3−f−L http://demo.flexibee.eu:5434/c/demo/cenik/<id ceniku>.xml−o cenik.xml

(25)

3.4.2.3 Za´kladnı´ komponenty konektoru a jejich implementace

Pro budoucı´ vy´voj bylo nutne´ nastudovat take´ pu˚vodnı´ konektor a sezna´mit se s jeho architekturou.

Obra´zek 4: Architektura konektoru

Za´kladnı´ komponenty, ktere´ vyuzˇı´va´ jak MoneyS3 tak FlexiBee konektor jsou Com- mon a Client, viz. diagram vy´sˇe. Komponenty MoneyS3 a FlexiBee jsou vza´jemneˇ neza´- visle´, nicme´neˇ v pocˇa´tku vy´voje tomu tak nebylo. Azˇ postupem vy´voje FlexiBee konek- toru dosˇlo k postupne´mu oddeˇlova´nı´ vsˇech komponent. Toto oddeˇlenı´ prˇina´sˇı´ vy´hodu v snadne´m prˇida´va´nı´ dalsˇı´ch externı´ch syste´mu˚. Soucˇasny´ stav reflektuje komponentnı´

diagram v prave´ cˇa´sti.

Kazˇda´ komponenta, ktera´ prˇedstavuje externı´ syste´m ma´ cˇtyrˇi hlavnı´ komponenty, jezˇ zajisˇt’ujı´ konverzi a prˇenos dat.

• Translator

Vsˇechny trˇı´dy, ktere´ implementujı´ rozhranı´ „FlexibeTranslator“ umozˇnˇujı´ prˇeklad objektu˚ FlexiBee online na objekty, ktere´ pouzˇı´va´ RAYNET Custom CRM. Naprˇı´- klad pro jeden za´znam spolecˇnosti ma´ syste´m FlexiBee online trˇı´du „Adresar“.

Pro uskutecˇneˇnı´ importu musı´ by´t konkre´tnı´ objekt „Adresar“ prˇelozˇen na objekt

„Company“. Kazˇda´ za´jmova´ entita ma´ dveˇ metody, ktere´ zajisˇt’ujı´ prˇeklad. Prvnı´ je pro smeˇr RAYNET Cloud CRM do FlexiBee online a druha´ pro opacˇny´.

• Integrator

Pro importova´nı´ a exportova´nı´ dat ze syste´mu FlexiBee online slouzˇı´ trˇı´da „Default- FlexibeeIntegrator“, ktera´ implementuje rozhranı´ „FlexibeeIntegrator“.

(26)

• ImportWorker a ExportWorker

Tato dvojice rozhranı´ zajisˇt’uje samotny´ proces importu a exportu. Mimo jine´ take´

kontroluje pozˇadavky, zdali je mozˇne´ import vu˚bec prove´st. Jedna´ se hlavneˇ o import do syste´mu FlexiBee online u entity prˇijate´ objedna´vky. Nenı´ naprˇı´klad mozˇne´ importovat prˇijatou objedna´vku, kde je skladove´ zbozˇı´, ktere´ nema´ aktua´lnı´

rok vystavenı´.

• SynchronizationChecker

Trˇı´dy implementujı´cı´ toto rozhranı´ zajisˇt’ujı´ kontrolu, zdali jsou synchronizovane´

za´znamy k dispozici v obou syste´mech. Pokud nebudou dohledatelne´ na za´kladeˇ evidovane´ho ID, tak se smazˇou z evidence synchronizovany´ch za´znamu˚.

3.4.3 Druha´ etapa vy´voje

V te´to etapeˇ byl vytvorˇen novy´ projekt a veˇtev na GITu, kde probı´hal samotny´ vy´voj. Vesˇ- kery´ jizˇ hotovy´ ko´d z prvnı´ etapy byl prˇeveden do tohoto projektu. Jakmile byl prˇipraven projekt, tak zacˇala pra´ce s XML sche´maty, ktere´ jsou k dispozici v dokumentaci FlexiBee API [17]. Tyto sˇablony bylo nutne´ nejprve prˇeve´st pomocı´ na´stroje JAXB na Java trˇı´dy.[18]

Bohuzˇel poskytnute´ sˇablony obsahovaly velike´ mnozˇstvı´ nepotrˇebny´ch atributu˚ a sta´valy se neprˇehledny´mi. Bylo proto potrˇeba odstranit co nejvı´ce atributu˚, u ktery´ch jsem si byl jisty´, zˇe nebudou pouzˇity. Pro potrˇeby obnovenı´ umazany´ch atributu˚ a metod bylo vsˇe archivova´no.

Po vygenerova´nı´ trˇı´d jizˇ mohlo zacˇı´t testova´nı´ obousmeˇrne´ komunikace. Prozatı´m vsˇak komunikace probı´hala formou prˇijetı´ anebo odesla´nı´ jizˇ prˇipravene´ho objektu. Pro komplexneˇjsˇı´ formu komunikace bylo proto nutne´ postoupit k implementaci trˇı´dy „De- faultFlexibeeTranslator“.

publicProduct translateCenik(final Cenik cenik){

Assert.notNull(cenik) ;

Product product =newProduct();

if(isNoteEmpty(cenik.getEanKod().getValue())){

product.setCode(cenik.getEanKod().getValue());

}else{

product.setCode(cenik.getKod().getValue());

}

// cenik ma povinny atribut String nazev product.setName(cenik.getNazev().getValue());

// ...

}

Vy´pis 5: Uka´zkova´ metoda pro prˇeklad objektu˚

Pro otestova´nı´ prˇekladu objektu˚ byla vytvorˇena testovacı´ metoda. Po u´speˇsˇne´m otes- tova´nı´ se prˇesˇlo k dalsˇı´mu kroku a to prˇena´sˇenı´ prˇelozˇeny´ch dat do syste´mu FlexiBee

(27)

online. Pro samotnou komunikaci s REST API syste´mu FlexiBee online slouzˇı´ trˇı´da „Re- stTemplate“, ktera´ je obsazˇena ve Spring Frameworku. Klı´cˇove´ metody trˇı´dy „RestTem- plate“ jsou „getForObject“ a „exchange“.

• getForObject

Vyuzˇı´va´ se pro export dat ze syste´mu FlexiBee online. Pomocı´ metody GET zı´ska´va´

pozˇadovana´ data ze zadane´ URL adresy. Za´kladnı´ parametry jsou URL adresa (rˇeteˇzec) a na´vratovy´ typ.

• exchange Pro posı´la´nı´ jednotlivy´ch objektu˚ byla docˇasneˇ vytvorˇena testovacı´ me- toda. Je pouzˇı´va´na v metoda´ch pro import. Stejneˇ jako u prˇedchozı´ metody je prvnı´m parametrem URL adresa, da´le je nutne´ specifikovat HTTP metodu (pro import vzˇdy PUT), data pro odesla´nı´ a poslednı´ na´vratovy´ typ.

Opeˇt se vyuzˇilo testovacı´ metody, prˇicˇemzˇ samotny´ test probı´hal jak pro import, tak export. V prˇı´padeˇ exportu se pomocı´ metody „getForObject“ sta´hl libovolny´ za´znam entity „Adresar“ (FlexiBee online), ten se pak prˇelozˇil na entitu „Company“ (RAYNET Cloud CRM). U importu se naopak vytvorˇil testovacı´ objekt „Company“ manua´lneˇ, kdy se vyplnily jen povinne´ atributy. Tento objekt se pak prˇelozˇil metodou „translateCompany“

na objekt „Adresar“ a odeslal za pomocı´ metody „exchange“ do syste´mu FlexiBee online.

Jakmile byla komunikace odladeˇna, tak se vesˇkery´ ko´d z testovacı´ metody prˇenesl do trˇı´dy „DefaultFlexibeeIntegrator“, kde se pak doimplementovaly jednotlive´ metody pro vsˇechny za´jmove´ entity a oba smeˇry komunikace (import a export).

V dalsˇı´m kroku bylo nutne´ naimplementovat trˇı´du „FlexibeeExportWorker“, jejı´mzˇ u´kolem je export ze syste´mu FlexiBee online a import do syste´mu RAYNET Cloud CRM.

Kazˇda´ metoda v te´to trˇı´deˇ ma´ za u´kol exportovat z FlexiBee online pozˇadovana´ data, prˇelozˇit je na entitu z RAYNET Cloud CRM a pak naplnit objekt „EIDataObject“. Tento objekt je vyuzˇı´va´n i v MoneyS3 konektoru a jeho u´kolem je evidovat vsˇechny synchroni- zovane´ za´znamy (na´zev entity, identifika´tor za´znamu z Raynet Cloud CRM, identifika´tor z externı´ho syste´mu, cˇas importu a cˇas exportu). Obsah objektu „EIDataObject“ je pak ukla´da´n do databa´ze.

Prozatı´m byl export ve smeˇru z FlexiBee online do RAYNET Cloud CRM proveden jen pro za´kladnı´ atributy, a proto se prˇesˇlo k ladeˇnı´ a postupne´mu prˇida´va´nı´ atributu˚.

V prˇı´padeˇ tohoto smeˇru synchronizace stacˇila pouha´ u´prava metod v trˇı´deˇ „DefaultFle- xibeeTranslator“. Na´sledneˇ se z trˇı´dy „DefaultFlexibeeIntegrator“ odstranily konstanty, prˇedstavujı´cı´ URL adresu pro demo instanci FlexiBee online a byly nahrazeny za pro- meˇnne´, ktere´ majı´ hodnotu jezˇ nastavil uzˇivatel v nabı´dce nastavenı´.

V poslednı´ cˇa´sti byla doimplementova´na trˇı´da „FlexibeeImportWorker“, ktera´ za- jisˇt’uje komunikaci ve smeˇru z RAYNET Cloud CRM do FlexiBee online. Jednotlive´ metody pro import vsˇech za´jmovy´ch entit pracujı´ takrˇka stejneˇ jako v „FlexibeeExportWorker“.

U entity „ObjednavkaPrijata“ bylo nutne´ vyrˇesˇit proble´m, s vytvorˇenı´m skladove´

polozˇky. Nejprve se prˇijata´ objedna´vka prˇena´sˇela jen s volny´mi polozˇkami. V podstateˇ se jedna´ o rˇeteˇzce s na´zvy produktu˚. Cı´lem vsˇak bylo, aby se polozˇky prˇena´sˇely jako volne´ jen v prˇı´padeˇ, zˇe dosud nebyly synchronizova´ny z FlexiBee online do RAYNET Cloud CRM ve formeˇ produktu˚ (v syste´mu FlexiBee online se jedna´ o entitu „Cenik“). Dı´ky objektu

(28)

„EIDataObject“ bylo mozˇne´ zı´skat synchronizovane´ produkty a pak podle ID zjistit, zdali neˇktera´ z polozˇek v obchodnı´m prˇı´padu obsahuje jizˇ synchronizovany´ produkt. Pokud ano, tak polozˇka je prˇenesena jako skladova´, v opacˇne´m prˇı´padeˇ je volna´.

3.4.4 Trˇetı´ etapa vy´voje

Trˇetı´ etapa vy´voje zacˇala prezentacı´ aktua´lnı´ho stavu konektoru. Na te´to prezentaci byly prˇedvedeny vsˇechny funkce konektoru a byly prokonzultova´ny urcˇite´ neprˇesnosti ohledneˇ synchronizace sazby DPH. Za´rovenˇ prˇi diskuzi padl na´vrh na prˇida´nı´ novy´ch funkcı´, ktere´ by bylo vhodne´ doimplementovat.

3.4.4.1 Scha´zejı´cı´ funkce

• kategorizace firem podle typu vztahu v syste´mu FlexiBee online

• pokud dojde k smaza´nı´ synchronizovane´ho za´znamu, tak je nutne´ prove´st validaci a odstranit jej ze seznamu synchronizovany´ch za´znamu˚

• firmy by meˇly by´t pa´rova´ny i podle ICˇ

• doplneˇnı´ cˇı´sla obchodnı´ho prˇı´padu do pozna´mky za´znamu

Neˇktere´ ze scha´zejı´cı´ch funkcı´ jizˇ nebylo nutne´ od zacˇa´tku implementovat, protozˇe se daly pouzˇı´t z prˇedchozı´ho konektoru. Prˇı´kladem mu˚zˇe by´t kategorizace firem.

Proble´m s validacı´ a prˇı´padny´m odstraneˇnı´m evidence synchronizovane´ho za´znamu byl o neˇco slozˇiteˇjsˇı´ a zˇa´dal si potrˇebnou konzultaci. Po prodiskutova´nı´ vsˇech variant padla volba na spousˇteˇnı´ validace po kliknutı´ na prˇı´slusˇne´ tlacˇı´tko. Tato operace si v prˇı´padeˇ veˇtsˇı´ho mnozˇstvı´ synchronizovany´ch za´znamu˚ vyzˇa´da´ vı´ce cˇasu, a proto ji nenı´

mozˇne´ spousˇteˇt prˇi kazˇde´ synchronizaci anebo spusˇteˇnı´ aplikace.

(29)

Obra´zek 5: Kontrola synchronizovany´ch za´znamu˚

Diagram definuje rˇesˇenı´ vy´sˇe popisovane´ho proble´mu. Na´vrh architektury je vy- tvorˇen takovy´m zpu˚sobem, aby bylo mozˇne´ v budoucnu prˇida´vat dalsˇı´ syste´my, ktere´

budou podle´hat kontrole synchronizovany´ch za´znamu˚. Nenı´ proto nutne´ vymy´sˇlet nove´

rˇesˇenı´, ale stacˇı´ pouze implementovat rozhranı´ „ExternalSystemCompanyChecker“ pro jiny´ syste´m.

Pa´rova´nı´ firem podle ICˇ bylo vyrˇesˇeno jednoduchou u´pravou v ko´du, kde se roz- hoduje, zda je za´znam jizˇ synchronizova´n a provede se operace update anebo insert. V prˇı´padeˇ, zˇe je nalezeno ID za´znamu, tak je povazˇova´n za synchronizovany´ a provede se update, nynı´ se kontroluje prˇednostneˇ ICˇ za´znamu a na´sledneˇ ID.

Doplneˇnı´ cˇı´sla obchodnı´ho prˇı´padu do pozna´mky synchronizovane´ho za´znamu jizˇ bylo formalitou, kde se pouze nastavila hodnota jedne´ promeˇnne´.

Po otestova´nı´ bylo nutne´ prove´st revizi ko´du. Pro tyto u´cˇely slouzˇı´ CI server Jenkins [19], ktery´ umozˇnˇuje kontinua´lnı´ integraci a obsahuje na´stroje prova´deˇjı´cı´ kontrolu ko´du.

Vesˇkere´ chyby a varova´nı´ byly prokonzultova´ny s kolegou, ktery´ vyvı´jel prˇedchozı´ ko- nektor. Jakmile byly tyto nedostatky opraveny, tak byl konektor prohla´sˇen za dokoncˇeny´.

3.5 Vyja´drˇenı´ cˇasove´ na´rocˇnosti u´ kolu˚

V te´to sekci uva´dı´m tabulku vyjadrˇujı´cı´ cˇasovou na´rocˇnost zadany´ch u´kolu˚ v pru˚beˇhu praxe. Kazˇdy´ za´znam prˇedstavuje dobu stra´venou implementacı´, studiem mozˇnostı´

rˇesˇenı´ a konzultace.

(30)

Pocˇet dnı´

Drobne´ u´koly (plneˇnı´ webovy´ch prezentacı´ obsahem, graficke´ u´pravy) 16

Testova´nı´ RAYNET Cloud CRM 14

FlexiBee konektor 29

Celkem 59

Tabulka 3: Rozdeˇlenı´ pra´ce v pru˚beˇhu praxe

V tabulce nenı´ zna´zorneˇno rozdeˇlenı´ praxe na dveˇ cˇa´sti. Prvnı´ dva rˇa´dky prˇedstavujı´

cˇa´st praxe zameˇrˇenou na ru˚znorodou cˇinnost a druha´ polovina je veˇnova´na pra´ci na FlexiBee konektoru. Je zrˇejme´, zˇe tato cˇa´st zabrala nejveˇtsˇı´ cˇa´st z celkove´ho pocˇtu od- pracovany´ch dnu˚. Na obra´zku nı´zˇe je graf vygenerovany´ pomocı´ GIT Extensions, kde je zobrazena cˇetnost „commitu˚“ serˇazena´ podle autora. Vy´secˇ, ktera´ prˇedstavuje me´ com- mity ma´ zˇlutou barvu.

Obra´zek 6: Statistika operacı´ commit

(31)

4 Teoreticke´ a prakticke´ znalosti zı´skane´ v pru ˚ beˇhu studia a uplatneˇnı´ v pru ˚ beˇhu praxe

V pru˚beˇhu odborne´ praxe jsem vyuzˇil mnoho znalostı´, ktere´ jsem nabyl za dobu baka- la´rˇske´ho studia. Prvnı´ cˇa´st byla zameˇrˇena hlavneˇ na vy´voj a pra´ci s weby. V te´to cˇa´sti jsem aplikoval znalosti z prˇedmeˇtu˚ Za´klady Programova´nı´ a Vy´voj Internetovy´ch aplikacı´.

Tyto prˇedmeˇty se zaby´vajı´ cˇinnostmi, ktere´ jsem v te´to cˇa´sti mohl aplikovat. Jedna´ se zejme´na o HTML, CSS a PHP.

Dalsˇı´ cˇa´st praxe a cˇa´stecˇneˇ i prvnı´ cˇa´st byla zameˇrˇena na samostatny´ vy´voj nove´ho projektu. Tato cˇa´st byla pro mne vı´ce zajı´mava´ z du˚vodu, zˇe samotny´ vy´voj probı´hal zejme´na v jazyce Java, ktere´mu bych se chteˇl nada´le veˇnovat. Tı´mto programovacı´m jazykem se zaby´vajı´ prˇedmeˇtyProgramovacı´ Jazyky 1,Java Technologiea cˇa´stecˇneˇUzˇivatelske´

rozhranı´. Znalosti z teˇchto prˇedmeˇtu˚ jsem hojneˇ vyuzˇı´val. Dı´ky tomu, zˇe praxe probı´hala ve stejne´m semestru jako prˇedmeˇtJava Technologie, meˇl jsem mozˇnost doplnˇovat teoreticke´

znalosti zı´skane´ ze sˇkoly o ty prakticke´ z praxe.

(32)

5 Znalosti a schopnosti chybeˇjı´cı´ v pru ˚ beˇhu odborne´ praxe

Prˇi rˇesˇenı´ mnoha u´kolu˚ jsem aplikoval spoustu jizˇ existujı´cı´ch znalostı´, vyskytovaly se vsˇak i prˇı´pady, kdy byla potrˇeba urcˇita´ znalost, kterou jsem bohuzˇel nemeˇl. Zejme´na sˇlo o schopnosti, ktere´ je mozˇne´ zı´skat zpravidla pouze praxı´. Naprˇı´klad orientace ve velke´m projektu. Neˇkolikra´t jsem musel prova´deˇt u´pravy v existujı´cı´m konektoru pro MoneyS3 a v kombinaci s ne zcela dokonalou znalostı´ vy´vojove´ho na´stroje Eclipse jsem meˇl pro- ble´my, ktere´ zpu˚sobovaly mensˇı´ efektivitu pra´ce a prodlouzˇenı´ vy´voje. Tyto proble´my se nevyskytovaly jen v pru˚beˇhu vy´voje, ale take´ i prˇi testova´nı´, kdy jsem meˇl nale´zt v projektu ko´d, ktery´ se spousˇtı´ prˇi urcˇite´ akci.

Ve firmeˇ se pouzˇı´vajı´ jiste´ konvence pro psanı´ cˇiste´ho ko´du, neˇktere´ z nich jsou po- psa´ny na internı´m webu „Wiki“. Naprˇı´klad nenı´ doporucˇeno meˇnit hodnotu parametru metody, pro prˇı´pady kde je to nutne´, je lepsˇı´ vytvorˇit samostatnou promeˇnnou. Dalsˇı´m doporucˇenı´m je psa´t kra´tke´ metody a prˇı´lisˇ neveˇtvit ko´d, aby hodnota cyklomaticke´

komplexity [20] nebyla vysˇsˇı´ jak 10. Cyklomaticka´ komplexita uda´va´ slozˇitost programu.

Jedna´ se o cˇı´slo, ktere´ uda´va´ pocˇet mozˇny´ch cest projitı´ aktua´lnı´m ko´dem. Hodnota cyk- lomaticke´ komplexity roste s veˇtvenı´m ko´du (podmı´nka IF, cyklus FOR, atd.). Veˇtsˇina teˇchto doporucˇenı´ je na´sledneˇ kontrolova´na CI serverem Jenkins.

V pru˚beˇhu vy´voje je nutne´ sledovat ru˚zne´ provedene´ zmeˇny ve vyvı´jene´m projektu.

Pro tyto u´cˇely se pouzˇı´vajı´ na´stroje pro spra´vu revizı´. Ve spolecˇnosti RAYNET s.r.o. se pouzˇı´va´ na´stroj GIT. Veˇtsˇina vy´voja´rˇu˚ jej pouzˇı´va´ pomocı´ prˇı´kazu˚ v termina´lu, ja´ vsˇak zvolil variantu s graficky´m rozhranı´m GIT Extensions [8]. Prˇestozˇe graficka´ verze byla pro meˇ vı´ce uzˇivatelsky prˇı´veˇtiva´, tak mi scha´zely teoreticke´ znalosti pro spra´vu veˇtvı´.

Ze zacˇa´tku jsem meˇl proble´my se slucˇova´nı´m veˇtvı´, rˇesˇenı´m konfliktu˚ a pojmenova´va´nı´

commitu˚ podle internı´ch konvencı´.

V prvnı´ cˇa´sti praxe jsem se u´cˇastnil na testova´nı´ tehdy vyvı´jene´ verze RAYNET Cloud CRM. Nejprve jsem prova´deˇl testova´nı´ ru˚zny´ch modulu˚, zda nenastane chyba. Postupneˇ jsem zapisoval do sdı´lene´ho dokumentu chybove´ hla´sˇky. Jakmile bylo dotestova´no, tak prˇisˇlo na rˇadu psanı´ testu˚. Tyto testy byly psa´ny v jazyce SCALA [11] . Bohuzˇel s tı´mto jazykem jsem se prˇed praxı´ jesˇteˇ nesetkal, a proto jsem musel nastudovat jeho za´klady.

(33)

6 Dosazˇene´ vy´sledky v pru ˚ beˇhu odborne´ praxe a jejı´ celkove´

zhodnocenı´

V pru˚beˇhu odborne´ praxe jsem absolvoval mnoho u´kolu˚, pu˚sobil jsem na vı´ce pozicı´ch.

Prakticky jsem si vyzkousˇel vsˇechny cˇinnosti ty´kajı´cı´ se vy´roby, ktery´mi se RAYNET s.r.o.

zaby´va´. U vsˇech u´kolu˚ jsem zı´ska´val od vedoucı´ch kolegu˚ zpeˇtnou vazbu, cozˇ bylo pro mne velice prˇı´nosne´ a mohl jsem se poucˇit z my´ch vlastnı´ch chyb.

Kazˇdy´ ty´den jsem se u´cˇastnil Sprint meetingu˚, tedy porad, kdy se pla´nuje pra´ce a projektovy´ manazˇer zı´ska´va´ od programa´toru˚ zpeˇtnou vazbu prˇi plneˇnı´ jednotlivy´ch u´kolu˚. Poznal jsem tak nejen programa´torskou praxi, ale i manazˇerskou, kdy jsem sledoval pla´nova´nı´ pra´ce na kazˇdy´ ty´den.

Celkoveˇ praxi hodnotı´m velmi pozitivneˇ. Zı´skal jsem tak mnoho novy´ch zkusˇenostı´, ktere´ mi nejen poma´haly v pru˚beˇhu absolvova´nı´ semestru, ale take´ pevneˇ veˇrˇı´m, zˇe mi zı´skana´ praxe bude prˇı´nosem pro mu˚j budoucı´ profesnı´ zˇivot.

(34)

7 Reference

[1] RAYNET S.R.O. O spolecˇnosti [Online]. [citova´no 08-04-2013]. Dostupne´ z:

http://raynet.cz/o-spolecnosti-raynet.html.

[2] RAYNET S.R.O. Prestizˇnı´ oceneˇnı´ [Online]. [citova´no 08-04-2013]. Dostupne´ z:

http://raynet.cz/prestizni-oceneni.html

[3] RAYNET S.R.O. Bezpecˇnost RAYNET CRM, ochrana dat [Online]. [citova´no 08-04- 2013]. Dostupne´ z: http://raynet.cz/ochrana-udaju-bezpecnost-crm.html

[4] MASARYKOVA UNIVERZITA U´ STAV VY´POCˇETNI´ TECHNIKYSCRUM[online].

[citova´no 08-04-2013]. Dostupne´ z: http://www.muni.cz/ics/925600/web/scrum [5] WIKIPEDIA: THE FREE ENCYCLOPEDIAGit[online]. 2008 [citova´no 08-04-2013].

Dostupne´ z: http://cs.wikipedia.org/wiki/Git

[6] CHACON, Scott.Pro Git. Praha: CZ.NIC, c2009, 263 s. CZ.NIC. ISBN 978-80-904248- 1-4.

[7] VONDRA, Toma´sˇ.GIT: Uzˇivatelska´ prˇı´rucˇka[online]. 2009 [cit. 2013-04-30]. Dostupne´

z: http://www.fuzzy.cz/cs/projekty/git-uzivatelska-prirucka/

[8] Git Extensions [online]. 2008 [cit. 2013-04-30]. Dostupne´ z:

http://gitextensions.sourceforge.net/

[9] SEO: Optimalizace pro vyhleda´vacˇe [online]. [cit. 2013-04-30]. Dostupne´ z:

http://www.tvorba-webu.cz/seo/

[10] WIKIPEDIA: THE FREE ENCYCLOPEDIA. JUnit [online]. 2001 [cit. 2013-04-30].

Dostupne´ z: http://en.wikipedia.org/wiki/JUnit

[11] WIKIPEDIA: THE FREE ENCYCLOPEDIA. Scala (progra-

movacı´ jazyk) [online]. 2009 [cit. 2013-04-30]. Dostupne´ z:

http://cs.wikipedia.org/wiki/Scala (programovac%C3%AD jazyk)

[12] FLEXIBEE SYSTEMS S.R.O. O spolecˇnosti [online]. [cit. 2013-04-30]. Dostupne´ z:

http://www.flexibee.eu/firma/o-nas/

[13] FLEXIBEE SYSTEMS S.R.O. FlexiBee online [online]. [cit. 2013-04-30]. Dostupne´ z:

http://www.flexibee.eu/online/

[14] WIKIPEDIA: THE FREE ENCYCLOPEDIA.Swing (Java)[online]. 2009 [cit. 2013-04- 30]. Dostupne´ z: http://cs.wikipedia.org/wiki/Swing (Java)

[15] WIKIPEDIA: THE FREE ENCYCLOPEDIA. Spring Framework [online]. 2010 [cit.

2013-04-30]. Dostupne´ z: http://cs.wikipedia.org/wiki/Spring Framework

(35)

[16] JOHNSON, Rod, Juergen HOELLER, Alef ARENDSEN, Colin SAMPALE- ANU, Rob HARROP, Thomas RISBERG, Darren DAVISON, Dmitriy KO- PYLENKO, Mark POLLACK, Thierry TEMPLIER, Erwin VERVAET, Por- tia TUNG, Ben HALE, Adrian COLYER, John LEWIS, Costin LEAU, Mark FISHER, Sam BRANNEN, Ramnivas LADDAD. The Spring Fra- mework: Reference Documentation [online]. [cit. 2013-04-30]. Dostupne´ z:

http://static.springsource.org/spring/docs/2.5.3/reference/index.html

[17] FLEXIBEE SYSTEMS S.R.O.API: Pro vy´voja´rˇe[online]. [cit. 2013-04-30]. Dostupne´ z:

http://www.flexibee.eu/api/

[18] ORACLE CORPORATION.JAXB: Reference Implementation[online]. 2003 [cit. 2013- 04-30]. Dostupne´ z: https://jaxb.java.net/

[19] Kontinua´lnı´ integrace s Jenkins CI [online]. [cit. 2013-04-30]. Dostupne´ z:

http://www.abclinuxu.cz/blog/lojzoviny/2011/7/kontinualni-integrace-s- jenkins-ci

[20] WIKIPEDIA: THE FREE ENCYCLOPEDIA. Cykloma-

ticka´ slozˇitost [online]. 2010 [cit. 2013-04-30]. Dostupne´ z:

http://cs.wikipedia.org/wiki/Cyklomatick%C3%A1 slo%C5%BEitost

[21] WIKIPEDIA: THE FREE ENCYCLOPEDIA.Zend Framework[online]. 2007 [cit. 2013- 04-30]. Dostupne´ z: http://cs.wikipedia.org/wiki/Zend Framework

(36)

A Obrazove´ uka´zky FlexiBee konektoru

V te´to sekci jsou uvedeny obra´zky, jezˇ jsou prˇı´lisˇ velke´ a nejsou proto uvedeny v samotne´m textu bakala´rˇske´ pra´ce.

(37)

Obra´zek 7: U´ vodnı´ obrazovka s prˇihla´sˇenı´m

(38)

Obra´zek 8: Nastavenı´ aplikace

(39)

Obra´zek 9: Vy´pis vsˇech spolecˇnostı´ z FlexiBee online

(40)

Obra´zek 10: Dialogove´ okno se specifikacı´ filtru

(41)

Obra´zek 11: Specifikace vlastnı´ka za´znamu prˇed importem

(42)

Obra´zek 12: Seznam vsˇech importovany´ch za´znamu˚

(43)

B Prˇı´loha na CD

Slozˇka Obsah

bakalarska prace Bakala´rˇska´ pra´ce v elektronicke´ podobeˇ (fry0019.pdf) priloha img Snı´mky FlexiBee konektoru

Odkazy

Související dokumenty

Tyto testy byly mezi vy´voja´rˇi velmi neoblı´benou cˇinnostı´, pro mne vsˇak prˇedstavovaly mozˇnost naprogramova´ni si vlastnı´ho ko´du, z cˇehozˇ jsem meˇl

Cı´lem te´to pra´ce bylo vytvorˇit rozsˇirˇujı´cı´ aplikaci pro Microsoft Office Word 2007, ktera´. by usnadnˇovala pra´ci prˇi

Hlavnı´ cˇa´st pra´ce popisuje nejdu˚lezˇiteˇjsˇı´ rysy frameworku ExtJS a jeho rozsˇı´rˇenı´, ktere´ bylo vytvorˇeno za u´cˇelem zjednodusˇenı´ vy´voje

U poslednı´ho u´kolu, kde jsem zobrazoval 3D model vy´robku v Silverlight, jsem vyuzˇil toho, zˇe jsem meˇl mozˇnost v Silverlighu jizˇ drˇı´ve pracovat. Bohuzˇel

Jako svu˚j prvnı´ u´kol jsem dostal vytvorˇenı´ aplikace, ktera´ slouzˇı´ pro nasazenı´ na termina´ly s dotykovou obrazovkou.. Karta vytvorˇena´ tı´mto

S programova´nı´m v Ruby jsem uzˇ zkusˇenosti meˇl, avsˇak s Ruby on Rails jsem se musel nejdrˇı´ve sezna´mit.. Zezacˇa´tku pro meˇ bylo obtı´zˇne´ pracovat s

S prvnı´mi zmeˇnami jsem se setkal jizˇ prˇi pocˇa´tecˇnı´ch na´vrzı´ch datove´ struktury, kdy bylo nutne´ prove´st neˇkolik desı´tek ru˚zny´ch modifikacı´, cozˇ

Spolecˇneˇ se zada´nı´m jsem dostal i prˇı´klad dynamicke´ masky ulozˇenou ve forma´tu XML, protozˇe jsem se beˇhem studia se slozˇiteˇjsˇı´mi XML soubory nesetkal a