• Nebyly nalezeny žádné výsledky

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.

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

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”>

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

• 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ı´.

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

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”>

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

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“.

• 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

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

„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.

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´.