129
SVEUČILIŠTE U SPLITU FAKULTET ELEKTROTEHNIKE, STROJARSTVA I BRODOGRADNJE DIPLOMSKI RAD INFORMATIZACIJA HACCP STANDARDA PRIMJENOM SOA RJEŠENJA Jurica Grgičević

SAŽETAK - bib.irb.hrbib.irb.hr/datoteka/530373.Dipl_2010_2011_Grgievi-J_HACCP_v3.6.docx  · Web viewSažetak. Sustavi kontrole kvalitete su danas postali važan dio svake organizacije

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

SVEUČILIŠTE U SPLITUFAKULTET ELEKTROTEHNIKE, STROJARSTVA I

BRODOGRADNJE

DIPLOMSKI RAD

INFORMATIZACIJA HACCP STANDARDA PRIMJENOM SOA RJEŠENJA

Jurica Grgičević

Split, rujan 2011.

KAZALO

1 SAŽETAK...........................................................................................................................4

2 UVOD..................................................................................................................................5

3 KONTROLA KVALITETE PROIZVODA........................................................................6

3.1 Sustavi Upravljanja Kvalitetom i ISO 9001.................................................................6

3.2 HACCP.........................................................................................................................8

3.2.1 HACCP načela......................................................................................................9

3.3 ISO 9001 i HACCP u PPK-a......................................................................................10

4 .NET..................................................................................................................................13

4.1 .NET razvojna okolina...............................................................................................13

4.1.1 Verzije .NET-a....................................................................................................15

4.1.2 .NET 4.0..............................................................................................................16

4.1.3 Windows Comunication Foundation..................................................................17

4.1.4 Windows Presentation Foundation.....................................................................26

4.1.5 ADO.NET Entity Framework.............................................................................30

4.1.6 Managed Extensibility Framework.....................................................................36

4.1.7 Prevođenje i CIL.................................................................................................42

4.2 Programski jezik C#...................................................................................................43

5 ARHITEKTURA ORIJENTIRANA SERVISIMA – SOA..............................................45

5.1 Uvod...........................................................................................................................45

5.2 Model arhitekture orijentirane servisima...................................................................48

5.2.1 Tipovi XML servisa............................................................................................50

6 QUALITY CONTROL SOFTWARE...............................................................................51

6.1 Baza podataka............................................................................................................51

6.2 Server.........................................................................................................................55

6.3 Klijent.........................................................................................................................63

6.4 Moduli........................................................................................................................74

2

6.4.1 Modul Organizacija............................................................................................74

6.4.2 Modul Korisnici..................................................................................................74

6.4.3 Modul HACCP....................................................................................................75

6.4.4 Modul Obrasci....................................................................................................75

7 ZAKLJUČAK....................................................................................................................76

8 LITERATURA..................................................................................................................77

9 PRILOZI............................................................................................................................80

9.1 Kazalo slika i tablica..................................................................................................80

9.1.1 Kazalo slika.........................................................................................................80

9.1.2 Kazalo tablica......................................................................................................80

9.2 Popis oznaka i kratica.................................................................................................81

9.3 Ostali prilozi i dodaci.................................................................................................83

9.3.1 Prilog 1. Shema Baze..........................................................................................83

9.3.2 Prilog 2. Osobna evidencija................................................................................84

9.3.3 Specifikacija Zahtjeva.........................................................................................85

9.3.4 Plan Projekta.......................................................................................................86

9.3.5 Pivis Zapisnici.....................................................................................................87

9.3.6 Upravljanje izmjenama.......................................................................................89

3

1 SAŽETAK

Sažetak

Sustavi kontrole kvalitete su danas postali važan dio svake organizacije koja se bavi

proizvodnjom i preradom hrane. Set standarda ISO daje niz uputa i preporuka za

implementaciju kontrole kvalitete. Njihov najpopularniji i najrašireniji standard za kontrolu

kvalitete je ISO 9001 standard. Dio ISO 9001 standarda zaduženog za sigurnost hrane

bazirane na prevenciji je HACCP standard (Hazard Analysis and Critical Control Point). U

okviru ove radnje razvijeno je rješenje za digitalizaciju ISO 9001 i HACCP sustava za

potrebe Mesne industrije PPK Karlovac. U prvom dijelu radnje opisan je sustav kontrole

kvalitete u PPK Karlovac. U drugom dijelu radnje opisane su Microsoftove tehnologije koje

su se koristile za izradu aplikacije. To su redom .NET tehnologije: WCF, WPF, Entity

Framework, MSSQL Server. Posljednji dio radnje opisuje arhitekturu aplikacije. Aplikacija

je napravljena kao SOA aplikacija. To znači da se sastoji od serverskog i klijentskog dijela.

Serverski dio ima zadaću da upravlja bazom podataka i poslužuje klijenta sa podacima.

Klijent omogućava interakciju korisnika sa sustavom. Napravljen je tako da može primati

dodatke (eng. plugin). Aplikacija ima četiri dodatka: Organizacija, Korisnici, HACCP i

obrasci. Organizacija i korisnici omogućavaju dodavanje, brisanje i ažuriranje korisnika

sustava i organizacija. HACCP dodatak omogućava analizu opasnosti i izradu HACCP

plana. Dodatak Obrasci sadrži digitalne verzije postojećih papirnatih obrazaca.

Ključne riječi

Kontrola kvalitete, ISO 9001, HACCP, .NET, WCF, WPF, Entity Framework, Quality Control

Software

4

2 UVOD

Danas, bilo koja organizacija, koja se bavi proizvodnjom hrane, ako sebe želi nazvati

imalo ozbiljnom, mora imati uveden neki od sustava za kontrolu kvalitete. Najčešće je to ISO

9001. Dio ISO-a 9001 koji se bavi sigurnošću hrane je HACCP. HACCP sustav, danas, je

postao zakonska obveza svih onih koji se bave proizvodnjom i preradom hrane.

Na hrvatskom tržištu, većinom se nude usluge savjetovanja u implementaciji HACCP

sustava. No polako pojavljuju se programska rješenja koja bi trebala pomoći pri bržoj

implementaciji HACCP sustava naspram načinu na koji se do sada koristio za uvođenje

HACCP sustava. Dosadašnji pristup rezultirao bi velikom količinom dokumenata, koji bi

stvarali dodatan posao radnicima organizacije koja uvodi HACCP. Zbog toga se postepeno

prelazi na programska rješenja u uvođenju HACCP sustav jer bi ona pomoću jednostavnog

sučelja trebala olakšati rad, a ne dodatno ga zakomplicirati. Na svjetskom tržištu postoji dosta

programskih rješenja koji imaju manje više iste funkcionalnosti. Neka od riješenja su:

ISOsystemPlus, Qsolve, ISO 22000:2005-HACCP, HACCP Manager Software, justfoodERP

Dok stanje na hrvatskom tržištu je drugačije. Postoje jedan, dva programska paketa.

Zbog toga mnoge organizacije uvode svoja programska rješenja. Pa tako i tema ovog rada

je napraviti programsko rješenje HACCP sustava prilagođeno za mesnu industriju PPK, na

temelju odluke uprave koja je ustanovila da niti jedno riješenje ne zadovljava njene potrebe.

Cilj ovog rada je upoznati se s principima HACCP standarda. O čemu će biti riječi u poglavlju

Kontrola kvalitete proizvoda Poglavlje .NET dat će kratak uvid o Microsoftovim

tehnologijama koje su se koristile prilikom izrade rada. To su redom WCF, WPF, Entity radna

okolina, MEF i C#. Navedeno je mnogo čudnih kratica, njihovo značenje bit će jasnije nakon

što se pročita to poglavlje. Razumijevanje ovih tehnologija je bitno kako bi se moglo lakše

razumjeti aplikacija. Poglavlje o arhitekturi orijentiranoj servisima ukratko će objasniti

osnovne principe dizajniranja ovakvih aplikacija. Ovo je važno jer je aplikacija dizajnirana na

ovakvom principu. I na kraju poglavlje Quality Control Software detaljno opisuje dizajn

aplikacije. Počevši od baze, gdje su opisane njezine tablice i model koji se krije iza nje.

Nakon baze opisana je serverska strana aplikacije, njene operacije i klase. Te na kraju je

opisan klijent, logika koja se krije iza njega i njegovi moduli.

5

3 KONTROLA KVALITETE PROIZVODA

3.1 Sustavi Upravljanja Kvalitetom i ISO 9001

Prije nego započne priča o sustavima za kontrolu kvalitete, potrebno je definirati što je

to kvaliteta. Jedna od definicija kvalitete je: subjektivni doživljaj kupca kroz dizajn proizvoda

i način na koji sam dizajn odražava originalnost proizvoda mogućnost da određeni proizvod

ili usluga ispuni svoju svrhu usklađenost sa propisima tvrtke.

Quality Management System (QMS ) tj. Sustav Upravljanja Kvalitetom (SUK ) je

tehnika upravljanja koja se koristi za definiranje (komuniciranje) sa zaposlenima o onome što

je potrebno za izradu željene kvalitete proizvoda i usluga, time se utječe na djelatnike da

ispune svoju zadaću prema očekivanom standardu kvalitete.

Osnovni elementi sustava upravljanja kvalitetom su: Osiguranje kvalitete, Osoblje,

Prostori i oprema, Dokumentacija, Proizvodnja, Kontrola kvalitete, Ugovorna proizvodnja i

analiza, Reklamacije i povlačenje proizvoda i Samoinspekcije.

Upravljanje kvalitetom je ključni element uspješnosti poslovanja, a osigurava se putem

sustava temeljenog na poznatim svjetskim standardima (EN-29000, ISO 9000, GMP, BS-

5750). Primjenom sustava osiguranja kvalitete dokazuje se kvaliteta poslovanja, smanjuju se

troškovi, stječe poslovna vjerodostojnost. Zadnjih godina to je postalo pravilo kako u svijetu

tako i u Hrvatskoj. [20]

ISO 9000 je oznaka međunarodne norme za certificiranje sustava upravljanja

kvalitetom. Niže navedeni niz norma ISO 9000, razvijen je kako bi se pomoglo

organizacijama svih vrsta i veličina da djelotvorno primjenjuju i provode učinkovite sustave

upravljanja kvalitetom. Niz normi koje obuhvaća ISO 9000 su: ISO 9000, ISO 9001, ISO

9004 i ISO 19011.

Sublimirani zahtjevi norme ISO 9001 traže da organizacija predodređuje svoj rad

(djelatnost) zadovoljenju kupaca i posredno ostalih zainteresiranih strana, da djelotvorno i

učinkovito upravlja svojim procesima i nadzire njihovo odvijanje, što izravno uzrokuje porast

kvalitete proizvoda (roba/usluga), smanjuje troškove i time ekonomizira procese.

U normi HRN EN ISO 9001 Sustavi upravljanja kvalitetom navodi se da (Područje

primjene) određuje zahtjeve sustava upravljanja kvalitetom u slučajevima kad organizacija:

6

a) treba dokazati svoju sposobnost dosljednog dobavljanja proizvoda koji ispunjava

zahtjeve kupca i zahtjeve zakona i propisa, te

b) namjerava povećati zadovoljstvo kupca učinkovitom primjenom sustava, uključujući

procese za stalno poboljšavanje sustava i osiguravanje sukladnosti sa zahtjevima

kupca, kao i zahtjeva zakona i propisa.

Uvođenje Norme je strateška odluka iza koje mora stajati vrh upravljačke strukture

organizacije, od kojeg se očekuje da podupire i oslanja se na sustav upravljanja kvalitetom.

Štoviše, to je osnovni uvjet da bi se sustav mogao početi uvoditi i funkcionirati u budućnosti.

ISO 9001 zahtijeva nadzor nad poslovnim procesima u organizaciji:

Definiranjem procesa (ulaz i izlaz procesa/povratna sprega, izvršitelji, odgovorne

osobe, vlasnici procesa, tijek procesa itd)

Izražavanjem i određivanjem ciljeva mjerljivim pokazateljima

Mjerenjem i analizom procesa tim pokazateljima izvedbe (odvijanja) procesa

Analizom pokazatelja i na osnovu toga izvještavanjem o uspješnosti procesa

Stalnim i kontinuiranim poboljšanjima procesa

U Normi se ističe da promiče procesni pristup, na samo u modeliranju, upravljanju i

nadzoru poslovnih procesa, već kao osnova za cjelokupno građenje i funkcioniranje

organizacije. Jedna od glavnih odredbi procesnog pristupa je stalno, kontinuirano i neprekidno

poboljšanje poslovnih procesa, odnosno cjelokupnog sustava upravljanja kvalitetom.

Ispunjavanjem tog zahtjeva ne vrši se samo poboljšanje sustava, već se omogućuje njegovo

funkcioniranje, normalno vršenje djelatnosti u svim procesima organizacije.

Ispunjavanje zahtjeva uvedene norme (ili više njih) u organizaciji se provjerava ocjenama

sustava, auditima. Auditi se dijele na unutarnje (interne) i vanjske (eksterne), odnosno

certifikacijske, nadzorne i recertifikacijske. Njima se provjerava, odnosno utvrđuje

usklađenost sustava sa zahtjevima norme. Svako veće odstupanje definira se kao

nesukladnost, koja se nužno mora otkloniti unutar određenog vremenskog roka.

Suvremeno poslovanje u današnjici podrazumijeva da organizacija ima uveden ISO 9001 i

to se predstavlja kao jedan od osnovnih uvjeta za bilo kakvu poslovnu suradnju. Prema

7

podacima organizacija koje se bave ISO sustavom, ISO 9001 je u čitavom svijetu najčešće

uvođena norma. [21]

3.2 HACCP

HACCP je sinonim upravljanja sigurnošću hrane. To je sustav koji identificira,

procjenjuje i kontrolira opasnosti koje su značajne za sigurnost hrane. Poanta je osigurati

sigurnost proizvoda, odnosno spriječiti da proizvod na bilo koji način uzrokuje štetu kod

potrošača. [22]

Izvorno je razvijen kao sustav mikrobiološke ispravnosti u ranim danima 1960-tih

godina od strane tvrtke Pillsbury, NASA-e i Američke vojske. Koristili su ga astronauti za

vrijeme svemirskih ekspedicija. [24]

Dvije riječi, dvije ključne stavke koje predstavljaju HACCP su analiza opasnosti

(hazard analysis) i kritične kontrolne točke (critical control points). Opasnost, kako se koristi

u HACCP sustavu se definira kao biološka, kemijska ili fizička opasnost, koje vidimo kao

potencijalnu prijetnju ljudskom zdravlju. Kritična kontrolna točka je korak u kojem se

primjenjuje kontrola za sprječavanje ili uklanjanje opasnosti za sigurnost hrane, odnosno

smanjenje opasnosti na prihvatljivu razinu. Načelo HACCP-a je sigurnost hrane tijekom

proizvodnje, a ne nakon što imamo gotov proizvod. Cilj je, dakle spriječiti opasnosti u

najranijoj mogućoj točki u lancu hrane, što znači da se može primijeniti od samog procesa

uzgoja životinja do točke potrošnje. Njegova primjena može zahtijevati temeljitu promjenu u

kulturi ili promjenu stavova ljudi uključenih u preradu hrane. U mnogim industrijama ne

postoji tradicija pisanih procedura, odnosno proceduralnih priručnika, te evidencije o kvaliteti

i sigurnosti. HACCP zahtijeva temeljne promjene u stavovima, fokusiran je na vođenje

evidencije i dokumentacije. Slično tome, oni koji pokušavaju implementirati HACCP mogu

teško prihvatiti koncept rizika kontrole sigurnosti hrane, osobito ako su naviknuti na kontrole

koje se temelje na unaprijed određenim parametrima ustanovljenim na vlastitim iskustvima.

Veoma je važno da svi ljudi koji rade u poduzeću razumiju HACCP sustav. Usvajanje

osnovnih znanja o HACCP-u, samo da bi se zadovoljili zahtjevi tvrtke može dovesti do

neuspjeha kompanije. [22]

U početku se HACCP sastojao od tri načela (načela 1,2 i 4 u sljedećem poglavlju).

Pillsbury zatim dodaje iduća dva načela (načela 3 i 5). HACCP sustav sa navedenih pet načela

standardiziran je 1992. Preostala dva načela su dodana 1997 i za sada HACCP sustav se

8

sastoji od tih sedam načela. Godine 2004 je bila zadnja revizija HACCP sustava, ali navedena

načela se nisu mijenjali. [24

HACCP nije nezavisan program, već je dio većeg sustava kontrole, koji uključuje i

provođenje univerzalnih procedura koje se primjenjuju za kontrolu općih uvjeta i okruženja

proizvodnje i doprinose sigurnosti proizvoda. Programi koji trebaju biti usvojeni,

implementirani i dokumentirani su GMP, dobra proizvođačka praksa, SOP – standardne

operativne procedure i SSOP – standardne operativne procedure higijene.

Počevši od 01. siječnja 2006. godine standardi sigurne hrane, u prvom redu HACCP,

obavezni su na tržištima EU i Svjetske trgovinske organizacije, a tvrtke koje ne budu

posjedovale certifikate o poslovanju u skladu sa ovim standardima neće biti u mogućnosti

svoju robu plasirati na spomenuta tržišta. [25]

3.2.1 HACCP načela

HACCP sustav se sastoji od sedam načela, koje opisuju kako uspostaviti

implementaciju i održavanje HACCP plana za određenu operaciju tijekom proučavanja.

Načelo 1

Provesti analizu opasnosti. Odrediti potencijalne opasnosti povezane sa svim fazama

proizvodnje, koristeći dijagram toka na kojem su prikazani koraci procesa. Procijeniti

vjerojatnost nastanka opasnosti, i identificirati preventivne mjere za njihovo suzbijanje.

Načelo 2

Potrebno je utvrditi koje su kritične kontrolne točke (u daljnjem tekstu CCP). Nakon toga,

trebaju se napisati postupci i operativni koraci koji se mogu kontrolirati kako bi se uklonile

opasnosti, ili smanjila vjerojatnost nastanka, odnosno smanjenje opasnosti na prihvatljivu

razinu.

Načelo 3

Uspostaviti kritične granice (ciljana razina i dopuštena odstupanja), koji moraju biti ispunjeni

kako bi se osiguralo da su CCP pod kontrolom. Moraju uključivati mjerljivi parametar kojeg

nazivamo apsolutnom tolerancijom, odnosno sigurnošću granica CCP.

Načelo 4

Uspostaviti sustav za praćenje kontrole CCP po rasporedima testiranja ili promatranja.

9

Načelo 5

Odrediti korektivne mjere koje se poduzimaju ako sustav praćenja utvrdi da se određena CCP

izmiče kontroli. Korektivne akcije za njihovu provedbu trebaju biti specificirane.

Načelo 6

Uspostaviti procedure za verifikaciju kojima se potvrđuje da HACCP sustav radi učinkovito.

Postupci verifikacije moraju biti razvijeni tako da održavaju HACCP sustav i osiguravaju

učinkovit nastavak rada.

Načelo 7

Napisati dokumentaciju koja se odnosi na sve procedure i zapise vezane za primjenu ovih

načela. Zapisi se moraju čuvati da bi pokazali kako HACCP sustav radi pod kontrolom i da su

odgovarajuće korektivne akcije poduzete za sva odstupanja od kritičnih granica.

Kao što je prije navedeno HACCP nije samostalan sustav. Dobre higijenske prakse i

drugi uvjeti vezani za preradu hrane, kao i jaka predanost menadžmentu su potrebne; HACCP

nije zamjena za njih. Obuka je još jedan jako bitan uvjet za uspješnost sustava. S ciljem

razvoja posebnih obuka koje će podržavati HACCP plan, potrebna je izrada radnih uputa i

procedura koje definiraju zadatke osoblja za svaku CCP. [23]

3.3 ISO 9001 i HACCP u PPK-a

PPK karlovačka mesna industrija d.d. ima certifikate za standarde ISO 9001 i HACCP

te se ti standardi i ispunjavaju u svakodnevnom radu. Standardi su implementirani kroz

potrebnu dokumentaciju, papirologiju i način rada.

Procesi koji su identificirani prilikom uvođenja SUK-a u PPK dijele se u tri grupe:

VODEĆI PROCESI (procesi upravljanja) su:

- planiranje SUK-a

- unutarnje ocjene SUK-a

- analize procesa

- upravna ocjena sustava

- poboljšanje i razvoj procesa

10

GLAVNI PROCESI (procesi realizacije proizvoda) su:

- proizvodnja (svježeg mesa, obarenih, polutrajnih i trajnih kobasica, trajnih

komadnih mesa i polutrajnih suhomesnatih proizvoda)

- prodaja

POMOĆNI PROCESI su:

- planiranje realizacije proizvoda

- nabava

- kontrola i ispitivanje nabavljenih proizvoda

- procesna kontrola

- kontrola gotovih proizvoda

- analiza opasnosti (HACCP)

- sanitacija i higijena pogona

- GMP (dobra proizvođačka praksa)

- skladištenje sirovina i repromaterijala

- skladištenje gotovih proizvoda

- transport

- upravljanje resursima

- upravljanje dokumentima i zapisima

- upravljanje mjerno-ispitnom i procesnom opremom

- upravljanje nesukladnostima

Dokumentacija koju nalažu ISO 9001 i HACCP unutar PPK organizirana je u četiri

razine. U dokumente prve razine: Politika kvalitete, Poslovnik integriranog sustava 11

upravljanja kvalitetom i sigurnošću hrane. U drugu razinu spadaju: Standardni operativni

postupci SUK-a (SOP). Treća razina obuhvaća Radne upute i propise, Norme i specifikacije,

Radne dokumente. Četvrtu razinu čine razni obrasci i formulari. [26]

Poslovnik upravljanja kvalitetom vrhovni je dokument ili dokument prve razine.

Njime su propisani procesi sustava upravljanja kvalitetom (SUK), njihove veze, provedbe i

odgovornosti za provedbu. Standardnim operativnim postupcima (SOP) i radnim uputama

(RU) SUK-a. HACCP plan koji je povezan sa Poslovnikom putem SOP-a HACCP, osnovni je

dokument koji osigurava uvijete za proizvodnju zdravstveno ispravne hrane. HACCP sustav u

potpunosti je integriran u SUK, a veze sa istim definirane su kroz poglavlja PUK-a.

Naravno svi ovi dokumenti se čuvaju i kontroliraju u skladu s propisima ISO standarda.

Sukladno s dokumentima unutar organizacije, provode se unutarnje kontrole, edukacija

zaposlenika, sanitacija tvrtke i ostali zahtjevi norme ISO 9001. Dokaz provedbe zahtjeva su

mnogobrojni formulari koje ispunjavaju QM i od njega ovlaštene osobe. Središnji dokument

HACCP standarda je HACCP plan. U njemu su identificirane sve prijetnje u svim procesima

koji se izvršavaju u PPK. No kako ne bi to ostalo samo na papiru, unutar proizvodnje mjesta

koja su u HACCP planu identificirana kao kritične točke, jasno su označena. Uz svaku

kritičnu točku napisana je i korektivna radnja kako bi radnik znao što mu je napraviti u

slučaju da nešto pođe po zlu.

12

4 .NET

Do izlaska Jave i .NET-a programiranje je bilo kaotično. Postojalo je mnoštvo jezika koji

su imali problema prilikom interakcije jednih s drugim. Razvojni programeri su imali dugu

krivulju učenja prilikom prebacivanje s jednog programskog jezika na drugi ili s jednog tipa

aplikacije na drugi jer nisu postojali standardni načini dizajniranja aplikacija i jer su postojale

velike sintaktičke razlike između jezika. Ovo je samo dio problema.

Ti problemi su se nastojali riješiti različitim standardima koji bi služili kao ljepilo koje će

omogućiti interoperabilnost, jedan od takvih standarda je COM i COM+. No u praksi rad s

ovakvim standardima je bio jako težak i nepraktičan. Osim ovog rješenja rastom aplikacija

pristupilo se rješenju zasnovanom na servisima.

Svi ovi nedostaci doveli su do novog programskog modela koji bi trebao omogućavati:

Da aplikacije budu napravljene kao komponente koje će se moći ponovno koristiti i dijeliti

preko interneta, da potiče razvoj aplikacija kao servisa. Te omogućava istinsku

interoperabilnost između jezika, što znači da kod napravljen u jednom jeziku je moguće

iskoristiti u nekom drugom.

Ovaj model je uspješno implementiran u Microsoftovu platformu - .NET. .NET

pojednostavljuje razvoj aplikacija za internet. Ali .NET je puno više od platforme za razvoj za

internet, ali namijenjen je pretežno za internet jer su sve druge tehnologije tu zakazale.

Prvo izdanje .NET Frameworka predstavljeno je 2002 godine i otad se nadograđuje.

NET pruža alate i biblioteke koje omogućavaju razvojnim programerima da razviju softver za

Windows OS mnogo brže i lakše. Dok s druge strane .NET krajnjim korisnicima omogućava

korištenje aplikacija koje su kvalitetnije, sigurnije i s više mogućnosti od klasičnih aplikacija.

Naravno .NET nije ograničen samo na klasične Windows aplikacije on omogućava i izradu i

korištenje, između ostalog, web aplikacija i servisa.

U ovom poglavlju bit će opisana .NET radna okolina, programski jezik C# te neke

Microsoftove tehnologije poput WPF i WCF-a.

4.1 .NET razvojna okolina

.NET radna okolina sastoji od četiri glavne komponente:

Common Language Specification (CLS)

Framework Class Library (FCL)

Common Language Runtime (CLR)

13

.NET alati

Ove četiri komponente su nabolje predočene na slici (Slika 4-1). Kao što se vidi na slici

dno slike zauzima siva boja tj. operacijski sustav i platforma. U teoriji može biti bilo koji OS,

ali većinom je to Windows operacijski sustav.

Slika 4-1 NET Framework [14]

Poviše operacijskog sustava nalazi se Common Language Runtime (CLR)- žuto na slici

(Slika 4-1).

Najvažnija komponenta .NET Frameworka je CLR koja pruža okruženje za izvođenje

programa. CLR sadrži virtualni stroj koji je u mnogo čemu sličan Java virtualnom stroju. CLR

pruža niz servisa koje aplikacije mogu koristiti da bi pristupile mnogim resursima (poput

nizova, kolekcija itd). [5]

Na višoj razini CLR aktivira objekte, na njima izvodi sigurnosne provjere, pohranjuje

ih u memoriju, izvodi ih i kasnije odlaže u otpad. Pošto CLR "upravlja" izvođenjem koda

takav kod se naziva upravljiv kod (managed code) dok ostali kod je naziva "neupravljiv kod".

[5]

14

Druga komponenta .Net-a je NET biblioteku klasa (FCL) - na slici (Slika 4-1) crvena

boja. Biblioteka je organizirana hijerarhijski u imenske prostore. Klase vezane za ugrađene

API-je nalaze se u System.* ili Microsoft.* imenskom prostoru. Biblioteke obuhvaćaju veliki

broj klasa, kao npr. klase vezane za rad s datotekama, bazama podataka i sl. Dio .NET

biblioteka klasa je Base Class Library (BCL).

Base Class Library (BCL) odnosno set osnovnih klasa, uključuje mali podskup od

cijele biblioteke klasa i glavni je skup klasa koje služe kao osnovni API CLR-a. Klase iz

mscorlib.dll i dio klasa iz System.dll i System.core.dll-a smatraju se da su dijelovi BCL-a.

Framework Class Library (FCL) je nadskup BCL-a i odnosi se na cijelu biblioteku

klasa koja se isporučuje s .NET razvojnom okolinom. Uključuje prošireni skup biblioteka,

uključujući WinForms, ADO.NET, ASP.NET, Language Integrated Query, Windows

Presentation Foundation, Windows Communication Foundation i mnoge druge.

Sljedeća komponenta .NET radne okoline je Common Language Specification (CLS).

Na slici (Slika 4-1) je to zelena boja. CLS je skup pravila koje moraju poštivati jezici da bi se

nazvali CLS jezikom. Na ovaj način je osigurana interoperablinost jezika. Jer svaki jezik koji

poštuje CLS može koristiti i nasljeđivati klase, hvatati iznimke i iskoristiti prednosti

polimorfizma drugog jezika. Interoperablinost jezika može povećati uporabu već postojećeg

koda te na taj način povećati efikasnost razvoja jezika. Prevoditelji koji su u skladu s CLS-om

stvaraju objekte koji mogu međusobno djelovati. FCL može koristiti u potpunosti bilo koji

jezik koji je u skladu s CLS-om.

Uz CLS treba i spomenuti Common Type System (CTS). CTS definira kako se

deklariraju, koriste i upotrebljavaju tipovi u vrijeme izvođenja. Dakle pomoću CLS i

CTS .NET razvojna okolina ostvaruje ugrađenu interoperabilnost jezika.

Zadnja komponenta .Net razvojne okoline su razvojni alati, na slici (Slika 4-1) bež boja. Prije

svega to je Visual Studio. Visual Studio je IDE, integrirano razvojno okruženje koje koristi

sve ove gore navedene komponente kako bi izgenerirao .NET aplikaciju. Dakle Visual Studio

je poput ljepila koje spaja sve te komponente u jednu cjelinu. Najnovija verzija je 2010. Uz

Visual studio tu postoje mnoštvo manjih alata poput IL disassemblera. [5]

4.1.1 Verzije .NET-a

Danas postoje nekoliko verzija .NET-a. Prva verzija je 1.0 nakon nje izdane su 1.1,

2.0, 3.0 i 3.5, te 4.0.

15

Verzija 1.0 , očito, bila je prva verzija .NET-a za operacijske sustave Windows. Izdana

je 2002. Ubrzo, sljedeće godine, izdana je nova verzija 1.1. Ona je bila prva veća nadogradnja

.NET-a. Izdavala se kao dio operacijskog sustava i bila je dio Visual Studia.

Sljedeća verzija bila je 2.0. Izdana zajedno s Visual Studiom 2005. Verzija 3.0 izlazi

2006.godine i već od početka je integrirana u tada novi Microsoftov sustav, Windows Vista.

Nedugo zatim, nakon izlaska Visual Studia 2008, nastaje mala nadogradnja u odnosu na .NET

3.0, verzija 3.5.

Glavne karakteristike ove verzije su:

• Windows Presentation Foundation – novi grafički podsustav baziran na XML-u i

vektorskoj grafici, koja upotrebljava 3D hardversku podršku.

• Windows Communication Foundation

• Windows Workflow Foundation

• Windows CardSpace

• LINQ

• ADO.NET Entity Framework

Danas najnoviji paket Microsoftovog Visual Studia, verzija 2010, u sebi sadrži također

najnoviju inačicu .NET-a, koja je već dosegla verziju 4.0, o kojoj će biti vise riječi u

zasebnom poglavlju, budući da će se aplikacija razvijati u toj verziji. [13]

4.1.2 .NET 4.0

.NET 4.0 je zadnja verzija .NET radne okoline. Izdana je 12. travnja. 2010. Verzija 4.0 je

donijela mnoštvo novosti, kao što su dodane brojne nove klase i imenski prostori, poboljšani

WPF. Dakle ima mnoštvo novosti al ovdje će biti spomenute samo neke najvažnije, a to su:

Windows work flow i WCF 4.0

Dynamic Language runtime

Paralelne ekstenzije

F#

Windows work flow i WCF 4.0 su kompletno redizajnirani. U WCF su dodani

jednostavniji servisi za konfiguraciju, otkrivanje i rutiranje. Dodani su REST poboljšanja i

workflow servisi. Što se tiče samog WWF unijete su temeljite promjene, promijenjen je cijeli

16

programski model. Programski model je postao jednostavniji i robusniji. Te je predstavljena

integracija između WCF i WWF.

Dynamic Language runtime (DLR) je set servisa koji dodaju sposobnost izvođenja

dinamički jezika, kao što su LISP, javasricpt, CLR-u. DLR se naslanja na CLR i omogućava

izvršavanje ovakvih jezika. Do izlaska DLR-a CLR je mogao samo izvršavati statički

tipizirane jezike kao što su C, C++, C#, VB.

Paralelne ekstenzije dodane su u .NET 4.0 kako bi dodale podršku za paralelno računanje

na višejezgrenim sustavima. Također je predstavljen i PLINQ, dodatak za LINQ koji

omogućava paralelno izvršavanje. Dodana je i nova biblioteka TBL koja sadrži paralelne

konstrukcije za petlje, funkcije i delegate. Predstavljen je novi jezik F#. F# je

mulitparadigmatski programski jezik namijenjen .NET radnoj okolini. Obuhvaća

funkcionalno programiranje kao i imperativno i objektno orijentirano. [2]

Slika 4-2 WCF Model [9]

4.1.3 Windows Comunication Foundation

WCF je dio .NET Frameworka za izgradnju i pokretanje povezanih (distribuiranih)

sustava. WCF pruža unificiranu radnu okolinu za izgradnju sigurnih i pouzdanih servisa.

WCF spaja i proširuje mogućnosti distribuiranih sustava, .NET Remoting-a, Web Services i

17

Web Services Enhancements (WSE), za razvoj i distribuciju ujedinjenih sigurnih sustava.

Također omogućava izgradnju labavo poveznih (eng. loosely coupled) aplikacija baziranih na

arhitekturi orijentiranoj servisima koja radi sigurnije i pouzdanije preko različitih platforma.

WCF pojednostavljuje napor pri razvoju servisno orijentiranih aplikacija pri čemu

spaja različite tehnologije potrebne za razvoj kao što su: Enterprise Services,

Messaging, .NET Remoting, Web Services, i WSE. Na taj način se razvoj aplikacija ubrzava

te povećava produktivnost. WCF gradi aplikacije sa programskim modelom baziranim na

atributima. Predstavljen je kao dio .NET-a 3.0. WCF pruža model programiranja baziran na

servisima koji međusobno djeluju jedni na druge pri čemu ne prelaze organizacijske i

platformske granice. WCF podržava velik broj Web servisa kao što su XML, XSD, SOAP,

XPath, WSDL i napredne standarde i specifikacije kao WS-Addressing, WS-Policy, WS-

Security, WS-Trust, WS-Secure Conversation, WS-Reliable Messaging, WS-Atomic

Transaction, WS-Coordination i WS-Policy. Model WCF razvojne okoline najbolje se može

predočiti slikom (Slika 4-2). [9]

Glavne komponente WCF radne okoline prikazane su na slici. (Slika 4-3) Ugovori

(eng. contracts) - sloj ugovora je odmah ispod aplikacijskog sloja. Njega developeri koriste

kako bi razvili servis. Njegovi dijelovi su ugovor podataka (eng. service contract), ugovor

podatka (eng. Data Contract), ugovor poruka (eng. message contract), politike i vezivanje

(policies and binding). Ugovor servisa opisuje operacije koje servis može obaviti. Ugovor

podatka opisuje tip podatka koji se prikazuje klijentu. Ugovor podatka definira tip podatka

koji se šalje i prima servisu. Primitivni tipovi podataka nije potrebno navoditi u ugovoru

podataka jer njihove definicije se nalaza u XML schema definition language dokumentu i

klijent ih može identificirati. Za razliku od njih složene tipove klijent ne može identificirati pa

se koristi DataContract kako bi se obavijestilo klijenta koji tip podatka se šalje i prima od

metode. Više o ugovorima u sljedećem poglavlju.

Zadani format poruka koji se koristi za komunikaciju između klijenta i servera u

WCF-u je SOAP format poruka. Ako to ne zadovoljava potrebe može se napraviti svoj format

poruka. To s može postići korištenjem ugovora poruka.

18

Slika 4-3: Komponente WCF radne okoline [10]

Politike i vezivanje specificiraju uvjete koji su potrebni da bi se ostvarila komunikacija

sa servisom, kao što su sigurnosni zahtjevi, protokol i kodiranje potrebno za povezivanje.

Sloj ispod sloja ugovora je sloj izvršavanja servisa (eng. service runtime). Sadrži ponašanja

koja se mogu dogoditi za vrijeme izvođenja servisa. Najvažnija ponašanja koje se nalaze u

ovom sloju su:

Throttling Behavior- kontrolira koliko se poruka obrađuje.

Error Behavior - specificira što se dogodi kad nastupi greška prilikom izvođenja

servisa.

Metadata Behavior - specificira kako i kad su metapodaci dostupni vanjskom svijetu.

Instance Behavior - specificira koliko se instanci servisa mora napravit za vrijeme

izvršavanja.

Transaction Behavior - omogućava povratak transakcije u slučaju greške.

Dispatch Behavior - Kontrolira način na koji WCF infrastruktura obrađuje poruke.

19

Ispod sloja izvršavanja nalazi se sloj poruka (eng. messaging). Sloj poruka se sastoji od

kanala. Kanal je komponenta koja obrađuje poruku na neki način, npr. autentikacija poruke.

Set kanal poznat je pod nazivom stog kanala (eng. channel stack). Kanali su glavna

apstrakcija za slanje i primanje poruka za krajnje točke (eng. endpoint) Kategoriziraju se u

sljedeće skupine:

Kanale transporta - obavljaju slanje i primanje poruka sa mreže. To su protokoli poput

HTTP, TCP, named pipes MSMQ

Kanale protokola - implementira protokol baziran na SOAP-u, npr. WS-Security i

WS-Reliability

Zadnji sloj WCF-a je sloj Aktivacije i smještaja servisa. Servisi mogu biti smješteni (eng.

hosting) ili izvršeni, tako da budu dostupni klijentu. WCF servis može biti dostupan klijentu

pomoću sljedećih mehanizama [10]:

IIS - Internet information Service pruža mnoštvo prednosti ako se servis koristi http

kao protokol. Ne zahtjeva host kod da bi aktivirao servis, to se radi automatski.

Windows Activation Service-(WAS) je novi proces aktivacijski mehanizam koji se

isporučuje sa IIS 7.9. Uz HTTP baziranu komunikaciju, WCF pomoću WAS-a

mogućava servisa i procesa baziranih na drugim protokolima poput TCP-a.

Self-Hosting - WCF servis može biti smjestiti i aktivirat kao konzolna aplikacija,

WinForms aplikacija ili WPF aplikacija sa grafičkim sučeljem.

Windows Service - WCF može biti smješten i aktiviran kao Windows servis, ali tad je

pod kontrolomService Control Manager-a (SCM).

20

4.1.3.1 Komunikacijski Model

Slika 4-4:komunikacijski model

WCF koristi klijent server model da bi uspostavio komunikaciju između aplikacija. Klijenti

mogu direktno pristupiti servisima kroz krajnje točke (eng. EndPoint) koje servis izlaže za

korištenje. Krajnja točka nije ništa drugo nego definirana lokacija kroz koje se poruke mogu

slati i primate. Servis može imat više krajnjih točaka. Za komunikaciju između klijenta i

servera koristi se SOAP format poruka. No osim njega mogu se koristiti i drugi formati poput

REST, JSON ili WDSL.

Kao što je prije ukratko navedenoWCF sloj ugovora sastoji seod sljedećih glavnih

komponenti:

Ugovor servisa (service contract)

Ugovor operacija (operation contract)

Ugovor podataka (data Ccontract)

Član podatka (data member)

Njihov odnos se najbolje vidi naslici (Slika 4-5) [9]

21

Slika 4-5: Odnos ugovora WCF servisa [9]

Ugovor servisa

Ugovor servisa je ugovor koji specificira smjer i tip poruke u komunikaciji. U WCF

aplikaciji ugovor servisa se implementira kao sučelje ili klasa. Ugovor servisa su ustvari vrata

preko kojih aplikacija koristi operacije servisa i svaki servis bi trebao imati bar jedan ugovor

servisa. Ugovor servisa se definira ovako:

// Student ServiceContract

[ServiceContract]public interface IQcsService

{

// Define the OperationContact here….

}

Gore navedeni atribut ServiceContract sučelja IQcsService definira ugovor servisa.

Ugovor servisa definira koje su operacije dostupne u tom servisu, operacije poput metoda web

servisa. Dakle svaki WCF servis se sastoji od sučelja, u ovom slučaju IQcsService i klase koja

implementira to sučelje. Ako se tom sučelju doda atribut ServiceContract to sučelje postaje

ugovor servisa, a sve metode unutar njega su metode koje servis daje na korištenje vanjskim

aplikacijama. Metode servisa se nazivaju operacije. [9]

Ugovor operacija

Ugovor operacija (eng. operation contract) definira operacije (metode) koje servis daje na

korištenje vanjskoj aplikaciji. Da bi operacija bila dostupna vanjskoj aplikaciji, mora joj biti

22

pridodan atribut OperationContract. I to za svaku operaciju, slično kao i web metodama u

web servisima. [9]

Ugovor operacije se definira na sljedeći način:

// Student ServiceContract

[ServiceContract]public interface IQcsService

{

// Define the Autenticate OperationContact here….

[OperationContract]AutenticationInfo Autenticate(string username, string pass); // Define the GetStudentInfo OperationContact here….

...

[OperationContract]int LoggedIn(string username, string password);

… }

Ugovor podatka

Ugovor podatka (eng. data contract) definira tip sa skupom članova tipa ili poljima

koji će biti upotrebljeni kao složeni podatak u ugovoru servisa. To je labavo spojen (loosely

coupled) model koji je definiran izvan implementacije servisa i moguće mu je pristupiti sa

servisom s neke duge platforme. Da bi definirali ugovor podatka treba primjeniti atribut

DataContract

na klasu i dodati atribut DataMember na polje unutar klase. Na taj način serializator zna

seriliziti klase u xml.

StudentInformation ugovor podatka može se definirati na ovaj način:

23

[DataContract]public class AutenticationInfo{

// Define the Datamembers here….

}

Član podatka (eng. data member) specificira tip koji je dio ugovora podatka, koji se

koristi kao složeni tip ugovora servisa. Da bi se definirao član podatka treba primjeniti

DataMember atribut na polje koje se mora serializirati. DataMember atribut se može

primjeniti i na privatne članove, te će biti serializirani i deserializirani, te će biti dostupni

korisniku i procesu.

DataMember se definira na sljedeći način:

[DataContract]

public class AutenticationInfo

{

        [DataMember]        public string Name { get; set; }         [DataMember]        public string Lastname { get; set; }         [DataMember]        public int UserId { get; set; }        

[DataMember] public List<AutenticationOrganisation> Organisation { get; set; }

}

24

4.1.3.2 SOAP, WSDL i UDDI

WSDL (Web Service Description Language) je jezik za opis servisa. to znači da

specificira što servis radi, potrebne formate podataka i protokla, lokaciju servisa i drugo. To je

u suštini XML dokument.

UDDI (Universal Description, Discovery and Integration) omogućava registraciju i

pretraživanje servisa, pristup ESDL dokumentima. Te je neovisan o platformi.

SOAP (Simple Object Access Protocol) Protokol temeljen na XML-u koji omogućava slanje

poruka između pružatelja servisa i klijenta. Koriste ga drugi protokoli poput HTTP-a,

SMTP-a. One je također neovisan o platformi.

Servis prima SOAP poruku od klijenta i vraća SOAP poruku kao odgovor. SOAP

poruka se sastoji od omotnice (eng. envelope) koja ima tijelo i zaglavlje. Zaglavlje je opciono,

sadrži informacije o adresiranju, sigurnosti, transakcijama. Tijelo sadrži podatke poruke. [11]

Evo primjera:

<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing"

xmlns:s="http://www.w3.org/2003/05/soap - envelope" >

<s:Header >

</s:Header>

<s:Body >

<ReserveRoom xmlns="http:// www.w3.org /ProCSharp/2010" >

<RoomReservation

xmlns:d4p1="http://schemas.datacontract.org/2009/CSharp.WCF"

xmlns:i="http://www.w3.org/2001/XMLSchema - instance" >

25

<d4p1:EndDate> 2010 – 06 – 21T14:00:00 < /d4p1:EndDate >

<d4p1:Contact> Georg Danzer < /d4p1:Contact >

<d4p1:Event> White Horses < /d4p1:Event >

< /RoomReservation >

< /ReserveRoom >

< /s:Body>

< /s:Envelope>

4.1.4 Windows Presentation Foundation

Windows Presentation Foundation ili WPF je novi grafički podsustav .NET-a.

Predstavljen je zajedno s .NET-om 3.0 i od tada je glavni grafički podsustav .NET-a. Sa

svakom novom verzijom .NET-a WPF se unapređuje i dodaju mu se nove mogućnosti.

Fizički, to je skup .NET sklopova (eng. assembly) i pomoćnih alata. Do izlaska WPF-

a, za prikaz UI koristio se WinAPI i kasnije Windows Forms. Windows Forms pruža

upravljiv omotač (eng. managed wrapper) oko Windows API-ija. Windows Forms su postali

hit jer su omogućili bržu izgradnju aplikacija i sam razvojni programer se mogao koncentrirati

na problem. Za prikaz 3D sadržaja koristio se DirecX i GDI/GDI+.

Upravo zbog ovoga, znači zbog složenosti izrade sučelja i korištenja mnogo alata da bi

se napravilo jedno sučelje predstavljen je WPF. Napravljen je s namjerom da pruži unificirani

API za izradu sofisticiranih korisničkih sučelja za Windows operacijske sustave.

WPF spaja sve dobre stvari iz razvoja za web, kao style sheet i označni jezik za opis

sučelja, animacija i podrška multimediji. Ove komponente su spojene u jednu cjelinu sa

stvarima iz tradicionalnog razvoja za desktop kao što su integracija sa OS i povezivanje

podataka.

U WPF-u ove stvari su poboljšane i unificirane. Osim ovih stvari WPF podržava 3D

crtanje i mnoštvo drugih stvari.

26

WPF aplikacije mogu se razvijati kao desktop i web aplikacije. WPF osigurava jasnu

razliku između korisničkog sučelja (eng. UI) i poslovne logike. Za korisničko sučelje WPF

koristi označni (eng. markup) jezik koji je nastao iz XML-a tzv. XAML (čitaj zammel). [6]

4.1.4.1 Arhitektura

Arhitektura WPF-a (Slika 4-6) sastoji se od dijelova koji pripadaju upravljivom kodu i

neupravljivom kodu. Veći dio pripada naravno upravljivom kodu, ali jedan dio jako bitan

pripada neupravljivom. To je Media Integration Layer ili MIL.

Slika 4-6: WPF arhitektura [15]

Ustvari to je jedini neupravljivi dio i nalazi se u milcore.dll. On se direktno naslanja na

DirectX i služi za integraciju s DirectX-om. Dakle kako se može zaključiti WPF koristi

DirectX za sva iscravanja. MIL osigurava podršku za iscrtavanje 2D i 3D sadržaja animacije.

Media kodaci su također podržani od strane WPF-a i to kroz windowscodacs.dll. Ovaj dll

također pripada neupravljivom dijelu.

Upravljivom dijelu pripada Presentation Core, nalazi se u presentationcore.dll, koji

osigurava omotač (eng. wrapper) za MIL i implementira core servise. Presentation

Framework implementira krajnje elemente UI kao što su animacije, layout i data binding. [12]

4.1.4.2 XAML

Extensible Application Markup Language ili XAML je deklarativan jezik baziran na

XML-u, a koristi se za inicijalizaciju objekata. Prednost XAML-a je u tome što je u

27

potpunosti deklarativan jezik. U deklarativnom jeziku, developer opisuje ponašanje i

integraciju komponenti bez uporabe proceduralnog programiranja. To omogućava nekome tko

ima malo ili nimalo programerskog znanja da kreira cjelokupnu aplikaciju bez programiranja.

Uporabom XAML-a u razvoju korisničkog sučelja omogućava razdvajanje modela i

pogleda, što se smatra dobrom dizajnerskom praksom. XAML se ne koristi samo u WPF već

ga je moguće koristiti i u drugim .NET komponentama kao npr. WWF-u. Naravno i tu se

koristi za definiranje UI.

XAML radi na principu da se elementi mapiraju u CLR objekte, dok se XAML atributi

mapiraju u svojstva (eng. property) i događaje (eng. event) tih objekata. XAML datoteke se

kompajliraju u .baml datoteke i dodaju se kao resurs u .NET sklop (eng. assembly). Za

vrijeme izvođenja CLR ekstraktira .baml, parsira ga, napravi odgovarajuće objekte i vizualno

stablo kojemu se onda može pristupati iz koda.

Znači XAML nije ovisan o WPF, mogu ga koristiti i ostali programi. U WPF-u koristi se

za opis sučelja. Alati koji se koriste XAML za opis sučelja su Visual Studio, Expression

Blend. [12]

4.1.4.3 JednostavnI WPF windows program

WPF program je najlakše napraviti pomoću visual studija. I to tako da se odabere

new project → Wpf Application. Nakon toga Visual Studio će izgenerirati projekt koji sadrži

dvije datoteke: App.xaml i MainWindow.xaml. Svaka od ove dvije datoteke ima code behind

datoteku u kojoj se nalazi programska logika. App.xaml stvara Application objekt te pokreće

naš program koji se nalazi unutar MainWindow.xaml-a. Program će biti jednostavan, sastojat

će se od jednog dugmeta koji se prostire preko cijelog prozora i koji će ispisivati poruku u

prozoru nakon što se klikne na njega.

Xaml datoteka ovako izgleda:

<Window x:Class="WpfApplicationtemp.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="MainWindow" Height="350" Width="525">

28

    <Grid>        <Button Content="Hello World!!"   Name="HelloWorld" 

VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 

Click="HelloWorld_Click" />    </Grid></Window>

Dakle sastoji se od tri taga: Window, Grid, Button. Svaki tag može imati atribute koji

mogu biti svojstva ili događaji. U ovom primjeru imamo jedan događaj koji je vezan za tag

Button, to je Click. Ovaj događaj ima vrijednost HelloWorld_Click, a to je ime obrađivača

događaja koji se nalazi u tzv.„code behind“ datoteci. Ali o tome malo više kasnije. Tag

Window predstavlja objekt Window tj. prozor programa. U njemu se nalaze dva imenska

prostora.

Jedan je

http://schemas.microsoft.com/winfx/2006/xaml/presentation koji

mapira sve Windows kontrole u System.Windows.Controls. Drugi je

http://schemas.microsoft.com/winfx/2006/xamlkoji definira Xaml tagove.

Grid tag predstavlja grid kontrolu koja služi kao kontejner za druge kontrole. Tj. u nju se

mogu stavljati druge kontrole kao u ovom slučaju Button kontrola. U datoteci

MainWindow.xaml.cs nalazi se logika programa:

using System.Windows;

namespace WpfApplicationtemp{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        private void HelloWorld_Click(object sender,

 RoutedEventArgs e)        {            MessageBox.Show("Hello World!!!");        }    }}

29

Kao što se vidi u „code behind“ datoteci nalazi se samo jedna metoda

void HelloWorld_Click

koja je obrađivač događaja (eng. event handler) HelloWorld_Click koji je zapisan u xaml-u.

Unutar metode nalazi se statička klasa MessageBox.Show koja prikazuje jednostavnu poruku

kad se klikne na dugme. Kao što je prije spomenuto imenski prostor

http://schemas.microsoft.com/winfx/2006/xaml sadrži definicije tagova standardnih WPF

kontrola. Ukoliko se koriste ne Microsoftove kontrole potrebno je dodati dodatne imenske

prostore. U ovom diplomskom koriste se DevExpress kontrole. DevExpress su set kontrola za

Windows Forme, ASP.NET, Silverlight, DelphiVCL i WPF. Ove kontrole su komercijalne pa

je u ovom diplomskom je korištena probna verzija. Inače radi se o jako kvalitetnom i dobrom

skupu kontrola koje omogućavaju lakši razvoj aplikacija. Korištene su ove

kontrole:BarManager, RibbonControl, DockLayoutManager, LayoutGroup, NavBarControl.

4.1.5 ADO.NET Entity Framework

ADO.NET Entity Framework je ORM (eng. Object - Relational Mapping) radna

okolina razvijena od strane Microsofta za .NET radnu okolinu. Prije nego se nastavi opisivati

Entity Framework potrebno je objasniti što je to ORM. ORM znači objektno - relacijsko

mapiranje. To je programerska tehnika koja se sastoji on seta klasa koje mapiraju relacijski

model entiteta u objekte specifičnog programskog jezika.

U početku su aplikacije direktno pozivale API-ije baza podataka kako bi mogli

komunicirati sa njima. Na primjer API za oracle baze Pro*C se pozivao da bi se moglo

pročitati ili upisati nešto u Oracle bazu iz C aplikacije. On bi ugrađene SQL naredbe pretvarao

i pozive Oracle biblioteci.

Sljedeći korak u pristupu bazama podataka bio je ODBC (Open Database

Connectivity). On je razvijen sa namjerom da ujedini sve komunikacijske protokole za

različite RDBMS-e. Dizajniran je tako da bude neovisan o programskom jeziku, bazi

podataka i operacijskom sustavu.

Prema tome aplikacija bi mogla komunicirati sa bilo kojom bazom podataka koristeći

isti kod, samo bi trebala promijeniti odgovarajući ODBC upravljački program. Bez obzira da

li se koristio ODBC ili neka druga metoda za pristup bazi podataka ostaje jedan problem.

Podaci koje vrati baza moraju se nekako prikazati u aplikaciji. Ili kao varijabla ili u slučaju

30

današnjih modernih programskih jezika kao klasa. Taj isti set klasa bi se morao ponovno

razviti ukoliko se radi nova aplikacija. Ovaj problem rješava pojava ORM-a. [16]

Korištenjem ORM-a baza podataka se predstavlja sa ORM kontekst objektom, koji je

specifičan za svaki programski jezik. Entiti baze podataka poput tablica su predstavljeni sa

klasama i vezama među tim klasama. Na primjer, recimo da postoje dvije tablice Order i

OrderDetail, koje su međusobno povezane vezom 1 na n. ORM stvara dvije klase koje će

predstavljati te dvije tablice. Isto tako klasa Order će imati i kolekciju koja će sadržavati sve

detalje vezane za nju. ORM isto tako vodi računa o mapiranju i konekcijama između klasa i

baze podataka. Uvođenjem ORM, baza podataka je aplikaciji predstavljena kroz navedene

klase. Aplikaciju ne zanima o kakvoj se bazi radi već samo koristi ove klase kako bi dobavila

ili spremila podatke. Aplikacija se ne mora brinuti kako se spojiti na bazu podataka, kako

napraviti SQL naredbe ili kako upotrijebiti mehanizme zaključavanja (eng. locking

mechanism). O svemu ovom ORM vodi računa.

Slika (Slika 4-7) pokazuje načine kako se može spojiti na bazu. Microsoftova verzija

ORM softvera je Entity Framework. Entity Framework je složena radna okolina i trebalo bi

puno više prostora za opisati je. Zbog toga će biti opisana u kratkim crtama s naglaskom na

programerskom dijelu.

Središnji dio Entity Frameworka je Entity Data Model (EDM). Njega sačinjavaju tri

XML datoteke. Svaka od tih datoteka definira dio modela i baze. Ove datoteke su: Conceptual

Slika 4-7: Načini povezivanja na bazu podataka [16]

31

Schema Definition Language (CSDL), Mapping Schema Language (MSL) i Store

Schema Definition Language (SSDL).

Conceptual Schema Definition Language (CSDL) definira kako se mogu slati upiti na

model sa gledišta aplikacije. Tj. definira klase koje predstavljaju bazu. Dio koji definira

stvaran shemu baze podataka je Store Schema Definition Language (SSDL). SSDL definira

izgled tablica i odnose među njima. Dio koji povezuje ova dva navedena dijela je Mapping

Schema Language (MSL). MSL je odgovoran za mapiranje podataka između CSDL i

SSDL-a. [16]

Ove datoteke imaju svoju strukturu te ih je moguće sam definirati i napisati ručno. No

njih može i izgenerirati Visual Studio te napraviti cijeli model za nas. Takav model je

dobar i dovoljan za ovaj diplomski rad. Zbog toga se neće ulaziti u objašnjavanje

strukture tih datoteka. Detaljniji opis dan je na adresi:

http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework.

Znači Visual Studio izgenerira ova tri dijela u obliku .edmx datoteke. I praktički kad

se to dogodi Entity Data Model je spreman za rad, jer Visual Studio stvara sve potrebne klase

za rad. Među njima je svakako najvažnija klasa koja nasljeđuje objekt ObjectContext. Taj

objekt upravlja sa svim što ima veze sa pristupom podataka. Kao što je stvaranje konekcije,

transakcije, promjene u vezama. Preko ObjectContext-a se vrši upisivanje, čitanje i brisanje

podataka.

Unutar klasa entiteta postoji set svojstava za svaki entitet unutar sustava. Svako to

svojstvo vraća objekt koji je generičkog tipa ObjectQuery<T>, T je tip entiteta. Sam

ObjectQuery je ugrađena klasa koja omogućava izvršavanje upita o spremište podataka koje

je u ovo slučaju baza podataka. Klase naravno imaju svojstva i relacije koje su definirane

putem CSDL-a.

Sljedeće što treba opisati se načini kako postaviti upite na Entity Data Model. Upite je

moguće izvršavati na različite načine, pomoću: Entity SQL, Linq to SQL ili Linq to Entities.

Entity Sql je verzija T-sql kojoj je omogućen rad na Entity Framework-u. Entity Framework

parsira eSQL te ga transformira u T-sql i vrši upite o bazu, Pomoću eSQL-a moguće je

izvršavati samo select naredbe. Puno bolji način pristupa podataka je pomoću Linq to SQL ili

Linq to Entities. Oni koriste ObjectContext objekt za pristup bazi. [16]

32

4.1.5.1 Linq

Linq (Language integrated query) se pojavio sa .NET-om 3.0. Linq omogućava

postavljanje upita sličnih SQL-u u bilo kojem .NET jeziku. Upiti se mogu postavljati na

relacijske baze, kao što je prije navedeno, na XML datoteke i na objekte. Zbog toga postoje

različiti tipovi linq-a. Uz linq povezane su neke nove značajke C# jezika. Kao što su: lamda

izrazi, anonimni tipovi, anonimne funkcije, inicijalizatori, automatska svojstva, var tip...

Ova svojstva neće biti posebno opisana već će biti opisana kako se bude dolazio do

njih na primjeru. Evo jedan primjer linq upita:

var OrgUsers = from worker in databaseEntities.QCS_organzationworker_orgwrk

where worker.id_orgwrk_usr == usr.idusr && worker.IsDeleted == false      

select new                {                  worker.id_orgwrk,                  worker.idorgwrk_dep,                  worker.idorgwrk_wp,                  worker.organization_orgwrk                 };

Svaki linq upit počinje s naredbom from in. U ovo slučaju je to

from worker in databaseEntities.QCS_organzationworke

Ova naredba je slična naredbi foreach, uzima element iz neke kolekcije koja se nalazi

desno od ključne riječi in. Iza ove prve naredbe slijedi druga, a to je

where worker.id_orgwrk_usr == usr.idusr && worker.IsDeleted == false

To je ustvari filter koji ispituje svaki objekt tipa c za neki uvjet. Iza njega slijedi

naredba s kojom završava svaki linq upit. A to je select tj.

33

select new {

                  worker.id_orgwrk,                  worker.idorgwrk_dep,                  worker.idorgwrk_wp,                  worker.organization_orgwrk                 };

Ovo je jedina naredba uz order by koja vraća vrijednost. To je nešto kao return

ključna riječ u metodama. Rezultat ovog upita bit će objekt tipa ObjectQuery<T>. Ovdje

treba primijetiti dvije nove stvari. Prva je varijabla tipa var. To ustvari varijabla koja nema tip

već se on nameće od strane kompajlera nakon što on shvati koji se tip nalazi s desne strane.

Dakle varijabla tipa var poprima tip od izraza s desne strane. Ne može biti null, te se mora

inicijalizirati prilikom deklaracije.

Druga novost je

new                {                  worker.id_orgwrk,                  worker.idorgwrk_dep,                  worker.idorgwrk_wp,                  worker.organization_orgwrk                 };

To je takozvani anonimni tip. Oni se deklariraju sa var varijablama npr.

var p = new {X = 0, Y = 2};

Izrazi unutar vitičastih zagrada su inicijalizatori. Oni kao što ime kaže postavljaju

vrijednosti svojstava na neku vrijednost. Kad su već spomenuta svojstva u .NET-u 3.0

uvedena su automatska svojstva koje nije potrebno pisati, već samo navesti imena i oni se

sami generiraju od strane kompajlera. Kao u primjeru prije:

worker.id_orgwrk, worker.idorgwrk_dep, worker.idorgwrk_wp

34

Ovakvu sintaksu kompajler prevodi u:

var result = databaseEntities.QCS_organzationworker_orgwrk.Where( worker=> worker.id_orgwrk_usr == usr.idusr && worker.IsDeleted == false) .Select( worker => new                 {                  worker.id_orgwrk,                  worker.idorgwrk_dep,                  worker.idorgwrk_wp,                  worker.organization_orgwrk                 });

Kao što se vidi niz metoda s nekim čudnim izrazima. Ti izrazi su lamda izrazi. Oni

nisu ništa drugo nego li kraće i ljepše zapisane anonimne metode. No da se malo proanalizira

jedan lamda izraz:

worker=> worker.id_orgwrk_usr == usr.idusr && worker.IsDeleted == false)

Ovdje je ključan operator =>. Izraz lijevo od njega odgovara listi argumenata metode.

Ako ih ima više oni mogu biti grupirani unutar zagrada. Desno od operatora => odgovara

tijelu metode. Tijelo može imati više izraza u tom slučaju ih se stavlja unutar vitičastih

zagrada. Također može se primijetiti da je korištenje tipa u listi argumenata opciono kao i

return ključna riječ u tijelu lamda izraza.

Dakle ovaj izraz bi se mogao protumačiti kao primjeni lamda izraz na članove

kolekcije u metodama where i select.

35

4.1.6 Managed Extensibility Framework

4.1.6.1 Plugin sustav

Kako aplikacije rastu s vremena na vrijeme sve ih je teže održavati i dopunjavati sa

novim funkcionalnostima. Da bi se omogućilo lakše dodavanje novih funkcionalnosti i

olakšalo održavanje uvode se sustavi dodataka1 (eng. plugin). Dodatak ili plugin omogućava

da se aplikaciji kasnije lako dodaju nove funkcionalnosti. Plugin-ove mogu razvijati izdavači

softvera ali i drugi ukoliko se pridržavaju određenih pravila. Danas sve veće aplikacije

podržavaju sustave za upravljanje plugin-ovima.

U računarstvu, dodatak (eng. plugin) je skup softverskih komponenata koji dodaju

nove mogućnosti većoj softverskoj aplikaciji. Plugin sustav omogućava proširenje

mogućnosti aplikacije bez da se ona izmjeni ili rekompajlira. Osnovna struktura aplikacije

bazirane na plugin-onima prikazana je na slici (Slika 4-8).

Slika 4-8: Shema plug in sustava [19]

Kao što se vidi osnovni dijelovi ovog sustava su aplikacija domaćin2 (Host), sučelje i

samo plugin. Host aplikacija je novisna o plugin-ovima te ne zna kako su oni implementirani i

koliko ih je. Da bi se te komponente mogli komunicirati potrebno je definirati sučelje koje će

bit jednako za sve, dakle svaki plugin ga mora implementirati kako bi ga host aplikacija

mogla koristiti. Host također zna kako sučelje izgleda te pomoću tog sučelja komunicira s 1 Hrvatski naziv dodatak je nepraktičan te će se u radnji koristiti engleski naziv 2 Hrvatski naziv aplikacija domaćin jako je nespretan, zbog toga će se dalje u radu koristiti engleski naziv.

36

plugin-om. Unutar hosta obično se definira plugin upravitelj. On vodi računa o učitavanju i

upravljanju plugin-a. Postoje više tipova plugin upravitelja. Najjednostavniji plugin upravitelj

učitava plugin-ove jednom, prilikom pokretanja aplikacije. I to obično na način da se postavi

jedan direktorij kao plugin direktorij. Plugin upravitelj pretražuje taj direktorij za plugin-ove

koji implementiraju sučelje kojeg je definirala aplikacija. Drugi, napredniji način za

implementiranje plugin sustava omogućava učitavanje i iskrcavanje pluginova za vrijeme

izvođenja aplikacije. To za sobom vuće činjenicu da se plugin-ovi mogu ažurirati bez da se

aplikacija ponovno pokreće. [18]

Ponekad je potrebno da sam plugin koristi mogućnosti host aplikacije. U tom slučaju

host aplikacija definira sučelje koje je dostupno plugin-ovima tzv. sučelje aplikacije.

Sustav plugin-a je može izvesti na tri načina u .NET-u. Prvi način je da sami razvijete

sučelje i host upravitelj pomoću .NET sučelja, kasnog povezivanja i sklopova. To se izvodi na

način da se host aplikacija definira u jednom sklopu, sučelje u drugom, a sam plugin u trećem.

Host aplikacija uz pomoć ugrađenih .NET klasa može dinamički učitati sklop sa plugin-om.

Ovaj način je dobar jer je sučelje definirano u zasebnom sklopu te ga mogu koristiti i drugi

programeri za razvoj aplikacija.

Osim metode da sami razvijete plugin sustav, Microsoft se pobrinuo da napravi radnu

okolinu za plugin-ove. Postoje dvije: MAF i MEF. MAF koristi princip cijevovoda za

komunikaciju s plugin-ovima te je složeniji za uporabu. U ovom diplomskom koristit će se

MEF jer je jednostavniji i zadovoljava potrebe diplomskog.

37

4.1.6.2 MEF

Klase potrebne za rad s MEF-om (Managed Extensibility Framework) definirane su u

System.ComponentModel.Composition imenskom prostoru. MEF je prvi put predstavljen

s .NET-om 3.5. Osnovni dijelovi MEF-a su: dijelovi (eng. parts) i kontejneri (eng. containers).

Dijelovi (eng. parts) su ustvari pluginovi. Oni se definiraju sa atributom Export, kontejner

Slika 4-9: Arhitektura MEF-a [7]

pronalazi dijelove u katalogu (eng. catalog). Katalog pronalazi dijelove unutar nekog sklopa

ili direktorija, Kontejner spaja kod označen s atributom, Import sa kodom označenim

atributom Export i na taj način plugin-ove dostupne host aplikaciji.

Imports i exports su ustvari atributi pomoću kojih katalog pronalazi plugin-ove.

Pružatelj exporta pristupa katalogu i nudi mu exporte koji se nalaze u katalogu. Moguće je

više pružatelja exporta koji su povezani u lanac. Zatim kontejner upotrebljava pružatelje

exporta kako bi ih spojio s importima.

MEF se sastoji od tri kategorije klasa: klase za hosting, primitive i klase za mehanizam

baziran na atributima. U klase za hosting spadaju kontejneri i katalozi. Klase primitiva služe

38

ako želiom napraviti klase koje proširuju funkcionalnosti MEF-a. Te na kraju u klase koje

implementiraju mehanizam baziran na atributima spadaju Export i Import atributi. [7]

Na primjeru opisti će se MEF arhitektura. Radi se o dijelu koda iz plugin-a aplikacije.

Pošto su plugin-ovi dosta veliki opisani su samo dijelovi koda koji su važni da bi se razumjela

plugin arhitektura. Primjer se sastoji od tri sklopa: jedan za host aplikaciju, drugi za sučelje, a

treći za plugin. Prvo će se definirati sučelje kojeg plugin mora implementirati.

namespace IQCSPlugInInterface{         public interface IPlugInInterface    {      PlugInInfo GetPlugInInfo();      IEnumerable<SidebarItem> GetSidebarInfo();

     bool Operate(string operation);

     bool GetData(AutenticationInfo info);

     bool SetRights(string organisation, string workplace,  string name, string lastname, int right);      void InitPlugIn();      void ShowToolbar();     }}

Nakon toga je potrebno definirati plugin. On mora implementirati gore navedeno

sučelje:

39

namespace HACCPmodul{[Export(typeof(IPlugInInterface))]    public class HACCP : IPlugInInterface, IHostImportInterface    {

...

        public void InitPlugIn()        {            settingsUi.HostInterface = Host;            HaccpTeamUI.HACCPTeamHostInterface = Host;         }

...      public void ShowToolbar()        {                        HaccpTeamUI.ShowButtons();             settingsUi.ShowToolbar();        }

... }}

atributom Export definira HACCP klasu kao dostupnu host aplikaciji. Još je potrebno

definirati host aplikaciju:

using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;

...

namespace DXWPFApplication2{public partial class MainWindow : DXRibbonWindow, 

IHostInterface, IPlugInmportInterface    {

...        [ImportMany]        public IEnumerable<IQCSPlugInInterface.IPlugInInterface>

PlugInn { get; set; }...

40

       void InitializePlugin()        {

...var catalog = new AggregateCatalog(); 

         catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));

         catalog.Catalogs.Add(new DirectoryCatalog

var batch = new CompositionBatch();batch.AddPart(this);container.Compose(batch);

//***glavna petlja za loadanje pluginaforeach (IQCSPlugInInterface.IPlugInInterface test in PlugInn){

//grupa modul_modulinfo = test.GetPlugInInfo();_modul = new NavBarGroup();..._sidebaritme = test.GetSidebarInfo();...}...}

Kad se pokrene glavni program pokreće se InitializePlugin metoda. U metodi

InitializePlugin prvo se stvara katalog u kojemu se nalazi popis exporta tj. dodataka. Nakon

toga se stvara kontejner koji sadrži sve plugin-ove koji se nalaze u katalogu. Te nakon toga se

pokreće metoda Compose koja prihvaća kao argumente objekt s definiranim import atributom.

Kako objekt tipa MainWindow ima definiran atribut import moguće ga je poslati kao

argument u metodu. Nakon izvršenja ove metode exporti se mapiraju u importe te ih je

moguće koristiti u program. Kao što se vidi poziva se metoda

_modulinfo = test.GetPlugInInfo();

iz plugin-a kako bi se dobavili podaci o plugin-u.

41

4.1.7 Prevođenje i CIL

Na platformi .NET programi se ne prevode u izvedbene datoteke, oni se prevode u

sklopove (eng. assemblies) koje sadrže Common Intermediate Language (CIL) upute koje

CLR zatim pretvara u strojni kod i izvodi. CIL datoteke koje proizvodi C# gotovo su

identične CIL datotekama koje proizvode ostali jezici podržavani u .NET platformi.

C# kod se prevodi u CIL prilikom izrade projekta. CIL se sprema u datoteku na disku.

Kada pokrenete program. CIL se ponovno prevodi s Just In Time (JIT) prevoditeljem.

Rezultat je strojni kod koji procesor može izvesti. Standardni se JIT prevoditelji pokreću na

zahtjev. Kada se metoda pozove, JIT prevoditelj analizira CIL i proizvodi iznimno učinkovit

strojni kod koji se vrlo brzo izvodi. Dok se program izvodi prevođenje se provodi samo po

potrebi, a jednom preveden kod se sprema u privremenu memoriju da bi se mogao ponovno

upotrijebiti. .NET aplikacije se svakim novim pokretanjem postaju sve brže jer se koristi već

prevedeni kod. Prije navedeni CLS ovdje dolazi do izražaja, tj. CLS znači da svi .NET jezici

Slika 4-10: Postupak prevođenja[13]

42

proizvode sličan kod. To omogućava da se objektima stvorenim u jednom jeziku može

pristupiti i iz drugog jezika. Stoga je moguće osnovnu klasu stvoriti u jeziku VB.NET, a iz nje

izvoditi C#. [5]

4.2 Programski jezik C#

Jezik C# je iznenađujuće jednostavan. Sadrži oko 80 ključnih riječi i desetak ugrađenih

tipova, ali implementira sve moderne programske koncepte. C# pruža svu podršku potrebnu

za strukturirano, objektno orijentirano programiranje. C# je sagrađen na temeljima jezika C++

i Java. U inačici 2.0 dodani su mu i mnogi važni elementi koji su ranije nedostajali, poput

generika i anonimnih metoda.

Verzija 4.0 donosi još neka poboljšanja kao što su: nazivski i opcijski parametri,

podrška za dinamičke tipove, varijanca i COM interoperabilnost.

U središtu svakog objektno orijentiranog jezika je njegova podrška za definiranje klasa i

rad sa klasama. Klase definiranju nove tipove, što omogućava proširivanje jezika kako bi se

bolje modelirao problem koji se pokušava riješiti. C# sadrži ključne riječi za deklariranje

novih klasa, njihovih metoda i svojstava te za implementaciju enkapsulacije (učahurivanja),

nasljeđivanja i polimorfizma – tri stupa objektno orijentiranog programiranja.

U C#-u, sve što je potrebno za deklariranje klase nalazi se u samoj deklaraciji. Definicije C#

klasa ne zahtijevaju posebne datoteke zaglavlja. Uz to, C# podržava novi XML stil

dokumentiranja koji pojednostavljuje izradu dokumentacije.

C# podržava sučelja, koja su poput ugovora s klasom o pružanju usluga koje sučelje

zahtjeva. U C# klasa može nasljeđivati samo iz jedne roditeljske klase, ali može

implementirati više sučelja. Kada implementira sučelje, C# klasa ustvari obećava pružiti

funkcionalnost koje sučelje zahtjeva.

C# pruža i podršku za strukture, tip podatka čije se značenje značajno promijenilo u

odnosu na C++. U C# struktura je ograničeni jednostavan tip koji prilikom instanciranja

manje opterećuje operacijski sustav i memoriju od obične klase. Struktura se ne može

nasljeđivati iz klase niti se iz nje može nasljeđivati, ali struktura može implementirati sučelje.

C# pruža potpunu podršku za delegate kako bi se omogućilo neizravno pozivanje

metoda. U drugim jezicima, poput C++, može se pronaći sličnu funkcionalnost (npr.

pokazivač na metodu), ali delegati su referentni tipovi koji enkapsuliraju metode s posebnim

potpisima i povratnim tipovima.

C# nudi komponentno orijentirane značajke, poput svojstva, događanja i deklarativnih

konstrukcija (kao što su atributi). Komponentno orijentirano programiranje podržava

43

spremište metapodataka u kojem se nalazi kod za klasu. Metapodaci opisuju klasu, zajedno s

njenim metodama i svojstvima, kao i njene sigurnosne potrebe i druge atribute, poput

mogućnosti serilizacije. Prevedena klasa je, dakle, samostojna jedinica. Stoga, okruženju koje

zna pročitati metapodatke i kod klase nisu potrebne druge informacije za korištenje klase.

Ako se koristi C# i CLR, klasi se mogu dodati prilagođeni metapodaci stvaranjem

prilagođenih atributa. Isto tako, metapodaci klase se mogu pročitati s pomoću CLR tipova koji

podržavaju refleksiju.

Prevođenjem koda zapravo stvara se sklopovlje (eng. assembly). Sklopovlje je

kolekcija datotekakoju programer vidi kao jednu dinamički povezanu biblioteku (DLL) ili

izvršnu datoteku (EXE). Na .NET platformi sklopovlje je osnovna jedinica za ponovnu

uporabu, praćenje inačica, zaštitu i razmještaj.

I na kraju treba još napomenuti kako C# daje podršku i za izravan pristup memoriji

pomoću pokazivača u stilu jezika C++. Takav kod se naziva neupravljiv kod i potrebno je

upozoriti CLR sakupljač otpada da ne sakuplja te objekte dok se eksplicitno ne oslobode. [5]

44

5 ARHITEKTURA ORIJENTIRANA SERVISIMA – SOA

5.1 Uvod

SOA (eng. Service-Oriented Architecture) je stil arhitekture koji omogućava stvaranje

aplikacija koje su napravljene na labavoj povezanosti i interoperabilnosti servisa. Ti servisi

međusobno djeluju preko formalnog sučelja koje je neovisno o platformi i programskom

jeziku. Jedan od načina implementiranja SOA su Web Servisi. To je tehnologija koja se

sastoji od kolekcije standarda koji se mogu upotrijebiti za izgradnju SOA aplikacije. Web

Servisi su tehnologija koja je neovisna o proizvođačima i platformi, interoperbilna i

podržavaju je mnogi proizvođači.

SOA je princip dizajniranja softvera bazirana na servisima. oslanja se na servise

dostupne računalnim mrežama kao što su www, tcp...

Arhitektura bazirana na servisima temelji se na labavoj povezanosti. To znači da servisi

i korisnici koji ih koriste su međusobno neovisni za razliku od dosadašnjeg pristupa gdje su

povezani što je karakteristično za objekte.

Da bi neka aplikacija bila nazvana kao SOA potrebno je da zadovolji dva kriterija, a to

su da ta aplikacija koristi servise ili da se ta aplikacija koristi kao servis.

Zašto je došlo do ideje razvoja aplikacija kao SOA aplikacija? Prve aplikacije su pisane

kao monolitne. Postajale su sve složenije i složenije. Te samo pisanje programa postaje

složeno, a iskoristivost postojećeg koda je nedovoljna. Zbog to ga se krenulo u modularno

programiranje kako bi se riješio taj problem. No s tim rješenjem došli su novi problem poput

problema s održavanjem. Sljedeći korak u razvoju aplikacija bilo je objektno programiranje.

Objektno programiranje donijelo je mnogo prednosti, omogućilo je izradu kompleksnih

aplikacija, te bolju iskoristivost koda. No objektno programiranje tako ima neke nedostatke.

Zbog toga je uvedena nova razina apstrakcija za rješavanje kompleksnosti. To je arhitektura

temeljena na komponentama. Takva arhitektura donijela je kvalitetno rješenje za iskoristivost

koda i održavanje softvera. Funkcionalnost cjeline podijeljena je na manje funkcije i te

funkcije su enkapsulirane u komponente.

Arhitektura na komponentama je riješila većinu problema, no razvojem tehnologija

javili su se novi problemi kao što su: integracija aplikacija, različitost platformi, različitost

uređaja, distribuirani softver... [11]

45

Rješenje ovih problema nađeno je u arhitekturi baziranoj na servisima. Par formalnih

definicija SOA:

SOA je informacijska i komunikacijska (ICT) arhitektura koja pruža fleksibilnost

potrebnu za implementiranje elemenata poslovnog procesa i postavljanje potrebne ICT

infrastrukture u obliku sigurnih, standardiziranih komponenti (servisa) koje se mogu

višestruko koristiti i međusobno kombinirati kako bi zadovoljile različite poslovne

procese.

SOA je široko rasprostranjena ICT arhitektura koja se temelji na labavoj povezanosti (eng.

loose coupling), višestrukoj iskoristivosti (eng. reuse) i interoperabilnosti između različitih

programskih i organizacijskih sustava

SOA je aplikacijska arhitektura u kojoj su sve funkcije i usluge (servisi) definirani

pomoću standardiziranog jezika (eng. description language) te posjeduju pristupna sučelja

pomoću kojih se pozivaju s ciljem potpore određenim segmentima s ciljem potpore

određenim segmentima poslovnih procesa. Svaki pristup i interakcija između servisa je

neovisna od interakcija između servisa je neovisna od ostalih interakcija i

komunikacijskih protokola. Budući da su sučelja neovisna o platformama, klijent može

pristupati i koristiti servise s bilo kojeg uređaja, bilo kojeg operacijskog sustava i

programskog jezika.

Neke od važnijih karakteristika SOA su: Podržavanje ineroperabilnosti koja se temelji na

standardima, heterogenost, raspoloživost i fleksibilnost i sigurno upravljanje komponentama.

Važni i pojmovi vezani za SOA-u su:

Servis: Poslovna funkcija koju obavlja davatelj usluga pa potencijalnog korisnika. Servis

prihvaća jedan, dva ili više zahtjeva te nakon obrade vraća isto toliko odgovora i to kroz

standardizirano sučelje. Servisi ne ovise od stanjima drugih funkcija i servis. Tehnologija

korištena za razvoj servisa se smatra nebitnom informacijom. Cilj svakog servisa je postići

željene rezultate za korisnika.

Service Provider: je strana koja kreira servis kao odgovor na zahtjev korisnika, tj.

pružatelj usluge-

Service requestor: je ustvari korisnik servisa koje je dostavio provider. [11]

Orkestracija (eng. orchestration): Sekvenciranje servisa i omogućivanje dodatne logike

potrebne za obradu podataka

46

Stateless: To znači da servis nije ovisan o prijašnjim stanjima, te stanjima drugih procesa.

Discovery (otkrivanje): SOA se oslanja na mogućnost indetificiranja servisa i njegovih

mogućnosti. Postoje direktoriji koji opisuju servise u svojoj domeni.

Binding (povezivanje): Odnos između providera i korisnika je dinamički, što znači da se

uspostavlja pomoću mehanizma za povezivanje u toku interakcije.

Nakon upoznavanja s osnovnim pojmovima SOA arhitekture sljedeće što treba opisati su

komponente koje sačinjavaju SOA-u.

Servis: Servis ima sučelje koje je neovisni o platformi i preko kojeg komunicira s

okolinom. Servisi se mogu dinamički locirati i pozvati te su neovisni o stanjima drugih

procesa.

Opis servis: kao što samo ime kaže opisuje servis navodeći sve detalje o servisu kao što

su: parametri, ograničenja, svrha, način korištenja...

Poruke: Temelj komunikacije SOA-e. Pružatelj usluge i korisnik usluge komuniciraju

izmjenom poruka. Tehnologija koja se koristi za definiranje poruka mora biti neovisna o

platformi. To je većinom riječ o XML-u.

Oglašavanje servisa: je metoda kojom se potencijalnim korisnicima daje opis servisa.

Postoje dvije metode:

Pull - potencijalni korisnik šalje zahtjev za opisom metode.

Push - pružatelj usluga šalje opis potencijalnim korisnicima

(npr. Unicast, Mulitcast)

Otkrivanje servisa: Za otkrivanje servisa koristi se Directory Service. Directory service

kategorizira servise po kriterijima. Na temelju tih kriterija korisnik može pronaći servis

koji mu odgovara. [11]

47

5.2 Model arhitekture orijentirane servisima

SOA logički model sastoji se od šest dijelova: postojećeg sustava, sloja za prijenos

podataka, sloja funkcijskih servisa, sloja poslovnih procesa, sloja poslovnih servisa i

prezentacijskog sloj.

Ovaj model u suštini se bazira na principu arhitekture tri razine (eng. three-tier), a to su

prezentacijska razina, razina poslovne logike i razina podataka. Ovi dodatni slojevi ili razine

služe kao apstrakcijski slojevi kako bi osigurali da glavne razine nisu strogo povezane. Na taj

način se osigurava manja složenost implementacije.

Važno je naglasiti da se logički model ne mora uvijek poklapati sa fizičkim modelom.

Prezentacijski sloj (eng. Presentation layer):

Prezentacijski sloj obuhvaća korisničko sučelje i različite načine implementacije kao što

su windows klijent, web stranica TD.

Sloj poslovnih servisa (eng. Business services layer):

Ovaj sloj predstavlja ugrubljenu sliku poslovnih servisa i na taj način enkapsulira i

apstrahira kompleksnost tehničke implementacije koja se nalazi ispod toga. Ovakva slika

poslovnih procesa jednaka je poslovnim procesima koji nisu vezani za specifičnu softversku

aplikaciju. Ovaj sloj se dalje dijeli na tri dijela, Enterprise Services, Process Services i Event

Services. Više o ovim dijelovima malo kasnije.

Sloj poslovnih procesa (eng. Business process logic layer):

Poslovni procesi se kreiraju, održavaju i izvršavaju u ovom sloju. Ovaj sloj se dijeli na dva

djela:

Sinkronizirani servisi - sinkroni pozivi se baziraju na jednostavnosti i brzini i imaju

ograničenu količinu orkestracije.

Asinkronizirani servisi - asinkroni pozivi mogu sadržavati dugotrajne transakcije ili

orkestracije preko različitih servisa i slojeva

Sloj funkcijskih servisa (eng. Functional services layer): [3]

48

Slika 5-11: SOA Model [3]

Sloj funkcijskih servisa je ulazna točka za sloj za prijenos podataka. Ovaj sloj štiti sloj

poslovne logike od potrebe da zna kako je implementiran sloj ispod. Time se smanjuje

složenost poslovne logike i ona će ostati nepromijenjena sve dok postoji konzistentno sučelje.

49

Sloj za prijenos podataka (eng. Data transport layer):

Ovaj sloj direktno komunicira sa postojećim sustavom kroz niz različitih protokola i

tehnologija. Sloj za prijenos podataka je vrlo složen jer omogućava komunikaciju s različitim

platformama.

Postojeći sustav (eng. Existing systems layer):

Ovaj sloj predstavlja različite postojeće i zastarjele sustave s kojima sloj za prijenos

podataka komunicira.

5.2.1 Tipovi XML servisa

XML servisi su podijeljeni u dvije osnovne kategorije. Te kategorije predstavljaju

servise koji imaju sličnu namjenu i konfiguraciju. Glavna karakteristika korištenja ovih

kategorija je u to što ubrzava i pojednostavljuje razvoj servisa. [3]

Entity Services - predstavljaju jednostavne atomske operacije na entitetu. Entitet u ovom

slučaju može biti jednostavna CRUD operacija.

Activity Services - Upravljaju sa nekoliko Entety servisa kako bi omogućile izvedbu

poslovnih funkcija.

Process services - predstavljaju dugoročne poslovne procese koji uključuju i čovjekovu

interakciju.

Enterprise Services - prestavljaju javne usluge kao Internet/B2B. One zahtijevaju

maksimalnu sigurnost. Isto tako ovi servisi zahtijevaju veću razinu robusnosti i otpornosti.

Infrastructure Services - pružaju česte funkcionalnosti drugim servisima.

Event Services - obavještava pretplatitelje da se neki događaj dogodio. Ovo je alternativa

"pollingu" koji se koristi kad dođe do promjene podataka.

Dominante platforme za razvoj SOA aplikacija su J2EE i .NET iako SOA nije ograničena

na te platforme. [3]

50

6 QUALITY CONTROL SOFTWARE

Quality Control Software (QCS) je softver koji bi trebao omogućiti digitalnu

implementaciju sustava kontrole kvalitete, ISO 9001 i HACCP-a. Iako je aplikacija

zamišljena da podržava cijeli ISO9001 standard, ovdje će biti opisano samo onaj dio vezan za

HACCP. QCS je napravljena kao višerazinska SOA aplikacija. To znači da se sama aplikacija

sastoji od više slojeva tj. razina. QCS, kao i većina višerazinskih aplikacija, se sastoji od tri

sloja: podatkovnog sloja, poslovnog sloja i prezentacijskog sloja. Razlog za ovakvu

arhitekturu je prije svega skalabilnost, u slučaju promjene na aplikaciji podjela na razine može

uvelike olakšati obavljanje promjena bez toga da se te promjene odraze na druge slojeve.

Navedeno je prije da se također radi o SOA aplikaciji. To znači da se aplikacija sastoji od

servera koji nudi neki servis i klijenta koji koristi taj servis. Na serverskoj strani su

implementirana dva sloja: podatkovni sloj i poslovni sloj. U podatkovni sloj se ubraja sav onaj

kod koji ima veze sa upisivanje podataka u bazu i čitanje tih podataka. Poslovni sloj sadrži

svu poslovnu logiku aplikacije te omogućuje komunikaciju s klijentom.

U klijentu je implementiran prezentacijski koji ima zadaću korisniku prezentirati podatke

obrade te omogućiti komunikaciju korisnika s aplikacijom. Za spremanje podataka korištena

je baza podataka, MSSQL Server 2008. U narednim poglavljima bit će detaljno opisana baza,

server i klijent QCS aplikacije.

6.1 Baza podataka

Modeliranje baze podataka pokazalo se kao najteži problem prilikom dizajniranja QCS-

a. Baza podataka je specifična po tome što u njoj mora biti izmodeliran cijeli poslovni sustav,

te u slučaju lošeg modeliranja, dizajn aplikacije može biti težak pa čak i nemoguć. Ovdje će

biti opisan samo jedan veći dio baze tj. sve one tablice koje obuhvaćaju HACCP. Iako je to

samo jedan dio, on je dosta velik pa će biti opisan u nekoliko dijelova. Bazu je najlakše

opisati ako je promatramo kao skup grupa tablica. Među tim grupama tablica, naravno postoje

veze, ali najdirektnija i najuočljivija veza je kroz tablice QCS_organizationworker_orgwrk i

QCS_Action_act. Te dvije tablice su ujedno i najvažnije. Prva tablica predstavlja aktivno

radno mjesto u nekoj organizaciji gdje se koristi HACCP, a druga predstavlja akcije koje

određeno radno mjesto može obaviti nad određenom tablicom. Pošto u HACCP standardu

svaki dokument i svaku akciju je potrebno prvo napraviti pa onda odobriti i izvršiti, ove dvije

tablice su gotovo povezane sa nekom vrstom veze skoro na svaku tablicu u bazi. Dok je

51

QCS_action_act jednostavna, sadrži samo naziv akcije, QCS_organisationworker_orgwrk je

malo složenija. Sastoji se od devet polja. Četiri od ta polja predstavljaju vezu prema

tablicama: QCS_workplace_wp, koja sadrži naziv radnog mjesta, QCS_department_dep,

sadrži odjele organizacije, QCS_user_usr, sadrži popis korisnika sustava tj. organizacije te

QCS_logger_log, koja sadrži popis vremena kad se pojedini korisnik prijavio i odjavio iz

sustava. Dakle po dosad viđenom radnik organizacije sastoji se od više tablica koje su spojene

preko tabliceQCS_organisationworker_orgwrk, gdje jedan zapis te tablice predstavlja jedno

radno mjesto u organizaciji. Iz ovoga slijedi da je moguće da jedan korisnik sustava može

imati više radnih mjesta. Ostala polja tablice QCS_organisationworker_orgwrk su:

reportsTo, koje sadrži primarni ključ tablice reda gdje se nalazi nadređena osoba,

isHACCPTeam, bolean polje koje identificira da li radnik pripada HACCP timu te

isLeaderHACCP, polje koje identificira da li se radi o voditelju HACCP tima. Još su ostala

dva polja za opisati, jedno je id_orgwrk koje predstavlja primarni ključ tablice, a drugo je

organization_orgwrk. Ovo je posebno polje i nalazi se skoro u svakoj tablici, tj. u onim

tablicama kojima je to potrebno. Radi se o polju koje sadrži primarni ključ organizacije i na

taj način definira koje red tablice pripada kojoj organizaciji. Jer je QCS zamišljen da bude

upotrjebljen u više organizacija. To bi bile te dvije tablice. Sad će ukratko biti opisane

pojedine grupe tablica. U prvu grupu tablica spadaju tablice koje opisuju organizaciju, odjele

organizacija te radna mjesta pojedenih organizacija. U tu grupu spadaju tablice:

QCS_organisation_org, QCS_department_dep, QCS_workplace_wp, QCS_phone_ph.

Drugu grupu tablica predstavljaju tablice koje su vezane za dokumente. To su redom

tablice: QCS_document_docs, QCS_revision_rev, QCS_hardcopy_hc, QCS_norm_nrm,

QCS_chapter_ch, QCS_doc_nrm. U treću grupu tablica spadaju tablice koje predstavljaju

procese, analizu rizika i HACCP plan. Iako se ovdje radi o tri različite stvari one su

međuovisne i zbog tog su stavljene u istu grupu. Tablice koje ovdje pripadaju su:

QCS_process_pro, QCS_process_step_ps, QCS_resources_res, QCS_pro_pro,

QCS_pro_res, QCS_risk_analysis_plan_rap, QCS_risk_analysis_process_step_raps,

QCS_hazard_analysis_hs, QCS_HACCP_plan_haccp, QCS_HACCP_process_step_hps.

Zadnja skupina tablica predstavlja tablice koje predstavljaju obrasce. Iako ISO 9001

ima puno više obrazaca, ovdje su implementirane samo one koje imaju veze sa HACCP-om.

Tablice su: QCS_obkk02_kk02, QCS_obpr21_pr21, QCS_obkk01_kk01, QCS__obkk03_kk03,

QCS_obpr14a_pr14a, QCS_obpr06_pr06, QCS_work_order_wo, QCS_obpr07_pr07,

QCS_obtr01_tr01 i QCS_temperature_temp.

52

Slika 6-12: Prva grupa tablica

53

Još treba spomenuti tablice koje su vezane za tablicu QCS_organisationworker_orgwrk.

Jedna od njih je QCS_ToDoList_tdl u kojoj se nalazi popis akcija koje korisnik mora obaviti,

prije spomenuti QCS_logger_log, u koje se nalaze vremena kad se neki korisnik prijavio i

odjavio o sustav te tablica QCS_modul_access_right_mar. QCS sustav bi trebao osigurati da

svatko ne može vidjeti niti mijenjati svaki dio aplikacije. Tj. QCS bi trebao osigurati pristup

pomoću rola. To se u bazi očituje kroz dva tipa tablice.

Jedan je QCS_modul_access_right_mar gdje je za svakog korisnika zapisano pravo pristupa

svakom modulu klijenta. Tri su razine pristupa. 0 korisnik nema pravo pristupa modulu, 1

korisnik može pristupiti modulu, ali ne može mijenjati podatke. 2 korisnik može mijenjati

podatke. Znači u ovoj tablici, za svakog korisnika, jedan red predstavlja pravo pristupa

jednom korisniku. Polja ima koliko i modula u klijentu te svako polje može poprimiti

vrijednosti 0,1,2 ovisno o pravu pristupa za pojedini modul. Drugi tip tablice vezane za pravo

pristupa su tablice naziva QCS_xxx_access_right_xxx. Ove tablice su vezane za svaku

pojedinu tablicu baze i u njoj su definirana prava pristupa korisnika pojedinom retku tablice

za koju je vezan. xxx se odnosi na zadnja tri slova tablice za koju je ova tablica vezana. Ova

vrsta tablica sadrži popis korisnika i njihova prava pristupa određenom redu tablice. Pomoću

Slika 6-13: Tablice vezane za korisnika sustava

54

ova dva tipa tablica osigurano je pravo pristupa unutar aplikacije. Dakle recimo da postoji

korisnik sa pravom pristupa 2 modulu dokumenti. On će moći pristupiti tom modulu., raditi

nove dokumente brisati postojeće, ali ako postoji neki dokument kojem je pravo pristupa

postavljeno na 0 taj ga korisnik neće moći mjenjati. Još je važno spomenuti i notaciju koja se

koristila za označavanje tablica i polja.

Svaka tablica je označena na načina da prva tri slova označavaju aplikaciju, iza njih

dolazi naziv tablice, a nakon naziva skraćenica naziva. Ovi dijelovi su odvojeni podvlakom.

Polja unutar tablice su označena svojim nazivom iza kojeg dolazi skraćenica tablice kako bi

se naglasila pripadnost toj tablici. Jedino primarni ključevi imaju oznaku id iza koje je sljedi

skraćenica tablice. Strani ključevi imaju oznake id iza koje slijedi skraćenica tablice i tablice

na koju pokazuje. Kompletna shema baze nalazi se u prilogu.

Još na kraju mora se spomenuti i tipove korisnika aplikacije i baze. Dva su tipa,

administratori i korisnici. Administratori mogu pristupati svemu dok obični korisnici mogu

pristupati ovisno o svojim pravima. Prilikom instalacije baze dodaje se test organizacija,

odjel, radno mjesto i admin korisnik.

6.2 Server

Prilikom dizajniranja servera glavni preduvjet je bio da bude skalabilan tj. u slučaju

uvođenja novih standarda kontrole kvalitete, da je moguće dodati serveru nove mogućnosti uz

male preinake u kodu. To je postignuto korištenjem WCF servisa. Prednost ovakvog načina je

u tome da ukoliko se želi dodati nove funkcionalnosti jednostavno se napravi novi servis i

priključi se postojećem. Svi servisi se moraju negdje postaviti kako bi ih drugi mogli koristiti.

U slučaju QCS-a servisi se pokreću unutar QCS servera. QCS Server je mala aplikacija

jednostavnog dizajna. Njezina prvenstvena zadaća je pokretanje i zaustavljanje servisa. Što se

tiče samog izgleda aplikacije vrlo je jednostavan: sastoji se od dva gumba, jedan za pokretanje

servera, a drugi za zaustavljanje servera. Aplikacija nije nametljiva te kad se je minimizira

ona se postavi u programskoj traci (eng. system tray) i tu obavlja svoju zadaću. Logika

aplikacije je također jednostavna. Sastoji se od toga da se metodom

InitService();

inicijalizira WCF servis ili servisi. Te ovisno o tome da li se klikne na gumb start ili stop

pokreće se servis. Inicijalizacija servisa obavlja se kroz nekoliko koraka. Prvo se inicijalizira

55

ServiceHost objekt koji se nalazi u imenskom prostoru System.ServiceModel. Njemu se kao

argument šalje tip servisa tj. sučelje servisa. Nakon toga se definira EndPoint tj. krajnja točka

preko koje klijent može komunicirati s servisom. U EndPoint metodi definiraju se ABC

servisa. Tj. Adresa servisa, zapisana je u app.config datoteci te se može mijenjati po potrebi.

B označava način komunikacije (eng. binding), za QCS odlučeno je da će se koristiti

netTcpBinding jer će se aplikacija koristiti unutar jedne organizacije tj. mreže. I na kraju C,

označava ugovor odnosno njime se definira sve operacije i podaci koji su na raspolaganju

klijentu. I to je to sad jedino što treba napraviti je pokrenuti ili zaustaviti servis.

Iz ovog se vidi kako je lako dodati nove mogućnosti postojanoj aplikaciji, samo treba

definirati novi servis unutar servera. Ne treba se mjenjati postojani servis. Za potrebe

diplomskog razvijen je QCSservice servis koji pruža sve metode potrebne klijentu vezane za

HACCP. Servis se sastoji od dva dijela: QCSDataBaseModel-a i samog servisa.

QCSDataBaseModel je Entity Framework model i predstavlja podatkovni sloj aplikacije.

Slika 6-14 Prozor server aplikacije

Više o Entity Frameworku je bilo riječi ranije. Prednost QCSDataBaseModel je u

tome što ga sam razvojni alat izgenerira na temelju postojeće baze. On sadrži objekte koji

predstavljaju tablice baze te se sam brine o komunikaciji s njom. Ovo je dobar princip jer

56

nigdje nije korišten SQL kako bi se pristupilo podacima već je to napravljeno poznatom

sintaksom C# i LINQ-a kao da se pristupa bilo kojem drugom objektu. Dio podatkovnog sloja

i cijeli poslovni sloj implementirani su unutar dvije datoteke koje predstavljaju QcsService.

To su IQcsService.cs i QcsService.cs. Unutar IQcsService.cs datoteke kao što se može

pretpostaviti definirano je sučelje servisa i tipovi podataka koje će servis primati i slati. Ovo

se sučelje koristi prilikom definiranja krajnjih točaka. Metode i tipove podataka također ćemo

podijeliti u grupe kako bi bilo lakše pratiti. Prvu grupu predstavljaju metode i tipove koji su

vezane za opće stvari vezane za servis. Operacije koje se tu ubrajaju su:

Tablica 6-1: Prva grupa operacija

AutenticationInfo Autenticate(string username, string pass);

bool IsServiceAvailable();int LoggedIn(string username, string password);

bool LoggedOff(int logID);SuperVisor GetSupervisor(int workplaceId);

List<Task> GetTasks(int workPlaceId);

Tipovi podataka koji tu ubrajaju:

Tablica 6-2: Tipovi prva grupe

AutenticationInfoAutenticationOrganisationAutenticationWorkPlace

AutenticationUserAccessRightSuperVisor

Task

Operacije

SuperVisor GetSupervisor(int workplaceId);

i

57

List<Task> GetTasks(int workPlaceId);

imaju zadaću osvježavanja početnog ekrana klijenta sa novim podacima. Više o početnom

ekranu bit će kad se bude opisivao klijent. Za sad operacija GetSupervisor na temelju

vrijednosti primarnog ključa radnog mjesta dobavlja podatke o radnikovoj nadređenoj osobi,

tako da on u svakom trenutku zna kome se može obratiti kad mu nešto zatreba. Dakle klasa

Supervisor sadrži podatke o korisnikovu šefu. Operacija GetTasks dobavlja sve zadaće koje

korisnik mora obaviti. Ove informacije dobiva iz tablice QCS_ToDoList_tdl. Klasa Task se

sastoji od tri elementa: Opisa radnje, predloženog datuma izvršenja i modula u kojem se ta

radnja treba obaviti.

Operacija

AutenticationInfo Autenticate(string username, string pass);

prima kao argumente korisničko ime i lozinku, provjerava da li postoji ti podaci u bazi

te ako postoje vraća objekt tipa AutenticationInfo koji sadrži sve podatke potrebne klijentu da

se pokrene. Ukoliko ne naiđe na te podatke u bazi vraća null referencu. AutenticationInfo

objekt sačinjavaju sljedeći elementi. Ime i prezime korisnika, njegov primarni ključ u tablici

te lista objekata tipa AutenticationOrganisation. Objekt tipa AutenticationOrganisation

predstavlja organizacije u kojima je korisnik prijavljen kao radnik. Elementi

AutenticationOrganisation su ime organizacije i lista objekata tipa AutenticationWorkPlace.

Tip AutenticationWorkPlace predstavlja radno mjesto korisnika unutar organizacije. Elementi

tipa AutenticationWorkPlace su primarni ključ radnog mjesta, naziv radnog mjesta, primarni

ključ tablice QCS_modul_access_right_mar, te objekt tipa AutenticationUserAccessRight.

AutenticationUserAccessRight je ustvari objekt koji sadrži tip Dictionary<> u kojem su

spremljeni par ključ i vrijednost. Ključ u ovom slučaju je ime modula, a vrijednost razina

pristupa. Dakle AutenticationInfo sadrži sve podatke koji su potrebni da bi se identificiralo

korisnika, a to su ime, prezime, sve organizacije u kojima radi i sva radna mjesta koja obavlja.

Operacija IsServiceAvailable samo provjerava da li je servis pokrenut. Vraća true ako je false,

ako nije. Sljedeće dvije operacije odnose se na praćenje korisnika u sustavu. Prva operacija

int LoggedIn(string username, string password);

58

zapisuje vrijeme u tablicu QCS_logger_log kad se korisnik logirao u sustav, vraća vrijednost

primarnog ključa tog zapisa. Druga operacija

bool LoggedOff(int logID);

na temelju vraćene vrijednosti ključa zapisuje vrijeme kad se korisnik odjavio iz sustava.

Sljedeća grupa operacija i tipova odnosi se na modul organizacija. Operacije koje

ovdje pripadaju su:

Tablica 6-3: Operacije modula organizacija

List<Organisation> GetOrganisations();List<string> GetAllDepartments();List<string> GetAllWorkplaces();

bool UpdateOrganisation(Organisation updateOrganisation);

bool UpdateDepartment(Department updateDepartment);bool UpdateWorkplace(DepartmentWorkPlace workPlace);

bool DeleteDepartment(Department department);bool DeleteWorkplace(DepartmentWorkPlace workPlace)

Tipovi:

Tablica 6-4: Tipovi vezani za modul organizacija

OrganisationPhone

DepartmentDepartmentWorkPlace

Operacija

List<Organisation> GetOrganisations();

vraća listu tipa Organisation. Tip Organisation predstavlja organizaciju tj. se atribute koji se

nalaze u tablici QCS_organisation_org, a to su vrijednost primarnog ključa, ime organizacije,

adresu organizacije, elektronička pošta i web stranica. Uz ova polja objekt tipa Organisation

59

sadrži i listu tipa Phone i listu tipa Department. Tip Phone predstavlja telefone organizacije.

Pošto se radi o listi moguće je zaključiti da organizacija može imati više telefona. Tip

Department predstavlja odjel organizacije. Elementi tipa Department su DepartmentId koji

sadrži vrijednost primarnog ključa, DepartmentType koji sadrži informaciju o tipu odjela,

DepartmentTitle sadrži ime odjela te dvije liste. Jedna je kao i kod tipa Organisation, Phone

predstavlja popis svih telefona, a druga je DepartmentWorkPlace koja predstavlja radno

mjesto koje se nalazi u pojedinom odjelu. Kao što vidimo radi se o klasama koje su dosta

slične grupi Autentication klasa. Operacije

bool UpdateOrganisation(Organisation updateOrganisation);

bool UpdateDepartment(Department updateDepartment);

bool UpdateWorkplace(DepartmentWorkPlace workPlace);

osvježavaju podatke u tablicama QCS_organisation_org, QCS_phone_ph,

QCS_department_dep i QCS_workplace_wp. Koriste prije opisane klase. Grupe klasa

namijenjenih za brisanje podataka

bool DeleteDepartment(Department department);

bool DeleteWorkplace(DepartmentWorkPlace workPlace);

su specifične po tome što one ustvari ne brišu podatke iz tablice, već postavljaju polje

isDeleted tablice u true čime obavještavaju server da ubuduće ne koriste te retke tablice tj. da

ih vodi kao obrisane. Razlog zbog čega je ovo napravljeno je u tome što većina obrazaca

mogu biti ispunjena ili odobrena od korisnika i odjela koje već ne postoji. Ukoliko bi ih

obrisali više ne bi imali zapisa o tome tko je te obrasce ispunio. Na ovaj način ne gubi se

podaci vezani za pojedine obrasce.

Sljedeća skupina operacija i klasa pripadaju modulu korisnici. Tu se ubrajaju ove

operacije:

Tablica 6-5: Operacije koje pripadaju modulu korisnici

List<UserOrganisation> GetUsers();int AddUser(UserWorkPlace wp);

60

bool DeleteUser(UserWorkPlace deletewp);bool UpdateUser(UserWorkPlace wPloa);

bool UpdateAccessRights(AutenticationUserAccessRight accessRight, int orgwrk);

Tablica 6-6: Tipovi modula korisnici

UserOrganisationUserDepartmentUserWorkPlace

Operacija GetUsers kao što je za i pretpostaviti dobavlja se korisnike sustava. Ona

vraća listu tipa UserOrganisation koja predstavlja organizaciju, odjele i korisnike te

organizacije. UserOrganisation klasa je slična klasama Organsation i

AutenitacationOrganisation. Klasa koja je specifična za ovu grupu je UserWorkPlace. Ona

sadrži sve podatke vezane korisnika te organizacije, poput naziva radnog mjesta, imena

prezimena itd.

int AddUser(UserWorkPlace wp);

bool UpdateUser(UserWorkPlace wPloa);

bool DeleteUser(UserWorkPlace deletewp)

su jako slične operacije jer koriste istu klasu kao argument. AddUser dodaje novi

zapis u tablicu QCS_organisationworker_orgerk, UpdateUser osvježava te podatke, a

DeleteUser briše podatke postavljajući element tablice IsDeleted u true. U ovoj grupi klasa

preostaje još samo za opisati operaciju

bool UpdateAccessRights(AutenticationUserAccessRight accessRight, int orgwrk);

Kad se doda novi korisnik dodaje se i novi zapis u tablicu

QCS_modul_access_right_mar sa vrijednostima 0. To znači da taj korisnik nema pravo

pristupa niti jednom dijelu aplikacije. Ukoliko mu se želi omogućiti pristup potrebno je

pozvati operaciju UpdateAccessRights koja će na temelju vrijednosti u klasi

AutenticationUserAccessRight postaviti prava pristupa za tog korisnika. Klasu

61

AutenticationUserAccessRight smo prije opisali, a drugi element je vrijednost primarnog

ključa korisnika. Pomoću toga se točno odredi kojem se korisniku želi omogućiti prava.

Operacije koje su potrebne HACCP modulu su:

Tablica 6-7: Operacije Haccp modula

List<HaccpDocs> GetHaccpMeeting(int orgId);bool UpdateHaccpMeeting(HaccpDocs hd);bool AddHaccpMeeting(HaccpDocs hd);bool DeleteHaccpMeeting(HaccpDocs hd)

List<Norms> GetNorms();List<HaccpTeam> GetHaccpTeam();

bool SetHaccpTeam(List<HaccpTeam>);HaccpSettings GetSettings();

Bool SetSettings(HaccpSettings);List<Process> GetProcess(int org);

List<RiskAnalysis> GetRiskAnalysis(int org);bool SetRiskAnalysis(RiskAnalysis);

bool DeleteRiskAnalysis(RiskAnalylsis);List<HaccpPlan> GetHaccpPlan(int org);

bool SetHaccpPlan(HaccpPlan);bool UpdateHaccpPlan(HaccpPlan);bool DeleteHaccpPlan(HaccpPlan)

Tipovi koji idu uz prije navedene operacije su:

Tablica 6-8: Tipovi Haccp modula

HaccpDocsNorms

HaccpSettingsHaccpTeam

RiskAnalysisHaccpPlan

62

Zadnja skupina klasa obuhvaća operacije i klase vezane za obrasce. Tu spadaju

operacije:

Tablica 6-9: Operacije modula obrasci

NewForm(Form form);bool UpDate(Form form);

bool DeleteForm(Form form);

Te o veliki skup klasa koje predstavljaju pojedini obrazac. No jedna klasa je svima

zajednička. Radi se o kontejner klasi Form. Ona se sastoji od dva elementa. Prvi element

opisuje o kojem se obrascu radi, a drugi element tipa object sadrži klasu koja predstavlja taj

obrazac. Naravno kao što možemo vidjeti klasu obrasca potrebno je pretvoriti u objekt te

kasnije na serveru je pretvoriti natrag u originalni tip. Da nije ovako napravljeno bilo bi

potrebno napraviti po tri nove operacije za svaki obrazac. U svrhu diplomskog implementiran

je jedan obrazac pod nazivom OB-KK-02 – kontrolnik temperature. On je predstavljen

pomoću tri klase: KK02Record, KK02Action i RecordAccessRight. KK02Record predstavlja

jedan zapis. Elementi tog zapisa su prostorija, vrijeme, opis, lista akcija i prava pristupa.

Svaka akcija koja se primjenjuje na obrazac predstavljena je klasom KK02Action koja

nasljeđuje klasu Action. Pod akcijom se podrazumijeva izrada, odobravanje i verificiranje.

Prema tome KK02Action sadrži naziv akcije, datum akcije i odgovornu osobu. Klasa

RecordAccessRight se sastoji od rječnika kojemu je ključ vrijednost primarnog ključa tablice

QCS_organisationworker_orgwrk, a vrijednost pravo pristupa tj. 0,1,2.

Kao što je prije navedeno sve ove klase i operacije deklarirane i definirane su u dvije

datoteke, QcsService.cs i IQcsService.cs. U QcsService nalazi se implementacija svih

operacija, dok se deklaracija operacija i tipova podataka nalazi u IQcsService.cs. Ove dvije

datoteke praktički sačinjavaju servis QCS aplikacije, a taj servis se pokreće i održava unutar

server aplikacije QCSserverComponent.

6.3 Klijent

Sljedeći sloj aplikacije je prezentacijski sloj. On prezentira sadržaj korisniku i

omogućuje korisniku da interakciju sa sustavom. Prezentacijski sloj QCS-a je klijent

aplikacija. Ona je zamišljena kao aplikacija sa plugin-ovima koja bi trebala sadržavati

različite plugin-ove koji bi trebali obavljate različite funkcije. Svaki plugin bi trebao pružati

63

neke od funkcionalnosti koje zahtijevaju standardi za kontrolu kvalitete ISO 9001 i HACCP.

Zamišljeno je da postoje deset plugin-a koji bi trebali u potpunosti enkapsulirati kontrolu

kvalitete. Za potrebe ovog rada razvijena su četiri dodatka: organizacija, korisnici, haccp, i dio

obrazaca, više o njima kasnije. Ovakav način razvijanja programa je uzet u obzir prije svega

jer je preglednije i lakše razvijati aplikaciju, a drugi razlog je taj što se standardi za kontrolu

kvalitete mijenjaju i dopunjavaju pa na ovakav način je lakše dodati nove i izmijeniti

postojeće funkcionalnosti.

QCS klijent sastoji se od dva WPF prozora. Prvi prozor je prozor za prijavu. U njemu

korisnik upisuje svoje korisničko ime i lozinku. Prozor za prijavu kontaktira server preko

operacije

Autentacate(string username, string pass);

U slučaju da takav korisnik ne postoji log in prozor obavještava o grešci i ponovno

omogućava unos. Ukoliko takav korisnik postoji server vraća objekt tipa AutenticationInfo

kojeg prozor za prijavu prosljeđuje prozoru MainWindow koji je ustvari aplikacija domaćin3

(eng. plugin host).

Da bi uopće mogli razviti plugin sustav potrebno je definirati sučelje kojeg će dijeliti

dodatak i host aplikacija. Sučelje koje mora implementirati dodatak definirano je unutar

datoteke IQCSPluginInterface.cs. Metode koje sadrži to sučelje su

: PlugInInfo GetPlugInInfo();

IEnumerable<SidebarItem> GetSidebarInfo();

bool Operate(string operation);

bool GetData(AutenticationInfo info);

bool SetRights(string organisation,string workplace;string name, string lastname, int right);

void InitHost();

void ShowToolbar();

3 Hrvatski naziv je jako nespretan pa će se koristiti engleski ekvivalent

64

Metoda GetPlugInInfo dobavlja objekt tipa PlugInInfo. Tip PlugInInfo sadrži opće

informacije o dodatku kao što su naziv, verzija opis i ikona. Inače svi tipovi koje koriste

dodaci i host aplikacija definirani su unutar posebne biblioteke koja se zove TypeLibrary. Na

ovaj način ukoliko netko želi razvijati za QCS svi tipovi su dostupni ako se biblioteka doda u

projekt. Sljedeća metoda je GetSidebarInfo. Ova metoda vraća kolekciju tipa SidebarItem.

Slika 6-15: Forma za prijavu

Više o tipu SidebarItem će biti riječi kasnije kad bude opisivalo sučelje MainWindow-a.

Za sad dosta je reći kako SidebarItem sadrži informacije potrebne host aplikaciji kako bi

nacrtala elemente koje su potrebni plugin-u. Pomoću metode Operate; host aplikacija pokreće

akcije u plugin-u. Koju će akciju pokrenuti ovisi o argumentu metode koji je tipa string. Vrstu

akcije i način na koji će biti implementirana metoda Operate u potpunosti ovisi o dizajneru

plugin-a. Naziv akcije nalazi se unutar klase tipa SideBarItem. Metoda GetData bi trebala

imati funkcionalnost osvježavanja podataka unutar dodatka na temelju objekta tipa

AutenticationInfo. InitPlugIn metoda ima ulogu dodatne inicijalizacije plugin-a ukoliko cijelu

inicijalizaciju nije moguće obaviti u konstruktoru plugin-a. Metoda ShowToolbar omogućuje

dodatku da kontrolira koja će se dugmad pojaviti u alatnoj traci. Osim sučelja preko kojeg

host aplikacija komunicira sa plugin-om, ukoliko se ukaže potreba da dodatak koristi neke

metode hosta potrebno je napraviti novo sučelje koje će te metode otkriti dodatku. U slučaju

QCS hosta to je sučelje IHostInterface. Metode ovog sučelja su:

65

bool RefreshData();

bool SetFocus(string module);

CurrentUser GetCurrentUser();

i svojstvo

QcsService.IQcsService ServiceClient { get; }

Metoda RefreshData kao što samo ime kaže osvježava podatke unutar host aplikacije.

SetFocus metoda stavlja određeni plugin kao aktivni unutar host aplikacije, ovisno o

argumentu. GetCurrentUser omogućava plugin-u da sazna koje je trenutno aktivno radno

mjesto i organizacija unutar host aplikacije. Podaci o tome nalaze se u klasi CurrentUser.

CurrentUser kao i svi ostali tipovi definiran je unutar TypeLibrary biblioteke. Svojstvo

ServiceClient omogućava dodatku da komunicira sa serverom. Naime preko ovog svojstva

host otkriva operacije servera. Dakle host aplikacija vodi računa o komunikaciji s serverom a

pomoću IHostInterface otkriva operacije koje su dostupne dodatku. Osim ova dva sučelja koja

definiraju komunikaciju između plugin-a i host-a postoje još dva sučelja koja su potrebna da

MEF obavi spajanje plugin-a sa host-om i host-a sa plugin-om.

To su IPlugInmportInterface i IHostImportInterface. IPlugInmportInterface sadrži

svojstvo

IEnumerable<IQCSPlugInInterface.IPlugInInterface> PlugInn { get; set; }

kojeg će MEF, o MEF-u je bilo govora ranije, spojiti sa plugin-om koje implementira sučelje

IQCSPlugInInterface.IPlugInInterface, a sučelje IHostImportInterface sadrži svojstvo

IHostInterface Host { get; set; }

kojeg će MEF spojiti sa host-om koji implementira sučelje IHostInterface.

66

Osim sučelja koje definira komunikaciju između host aplikacije i dodatka potreban je

nekakav upravitelj koji će upravljati s učitavanjem i upravljanjem plugin-a. No da bi se

razumjela struktura i način rada upravitelja dodataka4 (eng. plugin manager) potrebno je

razumjeti vizualni izgled host aplikacije, jer je plugin manager ovisan o njoj.

Slika 6-16: Početna stranica QCS klijenta

Sučelje host aplikacije izgrađeno je pomoću DevExpress kontrola. To je set profesionalnih

kontrola koji omogućava brzu i laku izgradnju složenih sučelja. To je glavni razlog korištenja

tih kontrola. Izgled host aplikacije definiran je u datoteci MainWindow.xaml. Glavni element

unutar xmal datoteke je BarManager. On je kao korijenski tag i svi ostali tagovi se nalaze

unutar njega. On se sastoji od dva glavna dijela: BarManager.Items i DockPanel.

BarManager. Items je ustvari kolekcija elemenata koji se pojavljuju i koriste unutar

BarManager-a. Oni se mogu koristiti kasnije bilo gdje unutar xaml-a ukoliko se definira link

na njih. Elementi mogu biti DevExpress kontrole napravljene za rad s BarManager-om.

Većinom su to kontrole koje odgovaraju standardnim WPF kontrolama. Drugi dio

BarManagera je tag DockPanel. Kao što ime kaže unutar ovog taga mogu se smjestiti drugi

tagovi odnosno kontrole. DockPanel pozicionira elemente, koji se nalaze unutar njega, u

prozoru. DockPanel sadrži tri taga: RibbonControl, RibbonStatusBarControl,

DockLayoutManager. RibbonControl je tag koji predstavlja Ribbon toolbar kontrolu.

4 Također će se koristiti engleski ekvivalent u daljnjem teksu

67

RibbonControl ima mnogo svojstava, jedno svojstvo je ApplicationMenu gdje se definiraju

linkovi na prije definirane BarManagerItem elemente. Tagovi koji se mogu naći unutar

RibbonControl-a su RibbonDefaultPageCategory, RibbonPage, RibbonPageGroup. Ovi

tagovi sačinjavaju stranice Ribbon radne trake i oni će biti korišteni od strane upravitelja

dodataka za iscrtavanje gumbova koji su potrebni plugin-u. RibbonDefaultPageCategory

predstavlja standardnu kategoriju stranice radne trake. Ukoliko je potrebno mogu se definirati

i druge kategorije. Unutar kategorije nalazi se tag ili skup tagova RibbonPage koji

predstavljaju stranicu trake s alatima. Svaka stranica sastoji se od jedne ili više grupa,

RibbonPageGroup. Te grupe sadržavaju poveznice prema BarManagerItem elementima. Ovi

tagovi sačinjavaju stranice Ribbon radne trake i oni će biti korišteni od strane plugin manager-

a za iscrtavanje gumbova koji su potrebni plugin-u.

Drugi tag unutar DockPanel taga je RibbonStatusBarControl. Ovaj tag "zakačen" je za

dno prozora. On sadrži dvije poveznice na BarManagerItem tagove, tj. na dva combobox-a.

Treći, a ujedno i najvažniji element je DockLayoutManager.

Ova kontrola služi za postavljanje izgleda. Njezini djeca tagovi su dva LayoutGroup

taga. Prvi LayoutGroup tag sadrži navigacijsku kontrolu NavBarControl, a drugi LayoutPanel

tag gdje bi se trebalo učitavati korisničko sučelje plugin-a.

Posebno zanimljiv tag je tag koji predstavlja NavBarControl. Svaka NavBarControl kontrola

može imati jednu ili više NavBarGroup, svaka NavBarGroup jednu ili više NavBarItem.

Upravo NavBarControl sa svojom djecom poslužit će upravitelju dodataka za pristup

pojedinim dodacima.

Sad kad je opisan izgled stranice može se objasniti i način rada upravitelja dodataka.

Pošto se izgled sastoji host aplikacije sastoji od ribbon radne trake, navigacijske kontrole koja

je smještena na lijevoj strani središnjeg dijela koji bi trebao sadržavati korisničko sučelje

došlo se do ideje da se napravi set klasa koji bi trebao opisati izgled i funkcionalnosti gumba u

radnoj traci i plugin manager bi ih trebao znati pročitati i u skladu s tim i izvesti. Isto tako

svaka grupa NavBarControl kontrole bi trebala predstavljati jedan plugin, a kontrole unutar

nje dijelove dodatka. Prema tome sve informacije koje plugin manager pročita iz plugina

trebali bi se spremiti u NavBarControl kontrolu. I ovisno o tome koji se modul odabere u

NavBarControl kontroli to bi se sučelje iscrtalo LayoutPanel i gumbi dodali u radnu traku.

Ukratko plugin manager učita dodatak i spoji ga sa jednom grupom unutar NavBarControl

kontrole, ovisno na koji se dodatak klikne upravitelj dodacima iscrta potrebno korisničko

68

sučelje i gumbe te postavi zadana prava pristupa. Plugin manager se sastoji od nekoliko

metoda:

void InitializePlugin();

SetRights();

ShowModule_Click(object sender, EventArgs e);

private void Action_ItemClick(object sender, ItemClickEventArgs e);

bool EnableDisable(string page, bool enable);

bool EnableDisable(string page, string group, bool enabl

e);

bool EnableDisable(string page, string group, string but

Metoda InitializePlugin kao što ime kaže pretražuje zadani direktorij te inicijalizira

dodatke. Metoda prvo iz objekta tipa AutenticationInfo popunjava dva combobox-a

vrijednostima. Jednoga, vrijednostima dostupnih organizacija a drugoga dostupnim radnim

mjestima. Nakon toga uz Pomoć MEF radne okoline svojstvu PlugInn, koje vraća

IEnumerable<IQCSPlugInInterface.IPlugInInterface>, pridružuje plugin-ove. Nakon više ili

manje uspješnog pridruživanja foreach petljom se prolazi kroz kolekciju, i za svaki dodatak u

kolekciji stvara se jedna grupa i jedan element te grupe u NavBarControl kontroli. Pošto

standardna NavBarItem kontrola nije bila dovoljno dobra, napravljena je nova kontrola koja

nasljeđuje NavBarItem kontrolu i dodaje joj nekoliko novih svojstava i metoda. Dodatna

svojstva su:

public FrameworkElement UI { get; set; };

public List<ToolbarPage> GetToolbarPage { get; set; };

public int AccessRight { get; set};

69

FrameworkElementUI svojstvo sadrži referencu na korisničko sučelje plugin-a,

AccessRight sadrži pravo pristupa tog plugina-a na temelju kojeg će kasnije metoda SetRights

postaviti prava nad ostalim elementima u dodatku. GetToolbarPage svojstvo sadrži listu klasa

koje opisuju radnu traku i stranice unutar radne trake i gumbe unutar stranice. Ove klase su:

ToolbarPage, ToolbarPageGroup, ToolbarButton. One su također definirane u TypeLibrary

biblioteci. ToolbarPage sadrži podatke o imenu stranice, kategorije kojoj pripada listu

objekata tipa ToolbarPageGroup. ToolbarPageGroup klasa sadrži ime grupe i liste objekata

tipa ToolbarButton. ToolbarButton klasa sadrži ikonu, ime gumba i akciju koju gumb obavlja.

Slika 6-17 HACCP Modul

Osim ovih svojstava NavBarItemExtend, kako je nazvana klasa koja nasljeđuje

NavBarItem, ima i tri događaja (eng. event). doAction, setRights i refreshData. Ovim

događajima se pridodaju metode:

bool Operate(string operation);

GetData(AutenticationInfo info):

bool SetRights(string organisation, string workplace, string name, string lastname, int right)

70

iz plugin-a. Te će uz pomoć ovih događaja NavBarContol kontrola i EditBarButton

kontrola moći pokretati metode plugin-a.

Nakon što se InitPlugin metoda prošeta kroz sve elemente svojstva PlugIn i postavi

elemente NavBarControl kontrole pokreće se druga metoda upravitelja dodataka, a to je

SetRights;. Nakon njezinog izvršenja postavlja se početna stranica host aplikacije, ali o njoj

više kasnije. Natrag na SetRights metodu. Ova metoda prvo očitava koja je organizacija i

radno mjesto aktivno. Nakon tog prolazi kroz objekt tipa AutenticationInfo i pronalazi radno

mjesto. Nakon toga svakoj grupi NavBarControl kontrole postavlja vrijednost polja

AccessRight na pravo pristupa za selektirano radno mjesto. Ukoliko je pravo pristupa nula

onemogućuje tu grupu, ukoliko je jedan postavlja 1 kao pravo pristupa svakom elementu te

grupe i poziva metodu

SetRights(barEditItemLocation.EditValue.ToString(); barEditItem4.EditValue.ToString(), _info.Name, _info.Lastname, 1);

kako bi to isto napravio i plugin.

Sljedeća metoda se poziva svaki put kad se klikne na neki element NavBarControl

kontrole. To je ShowModule_Click metoda, a ona je ustvari obrađivač događaja (eng. event

handler) na događaj Click NavBarItemExtend objekta. Ova metoda na temelju Liste objekata

tipa ToolbarPage koje sadrži selektirani NavBarItemExtend iscrtava grupe radne trake i

gumbe. Te gumbima postavlja svojstva kao što su pravo pristupa i naziv akcije te pridodaje

obrađivač događaja Action_ItemClick; koji bi trebao obrađivati Click događaj gumba.

Naravno originalna klasa BarButtonItem nije zadovoljavala potrebu pa je zbog toga

napravljena klasa koja je nasljeđuje, BarButtonItemExtend. Ona ima dva dodatna svojstva

string GetAction { get; set; } koje opisuje akciju koju gumb obavlja i int AccessRight{ get;

set; } koje sadrži pravo pristupa gumbu. Tri preopterećene metode EnableDisable omogućuju

plugin-u da odlučuje koji će se dijelovi alatne trake prikazati a koji ne.

Zadnja metoda koja sačinjava upravitelj dodataka je

void Action_ItemClick(object sender, ItemClickEventArgs e);

Ova metoda je ustvari obrađivač događaja svih gumba u radnoj traci. Metoda prvo

provjerava da li korisnik ima pravo izvršiti akciju, to radi tako što provjeri svojstvo

71

AccessRight. Ako ima dovoljnu razinu prava pristupa pokreće metodu Operate, a argument

dobiva kao svojstvo BarButtonItemExtend objekta.

Slika 6-18: Tab Dokumenata unutar HACCP modula

Ove metode, kao što je rečeno prije, ove metode sačinjavaju plugin manager, koji je

središnji dio host aplikacije. Još je vrijedno spomenuti kako postoji posebna grupa unutar

NavBarContol kontrole koja se zove „Home“. Ona predstavlja početnu stranicu host

aplikacije. Početna stranica je zamišljena tako da korisnika obavijesti o tekućim akcijama koje

mora napraviti te mu omogućava da vidi tko mu je nadležna osoba. Početna stranica je

napravljena kao korisnička kontrola koja se instancija u host aplikaciji. Home kontrola se

sastoji od dvije manje korisničke kontrole, Boss kontrole i liste ToDoItem kontrole. Boss

kontrola pruža informacije o nadležnoj osobi, a ToDoItem predstavlja jednu akciju koju

korisnik mora obaviti. Boss Kontrola se sastoji od tri textbox-a koji predstavljaju radno

mjesto, ime i kontakt podatke nadležne osobe. ToDoItem se sastoji od dvije label kontrole u

kojima piše datum akcije i opis te gumba koji kad ga se klikne odnosi korisnika u

odgovarajući modul. InitHome metoda inicijalizira home kontrolu na zadane vrijednosti.

Metoda poziva operaciju servera GetTask koja na temelju vrijednosti primarnog ključa tablice

QCS_organisationworker_orgwrk dobavlja podatke iz tablice QCS_ToDoList_tdl. Nakon što

dobavi podatke metoda ih ubacuje u listu čiji su objekti tipa ToDoItem. Jedina preostala

72

metoda Host aplikacije koju je vrijedno spomenuti je InitConnection. Njezina zadaća

uspostava komunikacije s serverom. To radi na način da definira krajnju točku komunikacije,

EndPoint i na temelju tog EndPoint-a otvara komunikacijski kanala uz pomoć metode

_qcsServiceClient = ChannelFactory<QcsService.IQcsService>.

CreateChannel(new NetTcpBinding(), endPoint);.

Kao što se može vidjeti koristi tcp protokol za komunikaciju. Opisom InitConnection

metode gotov je opis host aplikacije, ona još sadrži nekoliko obrađivača događaja koji su

potrebni da bi aplikacija mogla raditi. Od njih najvažniji su

private void barEditItemLocation_EditValueChanged(object sender, RoutedEventArgs e);

private void barEditItem4_EditValueChanged(object sender, RoutedEventArgs e);

Ove metode su obrađivači događaja dva combobox-a koji se nalaze u statusnoj traci

host aplikacije. Jedan sadrži popis organizacija u kojima radi korisnik, a drugi popis radnik

mjesta koje korisnik obavlja unutar organizacije. U većini slučajeva jedan korisnik se nalazi

unutar jedne organizacije i radi na jednom radnom mjesto no ima slučajeva gdje to nije tako.

Zbog toga su postoje ova dva combobox-a koji bi trebalo omogućiti lakše snalaženje

korisnika. Inicijalno aplikacija postavlja prvu organizaciju kao aktivnu te prvo upisano radno

mjesto kao aktivno radno mjesto. U slučaju da korisnik želi to promijeniti on jednostavno

odabere ono što želi iz combobox-eva. Ako se odabere druga organizacija pokreće se

barEditItemLocation_EditValueChanged obrađivač događaja. On jednostavno prođe kroz

popis organizacija unutar objekta tipa AutentictionInfo, i kad pronađe organizaciju, njezina

radna mjesta učita u combobox koji predstavlja popis radnih mjesta, te postavlja prvo radno

mjesto kao inicijalno. To radi tako da popuni svojstvo EditValue nazivom tog radnog mjesta.

Kad se postavi EditValue svojstvo okida se događaj koji pokreće obrađivač događaja

barEditItem4_EditValueChanged. Pošto svako radno mjesto nema isti pristup modulima

barEditItem4_EditValueChanged ima zadaću postaviti početnu stanicu kao aktivni modula,

zatim postaviti prava pristupa ostalim dodacima te to sve iscrtati. To postiže tako da pokreće

metode SetRights, ShowModule_Click i InitHomePage.

73

Host aplikacija sve svoje postavke sprema u app.config datoteku. Te postavke

uključuju, direktorij dodataka, adresu servera. Da bi se spriječilo korisnika da piše po

app.config datoteci Host aplikacija ima mali prozor s postavkama gdje korisnik može

promijeniti direktorij plugin-a. Ovom prozoru se pristupa preko File izbornika host aplikacije.

Ovim je u potpunosti opisana host aplikacija koja može primati dodatke koji implementiraju

IQCSPlugInInterface.IPlugInInterface i IQCSPlugInInterface.IHostImportInterface sučelje.

6.4 Moduli

QCS sustav je zamišljen kao sustav od 10 plugin-a tj. modula od kojih svaki obavlja neku

funkcionalnost: organizacija, korisnici, dokumenti, procesi, auditi, preduvjetni program,

nesukladnost, haccp, edukacija, obrasci. Za potrebe diplomskog rada razvijene su četiri

plugina: Organizacija, Korisnici, Haccp i jedan mali dio obrazaca.

Dizajn samog plugin-a, kako je prije navedeno, u potpunosti ovisi o dizajneru al plugin mora

imati implementirana sučelja IQCSPlugInInterface.IPlugInInterface i

IQCSPlugInInterface.IHostImportInterface. Međutim navedeni plugin-ovi su implementirani

na isti način. Svaki dodatak se sastoji od jedne .cs datoteke i jedne ili više .xmal datoteka. cs

datoteka bi trebala implementirati sučelja plugin-a. U njoj bi se trebao definirati broj i izgled

gumba plugina, informacije o pluginu te broj "poddodataka", te metode GetPlugInInfo,

GetSidebarInfo, InitPlugIn, Operate, GetData, SetRights, Host. Datoteka .cs svakom

"poddodatku" pridodaje instancu .xmal datoteke. Dakle .cs datoteka se ponaša kao kontrolna

datoteka koja upravlja s plugin-om.

6.4.1 Modul Organizacija

Modul Organizacija je dizajniran po gore navedenm načinu. Dakle sastoji se od jedne cs

datoteke gdje je implementirano IpluginInterface. U njemu se definirani svi gumbi i

„podmoduli“ modula. Unutar dodatka instancirani su korisničke kontrole koje predstavljaju

korisničko sučelje dodatka. Ovaj modul omogućava dodavanje novih organizacija, odjela i

radnih mjesta.

6.4.2 Modul Korisnici

Modul korisnici je jako slično dizajniran kao prije navedeni modul Organizacija. Korisničko

sučelje mu je napravljeno pomoću tab kontrole. Ovaj modul omogućava uvid u odjele i radna

mjesta organizacije. Također omogućava dodavanje i brisanje korisnika te trenutni uvid u broj

74

korisnika koji koriste sustav. Važno je napomenuti da ovaj i prethodni modu su dostupni samo

administratorima.

6.4.3 Modul HACCP

HACCP modul je najvažniji u cijeloj priči. Njegova je primarna zadaća omogućiti korisniku

uvid u procese, analizu rizika te izradu HACCP plana. Modul se sastoji od nekoliko

„podmodula“. HACCP Tim, Procesi, Analiza rizika, HACCP Plan i postavke. HACCP tim

omogućava izbor ljudi koji sačinjavaju HACCP tim, omogućava spremanje i pregledanje

izvještaja sa HACCP sastanka te pregled dokumenata HACCP politike.

6.4.4 Modul Obrasci

Modul obrasci zamišljen je tako da ima onoliko“podmodula“ koliko ima odjela u organizaciji.

Za potrebe ovo rada napravljen je samo jedan „podmodul“, a to je proizvodnja. Unutar svakog

„podmodula“ nalaze se digitalizirani obrasci. Digitalizirani su pomoću tab kontrole. Svaki tab

predstavlja jedan obrazac. Pošto ima mnogo obrazaca u ovom radu je obrađen samo jedan radi

primjera.

75

7 ZAKLJUČAK

Kontrola kvalitete bitan je element u svakoj organizaciji koja se bavi proizvodnjom i

preradom hrane. Ona dokazuje ozbiljnost neke organizacije i otvara put za suradnju s drugim

organizacijama. Naime ukoliko neka organizacija posjeduje neki od standarda za kontrolu

kvalitete prije će ostvariti neku poslovnu suradnju nego organizacija koja je nema. Kontrola

kvalitete isto tako daje sigurnost kupcima prilikom kupnje proizvoda. ISO organizacija je

definirala niz standarda za kontrolu kvalitete. Oni su svi obuhvaćeni oznakom 9000, a među

njima je najpopularniji ISO 9001 standard. Integralni dio ISO 9001 standarda je i HACCP.

Odnosno standard za sigurnost hrane. Prilikom uvođenja HACCP, na tradicionalan način,

stvara se mnoštvo dokumenata koji dodatno opterećuju zaposlene. Kao dokaz provođenja

HACCP standarda nastaju mnoštvo obrazaca. Dakle stvara se golema količina dokumenata tj.

papira koja samo otežava rad.

Tu nastupa računarstvo, odnosno aplikacije. Osnovna zadaća aplikacije za kontrolu

kvalitete i sigurnosti hrane je olakšanje izrade plana aktivnosti i smanjenje opsega

dokumentacije te kroz jednostavno sučelje olakšanje uvođenja i provođenja HACCP

standarda. To je ujedno i glavna zadaća QCS aplikacije. Aplikacije je napravljena i predstoji

implementacija kod korisnika.

76

8 LITERATURA

[1] SriSamp (2003), “What is .NET”, s interneta :

http://www.codeproject.com/KB/dotnet/netbasics.aspx, zadnji pristup: 2011-04-27

[2] Shivprasad koirala (2009), “.NET 4.0 FAQ Part 1” -- The DLR, s interneta:

http://www.codeproject.com/KB/dotnet/DOTNETre4pt0.aspx,

zadnji pristup: 2011-05-15

[3] Dave Oliver (2006), “SOA Logical Model”, s interneta:

http://geekswithblogs.net/SabotsShell/archive/2006/07/11/84708.aspx,

zadnji pristup: 2011-08-10

[4] Arnon Rotem-Gal-O, “What is SOA anyway?”, s interneta:

http://www.rgoarchitects.com/Files/SOADefined.pdf, zadnji pristup: 2011-08-10

[5] Jesse Liberty (2002), “Programming C#, Second Edition”, O'Reilly Media, Inc.,

978-0-596-00309-8

[6] Jesse Liberty (2003),”Programming C#, Third Edition”, O'Reilly Media, Inc.,

978-0-596-00489-7

[7] Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner (2010),

“Professional C# 4 and .NET 4”, 978-0-470-50225-9, Canada

[8] Joseph Albahari, Ben Albahari (2010), “C# 4.0 in a Nutshell, Fourth Edition”,

O’Reilly Media, Inc., 978-0-596-80095-6

[9] Deepthi Viswanathan Nair (2008),”A Windows Communication Foundation (WCF)

Overview”, s interneta; http://www.codeproject.com/KB/WCF/WCFOverview.aspx,

zadnji pristup: 2011-08-16

[10] Mike Thom (2011), “WCF Architecture”, s interneta:

http://www.codeproject.com/KB/WCF/WCFArchitecture.aspx,

zadnji pristup: 2011-08-17

[11] Igor Tomičić, Biljana Žarković, Nikola Rebernik (2006),

“ARHITEKTURA TEMELJENA NA SERVISIMA”, s interneta:

ftp://ftp.foi.hr/nastava/el_poslovanje/SOA/SOA%20(2).pdf, zadnji pristup: 2011-8-20

[12] Link group (2008), “Pojam i arhitektura WPF-a, uvod u Xaml”, s interneta:

http://www.linkelearning.com/dlmaterijali/materijali/DLWPF/sadrzajNJpdf/

WPF_01.pdf, zadnji pristup: 2011-6-26

77

[13] Wikipedia, “NET Framework”, s interneta:

http://en.wikipedia.org/wiki/.NET_Framework, zadnji pristup:2011-05-15

[14] Wilson Mar, “MS dot Net Architecture”, s interneta:

http://wilsonmar.com/msdotnet.htm, zadnji pristup: 2011-09-11

[15] WindowsClient.NET (2009), “WPF Application Quality Guide”, s interneta:

http://windowsclient.net/wpf/white-papers/wpf-app-quality-guide.aspx,

zadnji pristup: 2011-09-11

[16] Mike Liu (2011), “LINQ to SQL: Basic Concepts and Features”,s interneta:

http://www.codeproject.com/KB/linq/LINQtoSQLBasic.aspx,

zadnji pristup: 2011-08-26

[17] Amro Khasawneh (2007), “Understanding LINQ (C#)”, s interneta:

http://www.codeproject.com/KB/linq/UnderstandingLINQ.aspx,

zadnji pristup: 2011-08-26

[18] Halil ibrahim Kalkan (2011), “A Simple Plug-In Library For .NET”, s interneta:

http://www.codeproject.com/KB/macros/SimplePlugInLibrary.aspx,

zadnji pristup: 2s011-08-27

[19] Wikipedia, “Plug-in (computing)”, s interneta: http://en.wikipedia.org/wiki/Plug-

in_(computing), zadnji pristup: 2011-08-27

[20] Vesna Žerja, “Osnovni elementi sustava upravljanja kvalitetom u proizvodnji

lijekova”, s interneta: http://www.kvaliteta.net/kvaliteta/radovi/Zzerjav.pdf,

zadnji pristup: 2011-09-10

[21] Marko Mesarić(2011), “Ukratko o normi ISO 9001”, s interneta:

http://zastita.com.hr/index.php?

option=com_content&view=section&layout=blog&id=131&Itemid=478, zadnji

pristup: 2011-09-10

[22] Gumhalter Karolyi, L. (2005) „Primjena programskog rješenja u implementaciji

HACCP sustava“, s interneta:

http://www.kvaliteta.net/hrana/radovi/Gumhalter_Karolyi_L_rad.pdf, zadnji pristup:

2011-04-11

[23] International trade centre: „An introduction to HACCP“, s interneta:

http://www.intracen.org, zadnji pristup: 2011-05-10

78

[24] Wikipedia: „Hazard analysis and critical control points", s interneta:

http://en.wikipedia.org/wiki/Hazard_analysis_and_critical_control_points,

zadnji pristup: 2011-04-11

[25] Hrvatski-izvoznici: „HACCP standard“, s interneta: http://www.hrvatski-

izvoznici.hr/?FlashID=13270&LanguageID=-1,

zadnji pristup: 2011-04-11

[26] PPK karlovačka mesna industrija d.d. (2009), „POSLOVNIK INTEGRIRANOG

SUSTAVA UPRAVLJANJA KVALITETOM I SIGURNOSTI HRANE“

79

9 PRILOZI

9.1 Kazalo slika i tablica

9.1.1 Kazalo slika

Slika 4-1 NET Framework [14]................................................................................................14

Slika 4-2 WCF Model [9].........................................................................................................17

Slika 4-3: Komponente WCF radne okoline [10].....................................................................19

Slika 4-4:komunikacijski model...............................................................................................21

Slika 4-5: Odnos ugovora WCF servisa [9]..............................................................................22

Slika 4-6: WPF arhitektura [15]................................................................................................27

Slika 4-7: Načini povezivanja na bazu podataka [16]..............................................................31

Slika 4-8: Shema plug in sustava [19]......................................................................................36

Slika 4-9: Arhitektura MEF-a [7].............................................................................................38

Slika 4-10: Postupak prevođenja[13]........................................................................................42

Slika 5-1: SOA Model [3].........................................................................................................49

Slika 6-1: Prva grupa tablica.....................................................................................................53

Slika 6-2: Tablice vezane za korisnika sustava.........................................................................54

Slika 6-3 Prozor server aplikacije.............................................................................................56

Slika 6-4: Forma za prijavu.......................................................................................................65

Slika 6-5: Početna stranica QCS klijenta..................................................................................67

Slika 6-6 HACCP Modul..........................................................................................................70

Slika 6-7: Tab Dokumenata unutar HACCP modula................................................................72

9.1.2 Kazalo tablica

Tablica 6-1: Prva grupa operacija.............................................................................................56

Tablica 6-2: Tipovi prva grupe.................................................................................................57

Tablica 6-3: Operacije modula organizacija.............................................................................58

Tablica 6-4: Tipovi vezani za modul organizacija....................................................................59

Tablica 6-5: Operacije koje pripadaju modulu korisnici..........................................................60

Tablica 6-6: Tipovi modula korisnici.......................................................................................60

Tablica 6-7: Operacije Haccp modula......................................................................................61

Tablica 6-8: Tipovi Haccp modula...........................................................................................62

Tablica 6-9: Operacije modula obrasci.....................................................................................62

80

9.2 Popis oznaka i kratica

HACCP Hazard Analysis Critical Control Point

SUK Sustav Upravljanja Kvalitetom

ISO International Organization for Standardization

WPF Windows Presentation Foundation

WCF Windows Communication Foundation

CLS Common Language Specification

FCL Framework Class Library

CLR Common Language Runtime

BCL Base Class Library 

LINQ Language Integrated Query

CTS Common Type System

WWF Windows Workflow Foundation

VB Visual Basic

SOAP Simple Object Access Protocol

WDSL Web Services Description Language

REST Representational State Transfer

JSON JavaScript Object Notation

UDDI Universal Description, Discovery and Integration

GDI Graphics Device Interface

XML EXtensible Markup Language

XAML Extensible Application Markup Language

81

MIL Media Integration Layer

UI User Interface

ORM Object-Relational Mapping

ODBC Open Database Connectivity

API Application Programming Interface

EDM Entity Data Model

CSDL Conceptual Schema Definition Language

MSL Mapping Specification Language

SSDL Store Schema Definition Language

MAF Managed Add-in Framework

MEF Managed Extensibility Framework

CIL Common Intermediate Language

JIT Just-in-time

COM Component Object Model

SOA Service-Oriented Architecture

WWW World Wide Web

TCP Transmission Control Protocol

ICT Iinformation And Communication Technology

J2EE Java 2 Platform Enterprise Edition

82

9.3 Ostali prilozi i dodaci

9.3.1 Prilog 1. Shema Baze

83

9.3.2 Prilog 2. Osobna evidencija

84

9.3.3 Specifikacija Zahtjeva

Zatraženi su sljedeći zahtjevi od strane naručitelja, PPK M.I. Karlovac, za aplikaciju QCS:

Korisnički ZahtjeviGlavini korisnički zahtjev je digitalizacija postojeće implementacije ISO9001 i HACCP

standarda u tvornici PPK M.I. Karlovac. A to podrazumljva sljedeće zahtjeve:

Zaštita od neovlaštenog pokretanja aplikacije Dodavanje, mjenjanje i brisanje korisnika/radnika Kontrola pristupa Izrada izvještaja nad svakom komponentom Dostupnost aplikacije i svih njenih djelova Mogućnost ispisa svih izvještaja Digitalizaciju dokumenata tj. dodavanje, mjenjanje i brisanje dokumenata Kontrola svih dokumenata te refernciranje s ostalim dokumentima. Pristup dokumentima ovisno o pravima pristupa Modeliranje procesa i određivanje koraka procesa Dodavanje, brisanje i mjenjanje procesa Mogućnost izrade plana audita i praćenja njegove provedbe Mogućnost izrade plana edukacije i praćenja provedbe Izrada plana sanitacije i održavanja Mogućnost prijave nesukladnosti i plana riješavanja nesukladnosti Izrada analize opasnosti Izrada HACCP plana Imenovanje HACCP tima Digitalizacija što većeg broja obrazaca Grafička analiza Trenutni uvid u hierarhiju organizacije

Sistemski Zahtjevi

TehnologijeZa izradu aplikacije koristit će se Microsoftove tehnologije i to:

.NET i C# kao jezik za izradu same aplikacije SQL Server kao relacijska baza podataka u kojoj će biti spremljeni svi podaci.

Hardverski zahtjeviTeba osigurati računalo s konfiguracijom:

Procesor: 1GHz

85

RAM: 512 MB

HDD: 40

DirectX 10 grafička kartica

Brza veza s internetom

Na računalu treba biti instaliran .NET 3.0 ili više kako bi aplikacija mogla ispravno raditi.

9.3.4 Plan Projekta

86

9.3.5 Pivis Zapisnici

PPK

Zapisnik 28.03.2011 Karlovac

SASTANAK JE SAZVAO

Jurica Grgičević

NAMJENA SASTANKA

Upoznavanje s tvrtkom i procesima u proizvodnji

SUDIONICI

Jurica Grgičević, Ivan Lažeta, Tomislav Knapić, Tomislav Žubčić, Robert

Filipović, Mirela Miljak

Upoznavanje tvrtke i procesa u tvrtci

RASPRAVA

Predstavljanje tvrtke, informacijskog sustava i procesa proizvodnje

ZAKLJUČCI

Nakon dolaska u postrojenje , upoznali smo se sa dvojicom informatičara Tomislavom i

Tomislavom, koji su bili naši domačini. Prvo su nas upoznali sa dijelovima postrojenja tj.

Upravom, proizvodnjom i ostalim zgradama. Nakon toga jedan od Tomislava zadužen za

upravljanjem ERP-om upoznao me je sa njihovim rješenjem CSB sustavom, dok je drugi

Tomislav upoznao kolegu Lažetu s mrežnom infrastrukturom. Moje zapažanje je kako oboje

imaju kvalitetno znanje i razumljevanje o sustavu i procesima koji se odvijaju u proizvodnji.

To zaključujem na temlju njegovog objašnjavanja rada proizvodnje i na temlju work flow

87

dijagrama kojeg je sam sastavio, a koji opisuje proces u proizvodnji. Taj dijagram nam je

mnogo pomogao u razumjevanju procesa proizvodnje.

Nakon kratkog uvoda kojeg su nam kolege pokazale krenuli smo prema prozvodnji. Tamo su

nas dočekali Robert Filipović

i Mirela Miljak. Oni su nas malo detaljnije uputili u proces proizvodnje i opisali nam ulogu

HACCP-a i ISO 9001 standarda.

Iz toga smo zaključili da je nemoguće digitalizirati jedan standard bez drugoga.

Što se tiče Roberta i Mirele, radi se o vrlo sposobnim ljudima koji znaju svoj posao, ali uz to

znaju i tehnologiju te shvaćaju njezinu važnost u olakšavanju svakodnevnog rada.

Bili su nam, a i bit će od velike pomoći.

KORACI KOJE TREBA PODUZETI ODGOVORNA OSOBA KRAJNJI ROK

SASTAVIOJurica Grgičević

USplitu

DANA30.3.2011.

88

9.3.6 Upravljanje izmjenama

OZNAKAVERZIJE

DATUM PRIPREMIO ODOBRIO KRATKI OPIS IZMJENA

1.0 2011-04-11 Jurica Grgičević Jurica Grgičević Inicijalna verzija

2.0 2011-06-05 Jurica Grgičević Jurica Grgičević Dodan tekst u poglavlja .NET, C#

2.1 2011-06-07 Jurica Grgičević Jurica Grgičević Male izmene u strukturi poglavlja

3.0 2011-08-10 Jurica Grgičević Jurica Grgičević Veće izmene dodan sadžaj u više poglavlja

3.1 2011-09-15 Stipe Čelar Stipe Čelar Manje izmjene – uglavnom označene kroz dokument

3.2 2011-09-18 Jurica Grgičević Jurica Grgičević Ispravljene greške, dodane slike i poglavlja koja nedostaju

3.3 2011-09-19 Stipe Čelar Stipe Čelar Manje izmjene – uglavnom označene kroz dokument

3.4 2011-09-19 Jurica Grgčević Jurica Grgičević Ispravljene greške koje su označene u dokumentu

3.5 2011-09-20 Stipe Čelar Stipe Čelar Posljednje korakcije mentora

3.6 2011-09-20 Jurica Grgičević Jurica Grgičević Finalna verzija

89