Proiect de practic
Tema proiectului :Dezvoltarea unei aplicaii folosind tehnologia APPIAN
Bucureti
2016
CUPRINS
1.
2.
3.
4.
5.
6.
Introducere..........................................................................................................................3
Prezentarea activitii desfurate n cadrul companiei.......................................................4
Prezentarea tehnologiei Appian .........................................................................................4
Proiectarea aplicaiei de Cereri de concediu n tehnologia Appian...................................10
Concluzii............................................................................................................................31
Bibliografie........................................................................................................................31
Introducere
Principalul scop al acestui proiect este de a reliefa att aspectele descriptive ale companiei
Crystal-System ct i de a surprinde aptitudinile deprinse n urma stagiului de practic.
Unul dintre obiectivele stagiului de practic este acela de a oferi practicantului un prim
mediu de utilizare concret a cunotinelor acumulate n perioada aniilor de studiu. De asemenea,
acesta are posibilitatea de a-i testa abilitile de comunicare i de integrare ntr-un colectiv nou.
Avantajele ndeplinirii stagiului de practic sunt multiple. n funcie de companie, studentul
are oportunitatea de a face parte dintr-un mediu de lucru profesionist, cu valori morale i
profesionale bine stabilite, aflate deja la un nivel nalt. Posibilitatea de a interaciona cu mai
multe departamente din cadrul companiei ofer o perspectiv ampl ce va ajuta n luarea unei
decizii asupra unui viitor loc de munc. nsa, integrarea ntr-un mediu de lucru concret faciliteaz
surprinderea att a aspectelor pozitive ct i a aspectelor negative a sarcinilor ce trebuie
ndeplinite n departamentul respectiv.
Studentul nu este impactat numai la nivel tehnic i teoretic, ci i la un nivel psihologic,
deoarece i este testat capacitatea de adaptabilitate. Acesta trebuie s fac fa unui program
stabil i s ndeplineasc anumite sarcini. Deci trebuie s se supun unei conjucturi pe care n-a
mai ntlnit-o nainte.
Aceast perioad de practic are rolul de a iniia sau de a mbogaii experiena profesional a
practicantului.
O alt parte a proiectului este reprezentat de descrierea principalei aplica ii dezvoltat pe
parcursul perioadei de practic . Aplicaia reprezint automatizarea procesului de cereri de
concediu ntr-o companie i a fost dezvoltat cu ajutorul platformei APPIAN.
Lucreaz ca integratori de sistem cu cele mai populare ERP, CRM, SRM, pachete de
management al documentelor precum SAP, Oracle, Microsoft.
Asistarea clienilor pentru a menine software-ul de operat la cel mai nalt nivel de
performan i funcionalitate
Definirea i proiectare adaptrii continue solicitate de schimbrile din afacerile clienilor .
Crystal System este gata de schimbare, de adaptare la inovaia tehnologic continu
3
companii din Europa de Vest, SUA i Rusia. Echipa acoper peste 12 limbi de mare circulaie.
Toi consultanii vorbesc limba englez.
Orientare pe calitate
Asigurarea calitii prin folosirea complet a unei metodologii de lucru este una din valorile
fundamentale ale companiei Crystal System. Simpl i eficient metodologia Crystal System
susine calitatea.
Clieni internaionali
Crystal System deservete preponderent mari companii internaionale precum IBM,
Accenture, Capgemini, Atos-Origin, SAP, Oracle, Pirelli, FIAT, DeLonghi, Metro, Deautsche
Bank, Northdoor (Irlanda), Acctus (Austria) i alii. Serviciile oferite sunt de consultan
informatic n ariile de competen ale Crystal System:
SAP-ABAP, Business Intelligence (Hyperion i SAP BW), Java/.Net i Microsoft
Dynamics(CRM i Nav).
Diversificarea gamei de servicii
Extinderea gamei de servicii de consultan oferite clienilor reprezint una din preocuprile
constante ale companiei Crystal System. Pe lng tehnologiile SAP, Oracle (Hyperion) i
Microsoft, Crystal System i extinde la ora actual n mod susinut echipa de programatori Java.
Serviciile de training sunt o alt zon n care compania Crystal System a fost activ i pe care
echipa de management intenioneaz s o consolideze n viitor.
Planuri de cretere
n urmtorii doi ani compania Crystal System intenioneaz s i extind echipa la 300 de
consultani. Planul de cretere are n vedere cererea ridicat de pe pieele occidentale dar i
consolidarea pieelor emergente. O mare parte din aceste persoane vor fi recrutate prin
programele academice pe care Crystal System le desfoar n cooperare cu ASE Bucureti i
ASEM Moldova. Compania intenioneaz s i continue expansiunea geografic att spre ri
din Occident ct i spre Rsrit.
Rusia, noua frontier
Piaa ruseasc este o zon n care Crystal System depune eforturi importante pentru a
dezvolta parteneriate n spaiul rusesc avnd n vedere faptul c echipa Crystal System deine un
numr considerabil de consultani vorbitori de rus. Crystal System a reuit recent s semneze un
contract cu una din cele mai mari societi de asigurri din Rusia creia i furnizeaz consultan
informatic.
1. Bara de meniu:
News: Tabul de News reprezint locul n care poi colabora cu ceilali utilizatori, s primeti
mesaje de sistem i de la evenimentele de business alea proceselor, postari, i taskuri. Tabul este
selectat by default atunci cnd te autentifici n Appian.
Tasks:Tabul de taskuri va afia o list a tuturor taskurilor repartizate ie sau grupurilor de care
aparii. Atunci cnd apei click pe unul din taskuri Appian va deschide formularul pe care trebuie
s-l completezi.
Records: Tabul de recorduri va stoca date legate de procesul de business, de la clieni la locaii
de stocare. Tabul de recorduri ii permite sa accesezi i s lucrezi cu toate tipurile de recorduri la
care ai acces ca i utilizator .
Reports: Tabul de reports i ofer accesul la orice tip de raport creat de designerii Appian.
Rapoartele Tempo includ grafice care arat statusul curent sau trendurile istorice ale companiei,
pentru a le izualiza i a le analiza.
Actions: Tabul de aciuni i ofer posibilitatea de a lansa o aciune , spre exemplu completarea
unui formular.
2. Search
Permite s caui anumite date n tabul n care te afli, spre exemplu dac tastezi mobile n tabul
de News, vor fi afiate toate mesajele sau comentariile coninnd cuvntul mobile.
3. Filter Options
Tabul de filtre permite o navigare mai uoar n functie de filtrarea rezultatelor dup anumite
criterii:
All- conine toate datele pentru tabul selectat
Starred-conine toate datele pe care le-ai marcat cu stea anterior.
4.Account Information:
Dnd click pe username-ul tau vei putea selecta una din urmtoarele opiuni
Profile-deschide profilul de utilizator pentru vizualizare i modificare de informaii.
Settings- deschide pagina de setri pentu a te putea abona la unu anumit feed al unui
grup sau pentru a-i modifica parola.
Sign out- deconectarea de la Appian.
5. Main Content
Coninutul principal, datele vizualizate n functie de tabul selectat, spre exemplu n news feed
vom vedea mesajele postate i taskurile completate.
n acest tab putem crea un entry feed prin care aplicatia noastr va posta n tabul de news din
interfaa Tempo.
6. Applications
n tabul de applications vom gsi toate aplicaiile create si publicate de utilizatorii din grupul din
care facem parte, dar i aplicatiile nepublicate.
7. System
Tabul de system permite crearea de baze de date i de inputuri personalizate numite si Custom
Data Type(CDT) care vor permite scrierea optimizat n bazele de date folosite.
Tot n aces tab se pot crea i tipurile de record(Record Type).
8. Operaiile predefinite:
n partea stqng exist un subset de operatii predefinite care sunt meinite s faciliteze navigarea
utilizatorului.
4. Dezvoltarea unei aplicaii de cerereri de concediu n Appian
Pentru inceput, inainte de crearea flow-ului, best practice-ul spune ca trebuie sa cream
foldere speciale pentru proces, pentru reguli, grupuri pentru aplicatie, necesare pentru a securiza
procesul in Appian.
Vom intra in tab-ul Processes->Process Models-> New Folder. Vom denumi folderul
TOR Nume Prenume, iar la descriere vom pune Folder containing all process model for TOR
Nume Prenume.
Vom merge in tab-ul Rules->New Folder, si vom denumi folderul TOR Rules and
Constants Nume Prenume iar la descriere vom scrie Rules and Constants for TOR Nume
Prenume.
In interiorul acestui folder, vom crea alte 4 foldere: TOR_Prenume_Constants,
TOR_ Prenume_Interfaces, TOR_ Prenume_QueryRules, TOR_ Prenume_ExpressionRules.
Vom intra in tab-ul Documents->Communities->New Community si vom scrie la nume
TOR_Community_Nume_Prenume. In interiorul acesteia vom crea doua Knowledge Center, unul
cu numele Application Data si inca unul cu numele Business Data. In Application Data vom crea
un folder numit Templates unde vom salva template-urile create pe parcursul aplicatiei, iar in
Business Data , vom crea un folder numit Documents, unde vom salva documentele create prin
rularea procesului.
Dupa ce cream toate aceste foldere, putem incepe aplicatia.
10
Vom crea un flow n process designer. Acest flow va descrie logica din spatele ntregului proces,
nivelurile de responsabilitate implicate.
Aplicatia trebuie s permit completarea unui formular de cerere de concediu pentru o anumit
dat, completat de un angajat. Acest formular va fi revizuit apoi de un supervizor i aprobat sau
respins n final de manager.
Evenimentele i nodurile decizionale se vor selecta din partea stng a consolei i vor fi legate n
proces.
Logica procesului este redata n schema de mai jos. Se poate observa c pentru completarea
acestui proces vom avea nevoie de 3 formulare.
n appian formularele se pot construi folosind Form Designer sau folosindu-ne de limbajul SAIL
care ne permite crearea unor interfee dinamice .
4.2 Construirea unui formular folosind form Designer
Pentru inceput, modificam numele formului, devenind TimeOff Request. Ca instructiuni de
completare a acestuia, vom lasa Please complete the form below.
Vom adauga o Sectiune noua, pe care o gasim in tab-ul Layout & Info. O vom adauga in formul
nostru prin Drag&Drop. Vom redenumi aceasta sectiune cu numele de Requestor Data, si
vom selecta ca aceasta sa aibe 2 coloane, nu una, cum era setata implicit.
In aceasta sectiune, vom adauga campurile care dorim sa fie completate de utilizator. Ne vom
intoarce in tab-ul de Standard Inputs, de unde vom selecta Text Label, pe care il vom denumi
11
Requestor First Name. Vom selecta pentru acesta sa fie Required. Pentru acest label, vom crea
un Activity Class Parameter in care se va salva valoarea introdusa de utilizator
Apasand butonul Create, valoarea introdusa de utilizator la rularea procesului va fi
salvata in variabila denumita de noi : requestorFirstName.
Procedand la fel, vom crea si celelalte label-uri, schimbandu-se doar, la unele campuri,
tipul label-ului introdus. Pentru Requestor Last Name vom adauga un Text label, pentru Email
vom adauga tot un Text label, pentru Telefon vom adauga un Number label ,pentru manager
vom adauga tot un Text label, pentru TimeOff Type vom adauga un DropDown label, pentru
Start Date respective End Date vom adauga Date & Time label, si pentru Comments vom
adauga un Paragraph label.
Pentru fiecare dintre aceste campuri, trebuie construita cate o variabila in care sa se
salveze valorile introduse de utilizator.
Vom salva formul prin apasarea butonului Save and Close.
Pentru a salva variabilele din formular trebuie sa creem variabile de proces n care vor fi
salvate valorile cu care a fost completat formularul. Pentru a realiza acest lucru n tabul de date a
nodului de formular vom da click pe fiecare variabil creat din formular i i vom aduga o
variabil de proces.
Formularul final va arta ca n figura de mai jos.
Pentru formularul managerului procedam la fel. Vom marca readOnly cmpurile supervizorului,
si vom aduga 2 butoane, de respingere sau aprobare i un paragraf pentru anumite comentarii
ale managerului.
n acest moment avem cele 3 formulare construite. Pentru a optimiza procesul vom aduga
noduri de decizie, XOR.
13
Vom adauga un nod XOR , gasit in partea stanga a designer-ului, in subfolderul Gateways, pe
care il pozitionam imediat langa primul form.
Vom sterge legatura intre primul form si End Event, si vom crea noi legaturi: intre acest
prim form si XOR, intre XOR si cel de-al doilea form, intre XOR si End Event, precum si intre
cel de-al doilea form si End Event.
Pentru a putea salva procesul si a nu aparea erori, va trebui sa customizam nodul XOR,
punandu-i conditii . In cazul in care, utilizatorul trimite o cerere din cauza faptului ca este
bolnav, cererea trebuie sa se aprobe fara a mai trece prin alte verificari. Daca motivul cererii este
vacanta, sau zi fara plata, aceasta va trebui sa treaca prin mai multe level-uri de aprobare. Pentru
a putea selecta tipul cererii, avem nevoie de crearea unei noi constante, n folderul de constante
creat la nceput. Vom defini tipul text al constantei, i vom defini 3 tipuri de
cerere:SICK,UNPAID,HOLIDAY. Folosirea constantelor evit hardcodarea datelor i
optimizeaz procesul. Folosim o constant i pentru decizia de aprobare sau respingere.
14
Pentru a imbunatati procesul, vom continua cu adaugarea unor noi noduri. Dorim ca in cazul in
care cererea este urgenta,adica Start Date-ul este in urmatoarele 3 zile lucratoare, requestor-ul sa
primeasca un mail in care sa fie anuntat ca cererea este aprobata sau rejectata. Pentru acest lucru,
trebuie sa adaugam un nod de Send E-mail. Putem adauga acest nod atat individual, cat si in
interiorul unui Subproces.
In acest caz, il vom adauga in interiorul subprocesului denumit de catre noi Send E-mail. Intre
nodul XOR denumit Approval Decision si End Event, vom adauga prin Drag&Drop un nod
pe care il vom redenumi dupa cum am precizat Send E-mail. Pentru a putea face legatura intre
un process si un subproces, trebuie creat un nou process, salvat, urmand ca, in tab-ul de Setup al
subprocesului, sa inseram procesul nou creat.
Pentru a crea un nou proces , mergem in bara de meniu, dam click pe File, New Process
Model. Ni se va deschide o pagina care are doua noduri, cel de Start Event si cel de End Event.
Din partea stanga a Designer-ului, din folderele de Palette, vom selecta subfolderul
Appian Smart Services, apoi Communication. Aici gasim nodul cautat, Send E-mail. Vom
face legatura intre nodul de Start Event si nodul de Send E-mail, precum si intre nodul de Send
E-mail si nodul de End Event.
Acum, pentru ca am configurat deja nodul de trimitere E-mail, trebuie sa gasim o conditie
care sa calculeze numarul de zile lucratoare existente pana la Start Date.
Pentru inceput, trebuie creata o constanta noua care sa ia valoarea URGENCY, precum si
un Expression Rule care sa calculeze numarul de zile lucratoare.
Sa incepem prin crearea Constantei. Vom merge in tab-ul de Rules , gasim folderul nostru
de CONSTANTS unde, cream o noua constanta. In acest moment trebuie sa cream, in
folderul nostru, EXPRESSION RULES o functie care sa calculeze numarul de zile
lucratoare. Vom apasa butonul de Create an Expression Rule .
Acum, avand create atat constanta cat si Expression rule-ul, putem continua modificarea
procesului. Vom adauga in nodul Approval Decision o noua conditie. In cazul in care zilele
lucratoare pana in momentul in care requestorul a stabilit Start Date-ul sunt 3,sau mai putin de 3,
requestorul va primi o notificare in care este anuntat ca se poate bucura de concediu. Aceasta
conditie arata in felul urmator:
15
Interfeele SAIL nu sunt cu mult diferite grafic fa de form designer, ns acestea sunt dinamice.
Pentru a crea aceasta interfata este nevoie de doua sectiuni, una pentru Requestor Details si una
pentru Approver Notes, sectiune care nu trebuie sa apara la pornirea procesului, ci doar in
momentul in care exista approvalDecision completat (din al doilea form).
Folosind limbajul SAIL construin interfaa grafic. In firstColumnContext, trebuie sa cream
cele doua sectiuni.
In prima sectiune, vom gasi 4 textField-uri (Requestor First Name, Requestor Last Name, Email,
Manager), un integerField (Telephone), un dropdownField (Time Off Type), doua dateField-uri
(Start date respectiv end date), si un paragraphField pentru comentarii. Pentru fiecare dintre
aceste field-uri, trebuie creat cate un rule input, care sa fie de tipul corespunzator. Rule input-ul
se creaza din partea dreapta a ecranului, apasand butonul +, ca in imaginea urmatoare:
if(not(isnull(ri!approvalDecision)),
a!sectionLayout(...)
Dup ce am creat interfaa vom merge n procesul nostru pentru a mapa rule input-urile cu
activity class parameter corespunzator. Mergem la proprietatile user input task-ului denumit
Enter TimeOff Request Details , in tab-ul Forms si vom selecta Use an existing form. Vom
apasa pe Expression Editor, si vom selecta de acolo Rules & Constants. Vom selecta numele
interfetei creata de noi, si vor aparea in partea dreapta a editorului, la Syntax, toate rule inputurile interfetei, care trebuie mapate corespunzator.
Pentru a evita Hardcodarea datelor putem folosi un CDT creat de noi. Astfel vom avea toi
parametri la un loc. Acest CDT va fi transmis procesului i formularelor fr a mai fi nevoie s
creem variabile de proces i rull-inputuri
Vom intra in tab-ul System, vom intra in aplicatia noastra, si vom selecta Data Management>Data Types->Create a Data Type
17
Vom apasa butonul Download XSD, pentru a modifica campul Requestor ID. Acesta trebuie sa
fie primaryKey, iar in versiunea 7.7 a Appian-ului poate fi facut acest lucru doar modificand
manual XSD-ul.
Elementul requestorID trebuie sa contina urmatorul cod:
<xsd:element name="requestorID" nillable="true" type="xsd:int">
<xsd:annotation>
<xsd:appinfo source="appian.jpa">@Id @GeneratedValue</xsd:appinfo>
</xsd:annotation>
</xsd:element>
Vom salva modificarile aduse XSD-ului si il vom importa. Acum avem un CDT pe care l vom
introduce n procesul nostru i n interfee.
Acum vom crea un Data Store din aplicatie (System->Data Management-> Data Store>Create a Data Store), in care vom adauga CDT-ul creat.
18
19
Vom selecta Automatically update database schema, pentru a se crea in baza de date
tabelul.
Vom apasa butonul Verify pentru a verifica daca exista sau nu tabelul in BD si ne va
aparea un mesaj care spune ca nu exista. Vom lasa bifat Create Tables automatically si vom
apasa butonul Save & Publish.
Acum, ca baza de date este creata, trebuie sa adaugam cdt-ul in proces, sa salvam fiecare valoare
a field-urilor din formuri in campurile corespunzatoare din cdt, ulterior urmand sa mapam ca si
activity class parameter, cdt-ul, iar pe baza acestui CDT, sa cream recordul.
Vom intra in fiecare interfata in parte, vom adauga ca si rule input cdt-ul nostru de
tipul TOR_timeOffDetails si vom sterge toate celelalte variabile create pentru salvarea valorilor
20
scrise in form.
Pentru fiecare label, pentru proprietatile value si saveInto, vom pune ri!
TOR_timeOffDetails.campulCorespunzator, ca in exemplul:
21
22
23
In final, avand mapat CDT-ul in proces, vom putea crea Record-ul. Pentru a realiza acest lucru,
vom crea din aplicatie, doua interfete noi, una cu numele TOR_SummaryView si inca una
TOR_ListView.
In prima interfata, TOR_SummaryView, utilizatorul trebuie sa vada toate campurile completate
de requestor. Interfata va arata in felul urmator:
In aceasta interfata, nu vor exista rule input-uri. Toate valorile vor fi locale si vor
veni din baza de date. Pentru a citi din baza de date, e nevoie sa cream o regula pe care ulterior,
in interfata, o vom chema.
Pentru inceput, vom crea regula. Vom merge in aplicatie (Appian Designer), vom
apasa New->Query Rules si aici vom configura in felul urmator:
24
25
Avand create cele doua interfete, vom intra in aplicatie, si vom apasa New->Record Type.
26
Va aparea o fereastra cu toate obiectele care lipsesc, le selectam si apasam butonul Add to
Application. Vom proceda similar pana in momentul in care mesajul returnat va fi: Found 0
missing precedents.
28
Pentru a accesa direct primul form , la accesarea din form a aplicatiei, trebuie sa adaugam
legaturilor dintre noduri o proprietate. Daca apasam click-dreapta pe fiecare legatura, ne vor
aparea urmatoarele proprietati:
. Pentru noi, in
29
Vom crea un Feed. Acesta se creaza in designer adaugandu-se in aplicatie. Vom intra in tab-ul de
New si vom selecta Feed. Trebuie completate urmatoarele:
Apasand butonul Create, feedul va fi creat. In pagina de Appian Process Modeler va trebui
adaugat un nod Post Event to Feed. In aplicatia noastra, il vom adauga intre nodul de Approver
si nodul Update Request to finished. In tab-ul de Data se vor completa urmatoarele variabile:
pentru Feed trebuie in campul Value trebuie adaugat feed-ul creat in etapa precedenta,dupa cum
30
urmeaza:
Pentru campul Message trebuie completat in campul Value, folosind Expression Editor,
urmatoarea conditie: ="Hello "&user(loggedInUser(),"firstName")&" Your time off request
for"&pv!endDate-pv!startDate&"Days has been received" , fiind un mesaj care va aparea in
momentul in care nodul este rulat. Putem completa si campul Viewers, adaugand un user sau un
grup, dupa cum dorim sa fie vizualizat feed-ul.
31
Export Application
Pentru a exporta aceasta aplicatie, trebuie mai intai sa avem adaugate toate obiectele
create pentru aceasta. Vom apasa butonul Check for missing dependencies pentru a le adauga in
aplicatie. Ulterior, vom selecta aplicatia si e suficient sa apasam butonul Export
32
Pentru a salva aplicatia, e necesar sa downloadam i s salvam tot ceea ce contine, printr-un click
pe Download package i s salvm aplicaia n laptopul personal.
n acest moment avem o apllicaie funcional online, pe care utilizatorii o pot folosi.
Concluzii
n cele 3 sptmni petrecute n interiorul companiei am interacionat cu membrii echipei Appian
i am dezvoltat de la nceput pn la final o aplicaie. Am reuit s-mi formez o prere despre
noua tehnologie. Cred c o mbunttire considerabil a companiei ar fi investirea n servere mai
performante care s permit dezvoltatorilor de Appian s lucreze mai bine. n timpul practicii din
cauza prezenei a mai multor dezvoltatori simultan pe platform a produs ncetinirea
considerabil a ritmului de lucru.
Crystal System rmne n opinia mea o companie apropiat studenilor din ASE care ofer
oportuniti de dezvoltare i o nou viziune asupra viitorului.
Bibliografie:
Referine online:
http://www.appian.com
https://forum.appian.com
http://www2.crystal-system.ro
http://www.bptrends.com/publicationfiles/07-09-Appian%20BPMSuite%20Ver.%205.7%20_3_Malcolm1.pdf
33