SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
UNIVERSITÀ DEGLI STUDI DI TRIESTE




                                   F A C OL T À   DI   I N GE GN E R I A


      C OR S O   D I L A U R E A S P E CI A L I S T I C A I N   I N GE GN E R I A I N F OR M A T I CA




                                        Tesi di laurea in


                            Complementi di Basi di Dati




 Studio e realizzazione di soluzioni per lavoro

collaborativo basate sul motore di workflow di

                                SharePoint 2010




   Laureando                                                                Relatore


Alexia Cociancich                                        Chiar.mo Prof. Maurizio Fermeglia




                             Anno Accademico 2010/ 2011


                                                  ~1~
~2~
a me




~3~
Sommario

Introduzione........................................................................................................................................ 5
Caso in esame ................................................................................................................................... 6
   Approccio tradizionale ............................................................................................................. 7
   Approccio server .......................................................................................................................... 8
   Approccio SharePoint ............................................................................................................... 9
Strumenti utilizzati ...................................................................................................................... 10
   SharePoint ...................................................................................................................................... 10
   Visual Studio 2010 Ultimate.............................................................................................. 12
   Microsoft Access 2010 ........................................................................................................... 13
   Smtp4Dev ....................................................................................................................................... 14
Workflow .............................................................................................................................................. 15
   I workflow in SharePoint ..................................................................................................... 16
Workflow: caso specifico ......................................................................................................... 17
1. Caso ideale: utenti SharePoint ................................................................................... 19
   1.1 I nvio semplici notifiche implementate con SharePoint Designer .. 20
   1.2 Aggiunta di un report alle notifiche ................................................................... 22
2. Caso reale: utenti occasionali ..................................................................................... 24
   2.1 Recupero informazioni su db esterno ................................................................ 25
Difficoltà incontrate .................................................................................................................... 29
Possibili sviluppi ............................................................................................................................ 30
Ringraziamenti ................................................................................................................................ 31
Fonti bibliografiche ...................................................................................................................... 32
Appendice ........................................................................................................................................... 33
   Workflow 1.2 ................................................................................................................................ 33
   Workflow 2.1 ................................................................................................................................ 35
   Query Database .......................................................................................................................... 41




                                                                       ~4~
Introduzione

Spesso, quando si deve presentare un documento formale, ci si trova a
dover ripetere più volte le stesse operazioni, tanto che nella
maggioranza dei casi l’ iter è sintetizzabile con un algoritmo standard.
Per questo motivo automatizzare gli step ricorrenti può essere utile al
fine di snellire le procedure. Quando in questo algoritmo si richiede la
collaborazione di diversi utenti mediante lo scambio di informazioni, si
parla di workflow.

Ad Esempio si può presentare l’esigenza di dover far approvare un
documento, sottoponendolo all’ attenzione di più persone.

Per fare ciò bisogna innanzitutto condividere il materiale da
approvare, scambiando quindi dei file tra utenti.




                                 ~5~
Caso in esame

Il caso preso in esame coinvolge le fasi di revisione di un elaborato di
tesi.

Questo tipo di documento solitamente coinvolge diversi soggetti, in
primis il laureando o dottorando, principale autore dello scritto, quindi
vengono coinvolti dei reviewers (solitamente due o più), infine l’ ultima
approvazione spetta al relatore.




                                     reviewer




                                     reviewer
                                                                    relatore
 studente




                                      reviewer




                                  ~6~
Approccio tradizionale


Tipicamente le interazioni tra gli attori coinvolti nel processo di
approvazione si svolgono via e-mail, creando una catena tra i contatti.

Questo sistema risulta particolarmente inefficiente per i seguenti
motivi:

  •   Il successo globale del progetto è fortemente condizionato
      dall’ impegno individuale dei singoli soggetti. I nfatti è sufficiente
      che un anello della catena si spezzi per compromettere la riuscita
      dell’opera
  •   Scarsa efficienza in termini di tempo: nessuno può iniziare il
      lavoro finché l’elemento gerarchico precedente non ha concluso il
      proprio, impedendo la parallelizzazione dei processi.
  •   Gestione delle versioni del documento non automatizzata. Ogni
      soggetto è tenuto a produrre una copia col rischio di confusione
      tra le versioni del documento.
  •   Gestione delle notifiche soggetta ad errore umano. Chi è
      incaricato di avvisare gli altri componenti del progetto può
      sbagliare o dimenticare di inoltrare un messaggio di notifica




                                   ~7~
Approccio server


Una prima evoluzione del sistema consiste nel predisporre uno spazio
su un server ove caricare di volta in volta il documento da sottoporre
a revisione.

I vantaggi di questo approccio, rispetto a quello precedentemente
descritto sono i seguenti:

  •   Il documento è sempre disponibile a tutti coloro che hanno
      l’ autorizzazione ad accedere alla risorsa
  •   Più soggetti possono iniziare il proprio lavoro
      contemporaneamente

Tuttavia questi stessi punti di forza comportano dei rischi collaterali:

  •   Difficoltà della gestione delle versioni del documento. Qualora
      due o più utenti iniziassero a modificare contemporaneamente lo
      stesso file, ci si troverebbe davanti ad una situazione confusa e
      disordinata delle versioni
  •   Le operazioni di scaricamento, caricamento, eventuale rinomina
      del file sono affidate all’ utente e quindi soggette ad errore
  •   Le autorizzazioni relative ai documenti valgono per tutta la
      durata del processo di revisione, percui non è possibile
      distinguere dal punto di vista informatico in che fase il singolo
      soggetto possa/ debba intervenire




                                  ~8~
Approccio SharePoint


Utilizzare sul server SharePoint costituisce un valore aggiunto.
Permette infatti di automatizzare la gestione dei documenti condivisi
da più utenti, riducendo il margine di errore in un’ottica
maggiormente collaborativa.

La piattaforma garantisce l’accesso ad utenti con ruoli diversi, ed in
base alle autorizzazioni di cui gode l’ utente, permette di svolgere
alcune azioni piuttosto che altre.

Tramite SharePoint è possibile implementare dei flussi di lavoro che
riguardano i documenti caricati sul sito, basando il workflow
sull’ interazione di diversi utenti.

Quest’ ultimo approccio è stato la base per lo sviluppo di una serie di
soluzioni collaborative.




                                  ~9~
Strumenti utilizzati


SharePoint


SharePoint è un prodotto M icrosoft pensato per la creazione di siti web
in maniera collaborativa, integrando servizi intranet ed extranet in un
unico portale. T ra le funzionalità principali fornite vi è un sistema che
permette una gestione efficiente dei documenti digitali.

Con SharePoint infatti è possibile creare cartelle su un server e
controllare gli accessi alle risorse mediante Active Directory in base
alle autorizzazioni possedute dall’utente, nonché personalizzarne il
layout.

Le edizioni di SharePoint attualmente sono tre: Foundation, Standard
ed Enterprise.

L’utente può accedere ai siti SharePoint mediante uno dei browser
supportati: Internet Explorer 7, Firefox 3.6, Safari 4.04, Google
Chrome 12, e successive versioni degli stessi 1.

I requisiti minimi del sistema sono: processore a 64 bit, quad-core, 4
Gb di RAM, disco rigido da 80 Gb, sistema operativo Windows a 64 bit,
SQL Server a 64 bit (dal 2005 SP3)

L’ idea iniziale era quella di installare la piattaforma su una virtual
machine con il sistema operativo Windows Server 2008 R2 installato
ed accedervi dal sistema host, purtroppo le risorse dei laptop per uso
domestico attualmente in commercio di cui mi sono servita per
sviluppare il progetto, non mi avrebbero garantito delle prestazioni
accettabili, qualora avessi dovuto usufruire due sistemi operativi
contemporaneamente. Inoltre, come illustrato in seguito, si è reso
necessario l’ impiego dell’ ambiente di sviluppo Visual Studio 2010, il
quale, per utilizzare i tool dedicati a SharePoint, richiede
l’ installazione sul medesimo sistema operativo di Windows SharePoint
Services. Pertanto ho provveduto ad installare la piattaforma sulla
macchina reale, che dispone di un sistema operativo Windows 7
Ultimate a 64 bit.

SharePoint Foundation 2010

Disponibile gratuitamente, SharePoint Foundation ( noto nelle versioni
precedenti come Windows SharePoint Services) costituisce la
piattaforma per i prodotti della famiglia M icrosoft SharePoint

1
    Ad eccezione delle versioni a 32 bit di Internet Explorer, i browser sono supportati con limitazioni

                                                        ~ 10 ~
(SharePoint Designer, Project Server, SharePoint Workspace, Office
Web Apps, Search Server) .

SharePoint Designer 2010 2

SharePoint Designer è un editor per i siti SharePoint che permette di
personalizzare gli elementi in essi contenuti (elenchi, raccolte,
workflow, pagine web) fornendo un’ interfaccia user-friendly ed
evitando all’utente di scrivere codice a mano. Si tratta di uno
strumento particolarmente efficiente per lo sviluppo delle funzionalità
più comuni.




2
    SharePoint Designer 2010 è compatibile solo con siti SharePoint 2010

                                                     ~ 11 ~
Visual Studio 2010 Ultimate


Visual Studio è un ambiente di sviluppo ideato per lavorare con il
framework .NET. T ra i linguaggi di programmazione supportati vi è C#,
che ho utilizzato durante l’ implementazione del progetto per scrivere
un algoritmo in grado di descrivere il flusso di lavoro preso in esame.
Inoltre Visual Studio 2010 mette a disposizione una serie di utili
strumenti per lo sviluppo di soluzioni per SharePoint mediante modelli
di progetto. Dalla versione più recente, definendo la relativa
destinazione sul sito SharePoint, è possibile effettuare direttamente la
distribuzione della soluzione nonché eseguirne il debug, ovviando il
sistema di deploy manuale, che spesso risulta macchinoso.




                                ~ 12 ~
Microsoft Access 2010


Microsoft Access è un database management system relazionale
incluso nel pacchetto Office, grazie alla propria interfaccia user-
friendly è un prodotto molto diffuso per applicazioni domestiche. I l
progetto prevedeva l’ interrogazione di un database esterno al sito
SharePoint. Data la natura elementare della base di dati (una semplice
query) su una tabella (con poche colonne ed un numero ristretto di
righe), si è ritenuto che le funzionalità fornite da M icrosoft Access
coprissero le esigenze del progetto. Tuttavia qualora fosse richiesto un
impiego maggiormente professionale sarebbe possibile migrare i dati
verso un sistema che assicuri una migliore gestione dei dati, come ad
esempio, per rimanere in ambito M icrosoft, SQL Server.




                                ~ 13 ~
Smtp4Dev


Per testare le funzionalità di invio e-mail pur non avendo di un server
di posta, non disponendo di una connessione internet in fase di demo
o volendo limitarsi alla simulazione dell’ invio per evitare di instradare
messaggi di test, sono ricorsa ad un software freeware, Smtp4Dev,
che si occupa di rimanere in ascolto sulla porta usata dal protocollo
smtp ( 25 per default) intercettando così le e- mail in transito.
L’ interfaccia grafica, molto semplice ed intuitiva consente all’utente
una serie di utili operazioni come ad esempio la visualizzazione del
messaggio tramite il client di posta configurato nel sistema. Poiché
SharePoint non permette di usare localhost come nome di dominio per
il server smtp, è necessario configurare tale parametro indicando il
domain name del pc sia nella pagina del sito outgoing e-mail settings
che all’ interno delle opzioni di Smtp4Dev




                                  ~ 14 ~
Workflow

Per workflow o flusso di lavoro si intende una sequenza di passaggi tra
loro correlati atti allo scambio di informazioni tra utenti. Si può
pensare come un algoritmo che descrive un lavoro mediante
l’ astrazione delle attività che lo compongono per mezzo delle quali gli
attori coinvolti contribuiscono attuando le azioni assegnate al proprio
ruolo. O meglio, citando la Workflow Management Coalition “The
automation of a business process, in whole or part, during which
documents, information or tasks are passed from one participant to
another for action, according to a set of procedural rules.”




                                ~ 15 ~
I workflow in SharePoint


Workflow Foundation mette a disposizione librerie per
l’ implementazione di due categorie di flussi di lavoro: sequenziali e
macchina a stati. I l primo caso consiste in una successione di attività
che devono essere svolte in un ordine prefissato, nel secondo caso il
modello è organizzato in determinati stati, a loro volta composti da
attività che, qualora completate originano un evento che determina la
transazione da uno stato all’altro.

SharePoint Designer consente di implementare facilmente workflow
sequenziali 3, fornendo un ventaglio di operazioni standard componibili
tra loro, ovvero condizioni e azioni raggruppabili in step. SharePoint
Designer dispone di tre categorie di workflow: site, list o reusable. I l
primo è relativo ad un sito, trova perciò campo di applicazione in
diverse liste ed elementi appartenenti ad esse, i list workflow invece
sono associati ad una lista specifica, i reusable workflow infine hanno
il vantaggio di non costringere lo sviluppatore a scegliere a priori la
lista alla quale il flusso di lavoro verrà applicato. T uttavia, per quanto
ampia e personalizzabile sia la gamma di operazioni che l’editor rende
disponibile e che generalmente riesce a coprire la maggior parte delle
esigenze di sviluppo, qualora si renda indispensabile un’elaborazione
del codice, SharePoint Designer ha delle limitazioni difficilmente
sormontabili, pertanto in casi maggiormente complessi si rende
necessario l’ impiego di Visual Studio.




3
  È possibile simulare una macchina a stati con SharePoint Designer, inserendo workflow secondari, tuttavia si
tratta di una forzatura non consigliabile nel caso di schemi particolarmente complessi.

                                                    ~ 16 ~
Workflow: caso specifico
           aso

Il flusso di lavo ro che ho svilup pato consiste ne l proce sso di
                              sviluppato
approvazione di un e labo rato da parte di alcuni reviewer. L’ idea è
stata que lla di dividere in due macro fasi il procedimento. Ne lla prima
                                   macro-fasi
parte lo studente che ha redatto il documento accede al sito
Share Po int e lo carica in una carte lla pre stabilita a cui hanno accesso
(con pe rmesso di co llaborazione 4) so lo gli studenti e re lativi re latori a
  con                                                                    latori,
questo punto il primo wo rkflo w inizia automaticamente e viene
segnalata la prese nza de l nuo vo do cumento sul server inviando un
messaggio che confermi l’esito positivo de ll’o perazione allo stude nte
ed una notifica via e-mail al re lato re, quest’ultimo procede
                         mail
manualmente a ve rificarne il co nte nuto (e d e ventualmente co rre ggere
il nome de l file) e d assegnato al nuo vo e lemento i reviewer incaricati
                                                              iewer
di esaminare l’e laborato. Una vo lta ricaricato il file in un’altra carte lla
sul sito ( in questo caso gli ute nti che avranno accesso alla risorsa
saranno appunto i revie wer ed il re latore ha origine il secondo flusso
                                        latore)
che preve de uno step iniziale in cui un’e mail di notifica contene nte le
                           niziale       un’e-mail
info rmazioni nece ssarie avvisa i reviewer assegnati al proge tto
de ll’esiste nza de l nuovo documento sul sito, invitando li a prendere
visione de llo stesso e contattare quanto prima il re lato re. Quando
quest’ ultimo avrà rice vuto l’ appro vazione da parte di tutti gli attori
co invo lti, pro vve derà a modificare le pro prietà de l file sul sito,
assegnando allo stesso uno status che indichi l’esito po sitivo de l
processo . La variazione di questo valore innesca un e ve nt chento
preve de l’ invio di un messaggio ai reviewe r di cui so pra conte nente un
ringraziame nto pe r la co llabo razione pre stata ed al re latore
contenente il riepilogo de lle tesi presenti ne lla re lativa carte lla e d
ancora in attesa di appro vazio ne finale senza la quale il workflow no n
                                      finale,
                   5
può co nclude rsi .



        upload                 notifica relatore,
                                ringraziamento
       studente                    studente



         upload                    notifica            feedback
                                                                          cambio status
                                                                                              ringraziamento
                                                                                                 reviewers,
                                  reviewers            reviewers
        relatore                                                                             (report relatore)




4
  I tipi di permesso predefiniti di SharePoint sono cinque: limited access, read, contribute, design e full control. È
tuttavia possibile definire livelli personalizzati aggiuntivi.
                      finire
5
  La prima implementazione non comprende l’automazione di quest’ultima funzionalità.

                                                      ~ 17 ~
Questo progetto presenta alcune difficoltà che hanno richiesto
un’attenta valutazione al fine di stabilire quanto si potesse
automatizzare il flusso di lavoro e dove invece fosse indispensabile
l’ intervento umano. Si sarebbe potuto ad esempio unire i due workflow
in un unico, scrivendo il codice per un metodo che copiasse
automaticamente il file caricato da una cartella all’altra. Tuttavia, per
motivi che verranno meglio illustrati in seguito, la procedura di upload
sarebbe risultata più complessa, richiedendo il rispetto di una serie di
parametri troppo stretti, che avrebbero sicuramente introdotto una
grossa percentuale di errori umani.

Un altro punto che si sarebbe potuto formalizzare all’ interno del codice
è il cambio di status del documento, che è stato demandato
all’ intervento manuale del relatore. D’altra parte non solo è difficile
automatizzare il processo di approvazione con un’ interfaccia user-
friendly per l’utente non potendo sfruttare, come verrà spiegato in
seguito, l’ autenticazione per ciascun reviewer, ma, come rilevato da
esperienze pregresse, spesso il feedback da parte di questo tipo di
utente giunge attraverso canali comunicativi differenti ed obbligare i
reviewer ad interagire attivamente con il sito SharePoint potrebbe
determinare un rallentamento del flusso di lavoro.

Inoltre l’applicazione concreta dei workflow implementati
generalmente gestisce una quantità ridotta di elementi, pertanto
l’ intervento umano non risulta eccessivamente oneroso.

Dopo un’analisi dettagliata dei requisiti sono state progettate una
serie di diverse soluzioni, ciò è dovuto al fatto che le ipotesi teoriche
di un sistema ideale non sempre hanno trovato riscontro nella realtà.




                                  ~ 18 ~
1. Caso ideale: utenti S
                       SharePoint

Per iniziare a studiare gli strumenti messi a disposizio ne da Share Po int
ho supposto de lle condizio ni ideali che rispecchiassero il mode llo
sugge rito dalla piattaforma stessa, ho assunto pe rciò che ciascun
atto re co invo lto nei flussi di lavoro dispo nesse di un account
personale , gode ndo pertanto de lle re lative proprie tà di autenticazione
ed auto rizzazio ne. Ho quindi creato tre utenti, uno per ciascun ruo lo
necessario , rispettivamente stude nte , reviewer e supe rviso re
                                 studente
(re latore) . Ad o gnuno di essi ho fatto corrisponde re un gruppo in
Share Po int (stude nts, reviewers e superviso rs) , in mo do da garantire
                                                  rs),
flessibilità qualora si do vessero mo dificare i permessi relativi a tutti
gli utenti che rico prono il medesimo ruo lo sfruttan do il concetto di
                                                sfruttando
ereditarietà. Sono state quindi definite due carte lle sul sito
Share Po int: repository (ne
                           (nella quale vengono caricate i docume nti dagli
                                      le
stude nti) e re view (a disposizio ne de i revie wer e re lato ri) ,
quest’ ultima lista presenta due co lo nne personalizzate , una re lativa
         ltima
allo status (campo boo le ano che indica se la tesi è stata approvata o
meno) e un’ altra contenente l’e lenco degli utenti co involti ne l processo
di revisione ( il campo è un tipo di dato pre definit o de dicato alla
                                                 definito
gestio ne degli ute nti, oppo rtunamente configurato in modo da po ter
contene re più valo ri conte mpo rane amente)




Figura 1: esempio upload di un file e relativa assegnazione ai rispettivi reviewers




                                             ~ 19 ~
1.1 Invio semplici notifiche implementate con
SharePoint Designer


Per il primo esempio di imple mentazione è stato usato so lame nte
Share Po int Designer. Un wo rkflo w applicato alla lista re posito ry viene
attivato automaticamente o gni qualvolta si cre ii un nuo vo docume nto
ne lla stessa e si o ccupa di mandare un messaggio di ringraziamento
all’ utente che ha caricato il file ne lla carte lla (si presuppone che
l’ ute nte in questio ne co incida con lo stude nte autore della tesi) e d uno
al re lato re (che si presupp o ne unico proprie tario de lla carte lla a cui è
                      presuppo
associato il flusso di lavoro) contene nte l’url de lla risorsa
corrispondente.




Figura 2: esempio di implementazione di un workflow con SharePoint Designer




Un altro workflow associato alla lista re view, anch’esso attivato
auto maticamente ad o gni uplo ad, spedisce analo gamente una mail a
ciascun reviewe r specificato ne l campo contenente l’e lenco de gli utenti
associati (re vie we rs assigned) , so lle citando li a prende re visione de l
                        assigned),
docume nto in questione ( indicato pe r me zzo di link all’ url) e fornire un
riscontro a riguardo. I l flusso di lavo ro si co nsidera immediatamente
concluso do po que st’operazione . Con questa so luzione non è possibile
                     st’operazione.
inviare via mail un rie pilogo de i documenti non anco ra approvati
presenti ne lla lista, in quanto Share Point Designe r no n riesce a gestire


                                           ~ 20 ~
in maniera versatile concetti come i dataset, infatti per gestire l’ invio
della mail a più destinatari si è reso necessario ricorrere ad una
variabile locale di tipo stringa formata dalla concatenazione dei valori
presenti nell’elenco. Tuttavia il relatore potrebbe verificarli
autonomamente semplicemente aprendo una pagina del sito costituita
da una vista filtrata sull’elenco in questione.




                                  ~ 21 ~
1.2 Aggiunta di un rep
     ggiunta       report alle notifiche


Per ovviare alla mancanza de l rie pilo go via mail si può aggiungere un
terzo wo rkflo w, impleme ntato con Visual Studio, mantenendo inalterati
que lli appena descritti in SharePo int Designe r I l flusso di lavoro , a
                                                   r.
differe nza de i precedenti, si attive rà non più ad ogni nuovo e le mento,
ma anche ad ogni modifica. In questo modo quando si modificano le
proprie tà de l documento contrassegnando lo come approvato , il flusso
di lavoro co mpie l' unica az ione specificata, cioè inviare un’e mail al
                           azione                             un’e-
re latore; questa conterrà l’e le nco de gli url corrisponde nti ai documenti
         ;
ancora in attesa di appro vazio ne. Pe r otte nere ciò ho inserito ne l
codice una query che valuta la clauso la re lativa al valo re conte nuto
ne l campo appro ve d e ho concatenato i risultati in una stringa da
usare ne l body de ll’e-mail.
                        mail.




Figura 3: esempio di semplice workflow in Visual Studio




                                            ~ 22 ~
Figura 4: esempio di workflow in esecuzione




                                              ~ 23 ~
2. Caso reale: utenti occasionali

Una delle principali problematiche sorte in fase progettuale è stata il
controllo degli accessi al sito. Infatti non si poteva disporre di account
per ogni singolo attore coinvolto, mentre supervisori e studenti sono
dotati di username e password individuali, per i reviewer che nella
maggior parte dei casi entrano in contatto con il portale solamente
una volta ( quando cioè prelevano il documento dal server) , risulta
troppo oneroso attivare un account per ciascuno, percui l’ accesso
viene garantito condividendo le credenziali tra tutti coloro che
ricoprono il ruolo di reviewer. Ciò impedisce di adottare le soluzioni
esposte in precedenza in quanto rende impossibile sfruttare le
informazioni relative all’ utente, senza contare che al compimento di
un’azione da parte del reviewer il sistema non è in grado di
distinguere chi realmente impersoni il ruolo, e quindi associarne le
autorizzazioni corrispondenti.




                                 ~ 24 ~
2.1 Recupero informazioni su db esterno


Per mantenere in relazione le informazioni concernenti i reviewer ed i
progetti ad essi assegnati, ho impiegato il database solitamente
interrogato dal relatore per estrarre manualmente i dati di cui sopra.
Il database dispone di informazioni riguardanti il documento
contenente l’elaborato ed il suo autore, e gli attori coinvolti nel
processo di approvazione: reviewers e supervisor. Ogni volta che uno
studente sottopone un elaborato all’ attenzione del proprio relatore,
quest’ ultimo deve aggiornare la tabella che associa i reviewer al
progetto.

Ho scritto una query che a partire da un parametro di input
rappresentante il nome del file (che deve coincidere con quello
caricato) fornisce il titolo della tesi in questione e gli indirizzi e- mail
del supervisor e dei reviewer assegnati.




Figura 5: implementazione in Visual Studio di un semplice workflow sequenziale che inolta un e-
mail al caricare di un file




Il primo workflow, incaricato di gestire l’ upload dei file sul sito
SharePoint da parte degli studenti segue la medesima logica di quello
visto in precedenza, inviando un messaggio al relatore contenente il
link per accedere alla nuova risorsa.



                                            ~ 25 ~
Il secondo flusso di lavoro prese nta una maggiore complessità Ne i
                                                          complessità.
casi precedenti si era assunto per se mplicità che la figura de l re latore
co incidesse co l proprie tario de lla pagina web, co n que sta nuo va
versione de l wo rkflo w invece le informazioni re lative al supe rvisor
risie dono ne l database , in questo modo è anche possibile che la stessa
lista o spiti le te si di più re lato ri contemporaneamente , scinde ndo la
  sta                                    contemporaneamente,
figura de ll’autore de lla lista da que lla de l supe rvisor
                                                      rvisor.




Figura 6: workflow sequenziale in Visual Studio con valutazione di più condizioni




Il flusso di lavo ro si attiva ad ogni creazione di un nuo vo e lemento
ne lla lista e rimane attivo grazie ad un ciclo while fino a quando il
campo status de l docume nto non assume un de terminato valore .
Questo contro llo è svo lto ad o gni mo difica de l file o de lle sue
                                                           delle
proprie tà, una serie di if e lse confrontano il valo re de l campo di
                           if-e
status. In questa soluzione ho esteso questo campo facendo in mo do
che po tesse assumere tre valori di tipo testo(a differe nza de i due
boo leani visti in precedenza): pending, appro ve d by re viewe rs e
                                                  ved
approve d by superviso r Se questo campo rimane invariato , non
                          r.
compie alcuna azione, se co rrisponde al valo re pending viene spe dita
un’e-mail in cui si invita ciascun re v iewer a prendere visione de l file in
       mail                            viewer
questione ed un’e-mail al responsabile de lla lista inse re ndo ne l corpo
                     mail
de l messaggio l’e lenco de i documenti no n anco ra appro vati
definitivamente . Qualo ra il campo di status assuma il valore approve d
                     ualo
by re viewe rs vengono spe dite e mail ai medesimi so ggetti de l caso
                                  e-


                                             ~ 26 ~
precedente ma con contenuti differenti, ai reviewer arriverà un
messaggio in cui li si ringrazia per il lavoro svolto, al responsabile la
stessa struttura dell’e-mail già vista, ma con l’elenco opportunamente
aggiornato. Infine, se lo status diviene approved by supervisor
significa che anche l’ultima valutazione è stata data, pertanto un’e-
mail ringrazia per l’operato svolto il supervisor analogamente a quanto
accaduto nei casi precedenti per i reviewer ed al responsabile della
lista arriverà una notifica in cui si indica che il processo di
approvazione del documento è giunto al termine. Quando si verifica
quest’ ultima ipotesi l’esecuzione del flusso esce dal ciclo principale ed
il workflow si considera concluso.




                                 ~ 27 ~
Figura 7: tabella di esempio utilizzata per archiviare le informazioni relative ai reviewer




                                                                           ~ 28 ~
Difficoltà incontrate

L’attività che ha richiesto più tempo è stata la configurazione
dell’ ambiente di sviluppo. L’ installazione di SharePoint e la successiva
configurazione richiedono un notevole impegno, inoltre non sempre le
risorse hardware minime di un home pc attualmente riescono a
soddisfare i requisiti minimi del sistema. L’ installazione della
piattaforma sul sistema operativo Windows 7 non è ben documentata
in rete e risulta piuttosto macchinosa.

Il deploy dei workflow è abbastanza semplice finché si utilizzano le
pagine prescelte per il debug, ma qualora si voglia distribuire una
soluzione su diversi siti è necessario compiere una serie di operazioni
manuali per niente semplici.




                                  ~ 29 ~
Possibili sviluppi

Combinando assieme gli strumenti messi a disposizione da SharePoint
è possibile comporre dei workflow rispondenti ad ogni esigenza, la
maggior parte delle funzionalità più comuni è alla portata anche di
sviluppatori non esperti.

La gestione automatizzata dei documenti digitali potrebbe evitare il
ricorso a supporti cartacei, velocizzando gli itineris, abbattendo i costi
ed i problemi legati alle distanze. Infatti spesso gli uffici risultano
intasati da fascicoli e tenerli in ordine è conseguentemente laborioso,
inoltre il rischio che qualcuna di queste pratiche venga smarrita è
tanto più alto quanto più difficile è interrogarne l’ archivio.

Ad esempio si potrebbe progettare un servizio web sul portale
dell’ università che, tenendo conto delle credenziali dell’ utente,
permetta agli studenti di inviare tramite internet le proprie tesi di
laurea, senza essere obbligati a presentarsi fisicamente allo sportello
muniti di copia cartacea dell’elaborato.




                                  ~ 30 ~
Ringraziamenti

Vorrei ringraziare tutti coloro che in questi anni hanno creduto in me
sostenendomi ed incoraggiandomi, soprattutto durante i numerosi
momenti di sconforto. Ma ancor di più ci tengo a ringraziare coloro
che al contrario mi hanno ripetuto che non ce l’avrei mai fatta,
stimolando la mia testardaggine a cercare di contraddirli. Infatti è
anzitutto grazie a questi ultimi che ho imparato a non accontentarmi
di obiettivi facili e a puntare sempre più in alto.

Il primo pensiero va alla mia famiglia, ovvero mia madre e mia nonna,
ma naturalmente anche a coloro che purtroppo non potranno esserci di
persona, in primis a mio padre, per aver avuto fiducia in me .

Un enorme grazie va ai miei amici, che con il loro affetto mi hanno
fatto sentire meno sola, sopportando il mio caratteraccio. M i astengo
dal fare nomi perché l’elenco sarebbe troppo lungo e avrei paura di
dimenticarne qualcuno, tra quelli che conosco da oltre 20 anni, quelli
che sono entrati nella mia vita solo da pochi mesi e quelli che per un
motivo o per l’altro ho perso di vista.

Un ringraziamento al mio relatore, il prof. Maurizio Fermeglia, che con
il proprio pragmatismo mi ha aiutato a concludere questo lungo
percorso di studi. Ringrazio inoltre tutto l’Ateneo per avermi offerto
l’opportunità di affrontare la laurea come fosse una sfida personale.




                                ~ 31 ~
Fonti bibliografiche


Testi

  •     “Beginning SharePoint 2010 – Building Business Solutions with
        SharePoint” A. Perran, S. Perran, J. Mason, L. Rogers
  •     “SharePoint 2010 Development with Visual Studio 2010” E.
        Carter, B. Scholl, P. Jausovec (Addison-Wesley)
  •     “SharePoint 2010 Workflows In Action” P. Wicklund (Manning)




Riferimenti web

  •     http://office.microsoft.com/ it- it/sharepoint-help/
  •     http://www.wfmc.org/




                                    ~ 32 ~
Appendice

Workflow 1.2
using    S y st e m ;
using    S y st e m . Co m po n e n tM o d e l;
using    S y st e m . Co m po n e n tM o d e l. D e s i gn ;
using    S y st e m . Co l l e c t io n s ;
using    S y st e m . D r a w in g;
using    S y st e m . L i n q;
using    S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ;
using    S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ;
using    S y st e m . Wo r k f l o w . C o m po n e n tM o d e l;
using    S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ;
using    S y st e m . Wo r k f l o w . R u n t i m e ;
using    S y st e m . Wo r k f l o w . A ct iv i t i e s;
using    S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ;
using    M i cr o s o f t. S h ar e P o in t;
using    M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ;
using    M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s;

n a m e sp a ce A ppr o v i n g. W o r k f l o w 1
{
    p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y
    {
         pu b l i c Wo r k f l o w 1( )
         {
               I n i t i a l iz e Co m po n e n t ( ) ;
         }

         pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ;
         pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w
S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ;
         pu b l i c S tr i n g s e n dE m a i l R e po r t _B o d y = d e f au l t( S y s te m . S tr i n g ) ;
         pu b l i c S tr i n g s e n dE m a i l R e po r t _S u b j e c t = de f a u lt ( S y st e m . S tr i n g ) ;
         pu b l i c S tr i n g s e n dE m a i l R e po r t _T o = de f au l t( S y s te m . S tr in g) ;

           pr iv a te v o i d o n Wo r k f l o w A c t iv at e d 1 _ I n v o k e d( o b je c t s e n d e r ,
E x t e r n a lD a t aE v e n tA r gs e )
           {
                str i n g d o c L i st = g e t D a t a( ) ;
                se n d E m a i lR e p o r t _T o = w o r k f lo w P r o p e r t i e s. L i st. A u th o r . E m a i l;
                se n d E m a i lR e p o r t _S u b j e c t = "A f i l e w as c h a n ge d in " +
w o r k f lo w P r o pe r t i e s. L i st. T i t l e ;
                se n d E m a i lR e p o r t _B o dy = "T h e f o l l o w in g do cu m e n ts a r e s t i l l w a i t in g f o r
a pr o v a l: " + d o c L is t;

         }
         pu b l i c str i n g g e tD a t a( )
         {
             str i n g a = s tr in g. E m p ty ;

              str i n g s tr U r l = w o r k f l o w P r o p e r t i e s. S i te U r l + "/ ";
              u s i n g ( S P S it e s i te = n e w S P S i te( str U r l) )
              {
                    u s in g ( S P We b w e b = s i te . O pe n W e b( ) )
                    {
                         st r in g l i st n am e = w o r k f lo w P r o p e r t i e s. L i st. T it l e ;
                         S P L i st l i st = w e b. L is ts [ l is t n a m e ] ;
                         S P Qu e r y m y q u e r y = n e w S P Q u e r y ( ) ;

                                                             ~ 33 ~
m y qu e r y . Qu e r y = " ";
                     S P L i st I te m Co l l e c t io n it e m s = l is t. Ge tI te m s( m y q u e r y ) ;

                     f o r e a c h ( S P L is tI t e m i te m in i te m s)
                     {
                           if ( i te m ! = n u l l )
                           {
                                str i n g x = i te m . G e t F o r m a tt e dV a lu e ( " ap pr o v e d ") ;
                                if ( it e m . Ge t Fo r m at te dV a lu e ( " a ppr o v e d ") = = "Y e s ")
                                {
                                }
                                e ls e
                                {
                                     a = a + "< br > " + w o r k f l o w P r o p e r t i e s . S it e U r l + " / " +
i te m . U r l ;
                               }

                           }
                     }
                  }
               }
               return a;
          }

     }
}




                                                       ~ 34 ~
Workflow 2.1
using     S y st e m ;
using     S y st e m . Co m po n e n tM o d e l;
using     S y st e m . Co m po n e n tM o d e l. D e s i gn ;
using     S y st e m . Co l l e c t io n s ;
using     S y st e m . D r a w in g;
using     S y st e m . L i n q;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ;
using     S y st e m . Wo r k f l o w . R u n t i m e ;
using     S y st e m . Wo r k f l o w . A ct iv i t i e s;
using     S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ;
using     M i cr o s o f t. S h ar e P o in t;
using     M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ;
using     M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s;

n a m e sp a ce D o cU p lo a d. W o r k f l o w 1
{
    p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y
    {
         pu b l i c Wo r k f l o w 1( )
         {
               I n i t i a l iz e Co m po n e n t ( ) ;

          }

         pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ;
         pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w
S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ;

          pu b l i c S tr i n g s e n dE m a i l 1 _B o d y 1 = de f a u lt ( S y st e m . S tr i n g) ;
          pu b l i c S tr i n g s e n dE m a i l 1 _S u b je ct 1 = de f au l t( S y s te m . S tr in g) ;
          pu b l i c S tr i n g s e n dE m a i l 1 _T o 1 = de f au l t( S y s te m . S tr i n g) ;

           pr iv a te v o i d o n Wo r k f l o w A c t iv at e d 1 _ I n v o k e d( o b je c t s e n d e r ,
E x t e r n a lD a t aE v e n tA r gs e )
           {

               se n d E m a i l 1 _T o 1 = w o r k f l o w P r o p e r t i e s. L is t. A u th o r . E m a i l;
               se n d E m a i l 1 _S u b je ct 1 = " D o cu m e n t u p lo a de d: " +
w o r k f lo w P r o pe r t i e s. I te m . D is p l ay N am e ;
               se n d E m a i l 1 _B o d y 1 = "T h i s d o c u m e n t i s av a i ab l e : " +
w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l ;

          }


     }
}




using     S y st e m ;
using     S y st e m . Co m po n e n tM o d e l;
using     S y st e m . Co m po n e n tM o d e l. D e s i gn ;
using     S y st e m . Co l l e c t io n s ;
using     S y st e m . D r a w in g;


                                                              ~ 35 ~
using     S y st e m . L i n q;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l;
using     S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ;
using     S y st e m . Wo r k f l o w . R u n t i m e ;
using     S y st e m . Wo r k f l o w . A ct iv i t i e s;
using     S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ;
using     M i cr o s o f t. S h ar e P o in t;
using     M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ;
using     M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s;
using     S y st e m . D a t a. O l e D b;
using     S y st e m . D a t a;
using     S y st e m . Co l l e c t io n s . G e n e r i c;

n a m e sp a ce R e v ie w i n g. W o r k f l o w 1
{
    p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y
    {
         pu b l i c Wo r k f l o w 1( )
         {
               I n i t i a l iz e Co m po n e n t ( ) ;
         }

         pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ;
         pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w
S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ;

          pu b l i c   bo o l r e s = tr u e;
          pu b l i c   S t ac k < s tr in g> ds = n e w S t ac k < st r in g> ( ) ;
          pu b l i c   str i n g to = s tr in g. E m p ty ;
          pu b l i c   str i n g f i l e n am e = str i n g. E m p t y ;
          pu b l i c   str i n g t h e s i s = str i n g. E m p ty ;
          pu b l i c   str i n g d o cL i s t = str i n g . E m pt y ;
          pu b l i c   str i n g s u p e r v i so r = s tr in g. E m p ty ;
          pu b l i c   str i n g o w n e r = s tr in g. E m pty ;


          pr iv a te v o i d W h i l e Co n d i t io n ( o b je ct se n d e r , Co n d i t io n a lE v e n tA r gs e )
          {
              e . R e s u lt = r e s;

               f i l e n am e = w o r k f lo w P r o pe r t i e s. I te m . F i l e. N am e ;
               o w n e r = w o r k f lo w P r o p e r t i e s. L i st. A u t h o r .E m a i l ;

              O le D b Co n n e ct i o n o c = n e w
O le D b Co n n e c t io n ( @ " P r o v id e r = M i cr o so f t. A CE . OL E D B. 1 2. 0; D a t a
S o u r ce = F :  R e v i e w e r s N a n o te ch . a cc d b; P e r s i st S e cu r i ty I n f o = F a l se ; ") ;

                str i n g q u e r y = " R e v i e w e r Q u e r y ";
                o c. Op e n ( ) ;
                O le D b Co m m an d co m = n e w O le D bC o m m a n d ( q u e r y , o c ) ;
                co m . Co m m a n dT y p e = Co m m an dT y pe. S t o r e dP r o c e d u r e ;
                co m . P a r a m e te r s. A d d( "@ f i l e n a m e ", O le D bT y p e . V ar Ch a r ) . V a lu e =
f i l e n am e ;


               O le D b D a t aR e a d e r d r = co m . E x e c u te R e a de r ( ) ;

               w h i le ( dr . R e a d( ) )

                                                              ~ 36 ~
{

                      d s. P u s h ( dr . Ge tS tr in g( 0) ) ;
                      s u p e r v i s o r = dr . Ge tS tr in g( 1) ;
                      t h e s is = dr . Ge tS tr in g( 2) ;

               }

              i n t m a x = d s. C o u n t;
              f o r ( i n t co n t a = 0; co n t a < m ax ; co n t a+ + )
              {

                      t o = ds. P o p( ) + "; " + to ;
               }

               dr . C lo se ( ) ;

          }

         pu b l i c H as h t a b l e o n W o r k f lo w I te m C h an ge d 1_ A f te r P r o p e r t i e s 1 = n e w
S y s te m . C o l le ct i o n s. H as h t a b l e ( ) ;
         pu b l i c H as h t a b l e o n W o r k f lo w I te m C h an ge d 1_ B e f o r e P r o p e r t ie s1 = n e w
S y s te m . C o l le ct i o n s. H as h t a b l e ( ) ;

         pu b l i c   S tr i n g   s e n dE m a i lP e n d i n g _T o = de f au l t( S y s te m . S tr in g) ;
         pu b l i c   S tr i n g   s e n dE m a i lP e n d i n g _S u bj e c t = de f au l t( S y s te m . S t r in g) ;
         pu b l i c   S tr i n g   s e n dE m a i lP e n d i n g _B o dy = de f au l t( S y s te m . S tr i n g ) ;
         pu b l i c   S tr i n g   s e n dE m a i lP e n d i n g _C C = d e f au l t( S y s te m . S t r i n g ) ;
         pu b l i c   S tr i n g   s e n dE m a i l R e v i e w e d _ B o dy = d e f au l t( S y s te m . S t r in g) ;
         pu b l i c   S tr i n g   s e n dE m a i l R e v i e w e d _ C C = de f a u lt ( S y st e m . S tr i n g ) ;
         pu b l i c   S tr i n g   s e n dE m a i l R e v i e w e d _S u b je ct = d e f au l t( S y s te m . S t r in g) ;
         pu b l i c   S tr i n g   s e n dE m a i l R e v i e w e d _T o = de f au l t( S y st e m . S tr i n g ) ;
         pu b l i c   S tr i n g   s e n dE m a i l A p pr o v e d _B o dy = d e f au l t( S y s te m . S t r in g) ;
         pu b l i c   S tr i n g   s e n dE m a i l A p pr o v e d _C C = de f a u lt ( S y st e m . S tr i n g ) ;
         pu b l i c   S tr i n g   s e n dE m a i l A p pr o v e d _S u b je ct = d e f au l t( S y s te m . S t r in g) ;
         pu b l i c   S tr i n g   s e n dE m a i l A p pr o v e d _T o = de f au l t( S y st e m . S tr i n g ) ;

         pu b l i c S tr i n g s e n dE m a i l R e w R e l _ Bo d y = d e f au l t( S y s te m . S tr i n g ) ;
         pu b l i c S tr i n g s e n dE m a i l R e w R e l _S u b je ct = d e f au l t( S y s te m . S t r in g) ;
         pu b l i c S tr i n g s e n dE m a i l R e w R e l _T o = de f au l t( S y s te m . S tr in g) ;

         pu b l i c S tr i n g s e n dE m a i l R e l _ Bo dy = de f a u lt ( S y st e m . S tr i n g) ;
         pu b l i c S tr i n g s e n dE m a i l R e l _S u bj e c t = d e f au l t( S y s te m . S t r i n g ) ;
         pu b l i c S tr i n g s e n dE m a i l R e l _T o = de f au l t( S y st e m . S tr i n g ) ;

         pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _B o d y = de f a u lt ( S y s te m . S t r in g) ;
         pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _S u b je ct = de f a u lt( S y s te m . S tr in g) ;
         pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _T o = d e f au l t( S y s te m . S t r in g) ;

         pr iv a te v o i d N o tC h a n ge d( o b je ct s e n de r , C o n d it i o n a lE v e n tA r gs e )
         {
                str i n g a S t a t u s =
o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ;
                if ( o n W o r k f l o w I te m C h a n ge d1 _ Be f o r e P r o p e r t ie s1 [" S t a t u s "] = = n u l l )
                {
                     e . R e su l t = f a l se ;
                     r e tu r n ;
                }
                str i n g b S t a t u s =
o n W o r k f l o w I t e m Ch an ge d1 _ Be f o r e P r o pe r t i e s 1[ "S t at u s "] . T o S tr i n g( ) ;

                                                              ~ 37 ~
if ( b S t a tu s = = a S t a tu s)
               {
                    e . R e su l t = tr u e;
               }
               e ls e
               {
                    e . R e su l t = f a l se ;
               }

          }

         pr iv a te v o i d P e n d i n g ( o bj e c t se n d e r , Co n d i t io n a lE v e n tA r g s e )
         {
                str i n g a S t a t u s =
o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ;
                do cL i st = g e tD a t a( ) ;

               se n d E m a i lP e n d in g_ T o = to ;
               se n d E m a i lR e l_T o = o w n e r ;

               se n d E m a i lP e n d in g_ S u b je ct = " D o cu m e n t w a i t in g f o r y o u r a p pr o v a l: " +
th e s i s;
               se n d E m a i lR e l_ S u bj e c t = "D o c u m e n t u p lo a de d: " + th e s i s;
               se n d E m a i lP e n d in g_ Bo dy = " T h e f o l lo w i n g d o c u m e n t i s av a i ab l e h e r e : "
+ w o r k f l o w P r o p e r t i e s . S it e U r l + " / " + w o r k f l o w P r o pe r t i e s. I te m U r l + "
< br > P l e as e g i v e u s a f e e d b ack a s so o n a s po ss i b l e . < br > B e st R e g ar ds ";
               se n d E m a i lR e l_ Bo dy = " D o cu m e n t av a i ab l e : " +
w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br >
T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t;


               if ( aS ta tu s = = " pe n d i n g")
               {

                    e . R e su l t = tr u e;

               }
               e ls e
               {
                    e . R e su l t = f a l se ;
               }

          }

         pr iv a te v o i d R e v i e w e d( o b je c t s e n de r , Co n d i t io n a lE v e n tA r gs e )
         {
                / / a p pr o v e d by r e v ie w e r s
                str i n g a S t a t u s =
o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ;
                do cL i st = g e tD a t a( ) ;

               se n d E m a i lR e v ie w e d_T o = to ;
               se n d E m a i lR e w R e l_T o = o w n e r ;

            se n d E m a i lR e v ie w e d_ S u bj e c t = " T h a n k s f o r r e v i e w i n g ";
            se n d E m a i lR e w R e l_ S u bj e c t = "D o cu m e n t r e v ie w e d: " + th e s i s;
            se n d E m a i lR e v ie w e d_ Bo dy = "T h an k y o u f o r r e v ie w i n g " + t h e s i s +
"< b r > B e st R e g ar d s " ;




                                                            ~ 38 ~
se n d E m a i lR e w R e l_ Bo dy = " D o cu m e n t av a i a b le : " +
w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br >
T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t;


              if ( aS ta tu s = = " a ppr o v e d by r e v i e w e r s ")
              {

                   e . R e su l t = tr u e;
              }
              e ls e
              {
                   e . R e su l t = f a l se ;
              }
          }

         pr iv a te v o i d A p pr o v e d( o bj e ct se n d e r , Co n d i t io n a lE v e n tA r gs e )
         {
                / / a p pr o v e d by su pe r v is o r
                str i n g a S t a t u s =
o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ;
                do cL i st = g e tD a t a( ) ;

              se n d E m a i lA ppr o v e d _T o = o w n e r ;
              se n d E m a i lA ppr o v e d R e l _T o = s u p e r v is o r ;

              se n d E m a i lA ppr o v e d _S u b je c t = " D o c u m e n t ap pr o v e d by su pe r v is o r : " +
th e s i s;
               se n d E m a i lA ppr o v e d R e l _S u b je c t = "A p pr o v i n g c o m p le te d: " + th e s i s;
               se n d E m a i lA ppr o v e d _B o dy = "D o cu m e n t av a i a b le : " +
w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br >
T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t;
               se n d E m a i lA ppr o v e d R e l _B o d y = " T h a n k y o u f o r a pp r o v in g " + th e s is +
"< b r > B e st R e g ar d s " ;


              if ( aS ta tu s = = " a ppr o v e d by su p e r v is o r ")
              {

                   e . R e su l t = tr u e;


              }
              e ls e
              {
                   e . R e su l t = f a l se ;
              }

              r e s = f a ls e;
          }

          pu b l i c str i n g g e tD a t a( )
          {
              str i n g a = s tr in g. E m p ty ;

              str i n g s tr U r l = w o r k f l o w P r o p e r t i e s. S i te U r l + "/ ";
              u s i n g ( S P S it e s i te = n e w S P S i te( str U r l) )
              {
                    u s in g ( S P We b w e b = s i te . O pe n W e b( ) )
                    {

                                                           ~ 39 ~
st r in g l i st n am e = w o r k f lo w P r o p e r t i e s. L i st. T it l e ;
                        S P L i st l i st = w e b. L is ts [ l is t n a m e ] ;
                        S P Qu e r y m y q u e r y = n e w S P Q u e r y ( ) ;
                        m y qu e r y . Qu e r y = " ";
                        S P L i st I te m Co l l e c t io n it e m s = l is t. Ge tI te m s( m y q u e r y ) ;

                        f o r e a c h ( S P L is tI t e m i te m in i te m s)
                        {
                              if ( i te m ! = n u l l )
                              {
                                   if ( it e m . Ge t Fo r m at te dV a lu e ( "S t at u s ") = = " ap pr o v e d by
su pe r v i s o r " )
                               {
                               }
                               e ls e
                               {
                                    a = a + "< br > " + w o r k f l o w P r o p e r t i e s . S it e U r l + " / " +
i te m . U r l + " ( " + it e m . G e t Fo r m at te dV a l u e (" S t a tu s ") + ") ";
                               }

                            }
                        }
                  }
               }
               return a;
          }



     }
}




                                                          ~ 40 ~
Query Database


PARAMETERS filename Text ( 255 );

SELECT Reviewers.[E-mail Address], Reviewers.emailSupervisor,
Reviewers.ThesisT itle

FROM Reviewers

WHERE (((Reviewers.filename)=[ filename]));




                              ~ 41 ~

Contenu connexe

Similaire à Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

Regione Labict Presentazione Ictcollab 20080512 V02
Regione Labict Presentazione Ictcollab 20080512 V02Regione Labict Presentazione Ictcollab 20080512 V02
Regione Labict Presentazione Ictcollab 20080512 V02
Gian Luca Matteucci
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Matteo Miotto
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
artemedea
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
diegohusu
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
ozacchig
 
Strumenti Web2
Strumenti Web2Strumenti Web2
Strumenti Web2
sidelab1
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Marco Furlanetto
 

Similaire à Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010 (20)

Scelta Software Elearning
Scelta Software ElearningScelta Software Elearning
Scelta Software Elearning
 
Regione Labict Presentazione Ictcollab 20080512 V02
Regione Labict Presentazione Ictcollab 20080512 V02Regione Labict Presentazione Ictcollab 20080512 V02
Regione Labict Presentazione Ictcollab 20080512 V02
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
 
Tesi di Laurea Paolo Selce
Tesi di Laurea Paolo SelceTesi di Laurea Paolo Selce
Tesi di Laurea Paolo Selce
 
Smart api
Smart apiSmart api
Smart api
 
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
 
Banca Popolare di Milano, l'esperienza con DocFlow RIN | ABILab Forum 2014
Banca Popolare di Milano, l'esperienza con DocFlow RIN | ABILab Forum 2014Banca Popolare di Milano, l'esperienza con DocFlow RIN | ABILab Forum 2014
Banca Popolare di Milano, l'esperienza con DocFlow RIN | ABILab Forum 2014
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
 
Web Usability - 2 | WebMaster & WebDesigner
Web Usability - 2 | WebMaster & WebDesignerWeb Usability - 2 | WebMaster & WebDesigner
Web Usability - 2 | WebMaster & WebDesigner
 
Strumenti Web2.0
Strumenti Web2.0Strumenti Web2.0
Strumenti Web2.0
 
Web usability - 2 | WebMaster & WebDesigner
Web usability - 2 | WebMaster & WebDesignerWeb usability - 2 | WebMaster & WebDesigner
Web usability - 2 | WebMaster & WebDesigner
 
Strumenti Web2
Strumenti Web2Strumenti Web2
Strumenti Web2
 
TESIPOLI
TESIPOLITESIPOLI
TESIPOLI
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
 
Conoscenza e PA
Conoscenza e PAConoscenza e PA
Conoscenza e PA
 
Exlab coaching
Exlab coachingExlab coaching
Exlab coaching
 

Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE F A C OL T À DI I N GE GN E R I A C OR S O D I L A U R E A S P E CI A L I S T I C A I N I N GE GN E R I A I N F OR M A T I CA Tesi di laurea in Complementi di Basi di Dati Studio e realizzazione di soluzioni per lavoro collaborativo basate sul motore di workflow di SharePoint 2010 Laureando Relatore Alexia Cociancich Chiar.mo Prof. Maurizio Fermeglia Anno Accademico 2010/ 2011 ~1~
  • 2. ~2~
  • 4. Sommario Introduzione........................................................................................................................................ 5 Caso in esame ................................................................................................................................... 6 Approccio tradizionale ............................................................................................................. 7 Approccio server .......................................................................................................................... 8 Approccio SharePoint ............................................................................................................... 9 Strumenti utilizzati ...................................................................................................................... 10 SharePoint ...................................................................................................................................... 10 Visual Studio 2010 Ultimate.............................................................................................. 12 Microsoft Access 2010 ........................................................................................................... 13 Smtp4Dev ....................................................................................................................................... 14 Workflow .............................................................................................................................................. 15 I workflow in SharePoint ..................................................................................................... 16 Workflow: caso specifico ......................................................................................................... 17 1. Caso ideale: utenti SharePoint ................................................................................... 19 1.1 I nvio semplici notifiche implementate con SharePoint Designer .. 20 1.2 Aggiunta di un report alle notifiche ................................................................... 22 2. Caso reale: utenti occasionali ..................................................................................... 24 2.1 Recupero informazioni su db esterno ................................................................ 25 Difficoltà incontrate .................................................................................................................... 29 Possibili sviluppi ............................................................................................................................ 30 Ringraziamenti ................................................................................................................................ 31 Fonti bibliografiche ...................................................................................................................... 32 Appendice ........................................................................................................................................... 33 Workflow 1.2 ................................................................................................................................ 33 Workflow 2.1 ................................................................................................................................ 35 Query Database .......................................................................................................................... 41 ~4~
  • 5. Introduzione Spesso, quando si deve presentare un documento formale, ci si trova a dover ripetere più volte le stesse operazioni, tanto che nella maggioranza dei casi l’ iter è sintetizzabile con un algoritmo standard. Per questo motivo automatizzare gli step ricorrenti può essere utile al fine di snellire le procedure. Quando in questo algoritmo si richiede la collaborazione di diversi utenti mediante lo scambio di informazioni, si parla di workflow. Ad Esempio si può presentare l’esigenza di dover far approvare un documento, sottoponendolo all’ attenzione di più persone. Per fare ciò bisogna innanzitutto condividere il materiale da approvare, scambiando quindi dei file tra utenti. ~5~
  • 6. Caso in esame Il caso preso in esame coinvolge le fasi di revisione di un elaborato di tesi. Questo tipo di documento solitamente coinvolge diversi soggetti, in primis il laureando o dottorando, principale autore dello scritto, quindi vengono coinvolti dei reviewers (solitamente due o più), infine l’ ultima approvazione spetta al relatore. reviewer reviewer relatore studente reviewer ~6~
  • 7. Approccio tradizionale Tipicamente le interazioni tra gli attori coinvolti nel processo di approvazione si svolgono via e-mail, creando una catena tra i contatti. Questo sistema risulta particolarmente inefficiente per i seguenti motivi: • Il successo globale del progetto è fortemente condizionato dall’ impegno individuale dei singoli soggetti. I nfatti è sufficiente che un anello della catena si spezzi per compromettere la riuscita dell’opera • Scarsa efficienza in termini di tempo: nessuno può iniziare il lavoro finché l’elemento gerarchico precedente non ha concluso il proprio, impedendo la parallelizzazione dei processi. • Gestione delle versioni del documento non automatizzata. Ogni soggetto è tenuto a produrre una copia col rischio di confusione tra le versioni del documento. • Gestione delle notifiche soggetta ad errore umano. Chi è incaricato di avvisare gli altri componenti del progetto può sbagliare o dimenticare di inoltrare un messaggio di notifica ~7~
  • 8. Approccio server Una prima evoluzione del sistema consiste nel predisporre uno spazio su un server ove caricare di volta in volta il documento da sottoporre a revisione. I vantaggi di questo approccio, rispetto a quello precedentemente descritto sono i seguenti: • Il documento è sempre disponibile a tutti coloro che hanno l’ autorizzazione ad accedere alla risorsa • Più soggetti possono iniziare il proprio lavoro contemporaneamente Tuttavia questi stessi punti di forza comportano dei rischi collaterali: • Difficoltà della gestione delle versioni del documento. Qualora due o più utenti iniziassero a modificare contemporaneamente lo stesso file, ci si troverebbe davanti ad una situazione confusa e disordinata delle versioni • Le operazioni di scaricamento, caricamento, eventuale rinomina del file sono affidate all’ utente e quindi soggette ad errore • Le autorizzazioni relative ai documenti valgono per tutta la durata del processo di revisione, percui non è possibile distinguere dal punto di vista informatico in che fase il singolo soggetto possa/ debba intervenire ~8~
  • 9. Approccio SharePoint Utilizzare sul server SharePoint costituisce un valore aggiunto. Permette infatti di automatizzare la gestione dei documenti condivisi da più utenti, riducendo il margine di errore in un’ottica maggiormente collaborativa. La piattaforma garantisce l’accesso ad utenti con ruoli diversi, ed in base alle autorizzazioni di cui gode l’ utente, permette di svolgere alcune azioni piuttosto che altre. Tramite SharePoint è possibile implementare dei flussi di lavoro che riguardano i documenti caricati sul sito, basando il workflow sull’ interazione di diversi utenti. Quest’ ultimo approccio è stato la base per lo sviluppo di una serie di soluzioni collaborative. ~9~
  • 10. Strumenti utilizzati SharePoint SharePoint è un prodotto M icrosoft pensato per la creazione di siti web in maniera collaborativa, integrando servizi intranet ed extranet in un unico portale. T ra le funzionalità principali fornite vi è un sistema che permette una gestione efficiente dei documenti digitali. Con SharePoint infatti è possibile creare cartelle su un server e controllare gli accessi alle risorse mediante Active Directory in base alle autorizzazioni possedute dall’utente, nonché personalizzarne il layout. Le edizioni di SharePoint attualmente sono tre: Foundation, Standard ed Enterprise. L’utente può accedere ai siti SharePoint mediante uno dei browser supportati: Internet Explorer 7, Firefox 3.6, Safari 4.04, Google Chrome 12, e successive versioni degli stessi 1. I requisiti minimi del sistema sono: processore a 64 bit, quad-core, 4 Gb di RAM, disco rigido da 80 Gb, sistema operativo Windows a 64 bit, SQL Server a 64 bit (dal 2005 SP3) L’ idea iniziale era quella di installare la piattaforma su una virtual machine con il sistema operativo Windows Server 2008 R2 installato ed accedervi dal sistema host, purtroppo le risorse dei laptop per uso domestico attualmente in commercio di cui mi sono servita per sviluppare il progetto, non mi avrebbero garantito delle prestazioni accettabili, qualora avessi dovuto usufruire due sistemi operativi contemporaneamente. Inoltre, come illustrato in seguito, si è reso necessario l’ impiego dell’ ambiente di sviluppo Visual Studio 2010, il quale, per utilizzare i tool dedicati a SharePoint, richiede l’ installazione sul medesimo sistema operativo di Windows SharePoint Services. Pertanto ho provveduto ad installare la piattaforma sulla macchina reale, che dispone di un sistema operativo Windows 7 Ultimate a 64 bit. SharePoint Foundation 2010 Disponibile gratuitamente, SharePoint Foundation ( noto nelle versioni precedenti come Windows SharePoint Services) costituisce la piattaforma per i prodotti della famiglia M icrosoft SharePoint 1 Ad eccezione delle versioni a 32 bit di Internet Explorer, i browser sono supportati con limitazioni ~ 10 ~
  • 11. (SharePoint Designer, Project Server, SharePoint Workspace, Office Web Apps, Search Server) . SharePoint Designer 2010 2 SharePoint Designer è un editor per i siti SharePoint che permette di personalizzare gli elementi in essi contenuti (elenchi, raccolte, workflow, pagine web) fornendo un’ interfaccia user-friendly ed evitando all’utente di scrivere codice a mano. Si tratta di uno strumento particolarmente efficiente per lo sviluppo delle funzionalità più comuni. 2 SharePoint Designer 2010 è compatibile solo con siti SharePoint 2010 ~ 11 ~
  • 12. Visual Studio 2010 Ultimate Visual Studio è un ambiente di sviluppo ideato per lavorare con il framework .NET. T ra i linguaggi di programmazione supportati vi è C#, che ho utilizzato durante l’ implementazione del progetto per scrivere un algoritmo in grado di descrivere il flusso di lavoro preso in esame. Inoltre Visual Studio 2010 mette a disposizione una serie di utili strumenti per lo sviluppo di soluzioni per SharePoint mediante modelli di progetto. Dalla versione più recente, definendo la relativa destinazione sul sito SharePoint, è possibile effettuare direttamente la distribuzione della soluzione nonché eseguirne il debug, ovviando il sistema di deploy manuale, che spesso risulta macchinoso. ~ 12 ~
  • 13. Microsoft Access 2010 Microsoft Access è un database management system relazionale incluso nel pacchetto Office, grazie alla propria interfaccia user- friendly è un prodotto molto diffuso per applicazioni domestiche. I l progetto prevedeva l’ interrogazione di un database esterno al sito SharePoint. Data la natura elementare della base di dati (una semplice query) su una tabella (con poche colonne ed un numero ristretto di righe), si è ritenuto che le funzionalità fornite da M icrosoft Access coprissero le esigenze del progetto. Tuttavia qualora fosse richiesto un impiego maggiormente professionale sarebbe possibile migrare i dati verso un sistema che assicuri una migliore gestione dei dati, come ad esempio, per rimanere in ambito M icrosoft, SQL Server. ~ 13 ~
  • 14. Smtp4Dev Per testare le funzionalità di invio e-mail pur non avendo di un server di posta, non disponendo di una connessione internet in fase di demo o volendo limitarsi alla simulazione dell’ invio per evitare di instradare messaggi di test, sono ricorsa ad un software freeware, Smtp4Dev, che si occupa di rimanere in ascolto sulla porta usata dal protocollo smtp ( 25 per default) intercettando così le e- mail in transito. L’ interfaccia grafica, molto semplice ed intuitiva consente all’utente una serie di utili operazioni come ad esempio la visualizzazione del messaggio tramite il client di posta configurato nel sistema. Poiché SharePoint non permette di usare localhost come nome di dominio per il server smtp, è necessario configurare tale parametro indicando il domain name del pc sia nella pagina del sito outgoing e-mail settings che all’ interno delle opzioni di Smtp4Dev ~ 14 ~
  • 15. Workflow Per workflow o flusso di lavoro si intende una sequenza di passaggi tra loro correlati atti allo scambio di informazioni tra utenti. Si può pensare come un algoritmo che descrive un lavoro mediante l’ astrazione delle attività che lo compongono per mezzo delle quali gli attori coinvolti contribuiscono attuando le azioni assegnate al proprio ruolo. O meglio, citando la Workflow Management Coalition “The automation of a business process, in whole or part, during which documents, information or tasks are passed from one participant to another for action, according to a set of procedural rules.” ~ 15 ~
  • 16. I workflow in SharePoint Workflow Foundation mette a disposizione librerie per l’ implementazione di due categorie di flussi di lavoro: sequenziali e macchina a stati. I l primo caso consiste in una successione di attività che devono essere svolte in un ordine prefissato, nel secondo caso il modello è organizzato in determinati stati, a loro volta composti da attività che, qualora completate originano un evento che determina la transazione da uno stato all’altro. SharePoint Designer consente di implementare facilmente workflow sequenziali 3, fornendo un ventaglio di operazioni standard componibili tra loro, ovvero condizioni e azioni raggruppabili in step. SharePoint Designer dispone di tre categorie di workflow: site, list o reusable. I l primo è relativo ad un sito, trova perciò campo di applicazione in diverse liste ed elementi appartenenti ad esse, i list workflow invece sono associati ad una lista specifica, i reusable workflow infine hanno il vantaggio di non costringere lo sviluppatore a scegliere a priori la lista alla quale il flusso di lavoro verrà applicato. T uttavia, per quanto ampia e personalizzabile sia la gamma di operazioni che l’editor rende disponibile e che generalmente riesce a coprire la maggior parte delle esigenze di sviluppo, qualora si renda indispensabile un’elaborazione del codice, SharePoint Designer ha delle limitazioni difficilmente sormontabili, pertanto in casi maggiormente complessi si rende necessario l’ impiego di Visual Studio. 3 È possibile simulare una macchina a stati con SharePoint Designer, inserendo workflow secondari, tuttavia si tratta di una forzatura non consigliabile nel caso di schemi particolarmente complessi. ~ 16 ~
  • 17. Workflow: caso specifico aso Il flusso di lavo ro che ho svilup pato consiste ne l proce sso di sviluppato approvazione di un e labo rato da parte di alcuni reviewer. L’ idea è stata que lla di dividere in due macro fasi il procedimento. Ne lla prima macro-fasi parte lo studente che ha redatto il documento accede al sito Share Po int e lo carica in una carte lla pre stabilita a cui hanno accesso (con pe rmesso di co llaborazione 4) so lo gli studenti e re lativi re latori a con latori, questo punto il primo wo rkflo w inizia automaticamente e viene segnalata la prese nza de l nuo vo do cumento sul server inviando un messaggio che confermi l’esito positivo de ll’o perazione allo stude nte ed una notifica via e-mail al re lato re, quest’ultimo procede mail manualmente a ve rificarne il co nte nuto (e d e ventualmente co rre ggere il nome de l file) e d assegnato al nuo vo e lemento i reviewer incaricati iewer di esaminare l’e laborato. Una vo lta ricaricato il file in un’altra carte lla sul sito ( in questo caso gli ute nti che avranno accesso alla risorsa saranno appunto i revie wer ed il re latore ha origine il secondo flusso latore) che preve de uno step iniziale in cui un’e mail di notifica contene nte le niziale un’e-mail info rmazioni nece ssarie avvisa i reviewer assegnati al proge tto de ll’esiste nza de l nuovo documento sul sito, invitando li a prendere visione de llo stesso e contattare quanto prima il re lato re. Quando quest’ ultimo avrà rice vuto l’ appro vazione da parte di tutti gli attori co invo lti, pro vve derà a modificare le pro prietà de l file sul sito, assegnando allo stesso uno status che indichi l’esito po sitivo de l processo . La variazione di questo valore innesca un e ve nt chento preve de l’ invio di un messaggio ai reviewe r di cui so pra conte nente un ringraziame nto pe r la co llabo razione pre stata ed al re latore contenente il riepilogo de lle tesi presenti ne lla re lativa carte lla e d ancora in attesa di appro vazio ne finale senza la quale il workflow no n finale, 5 può co nclude rsi . upload notifica relatore, ringraziamento studente studente upload notifica feedback cambio status ringraziamento reviewers, reviewers reviewers relatore (report relatore) 4 I tipi di permesso predefiniti di SharePoint sono cinque: limited access, read, contribute, design e full control. È tuttavia possibile definire livelli personalizzati aggiuntivi. finire 5 La prima implementazione non comprende l’automazione di quest’ultima funzionalità. ~ 17 ~
  • 18. Questo progetto presenta alcune difficoltà che hanno richiesto un’attenta valutazione al fine di stabilire quanto si potesse automatizzare il flusso di lavoro e dove invece fosse indispensabile l’ intervento umano. Si sarebbe potuto ad esempio unire i due workflow in un unico, scrivendo il codice per un metodo che copiasse automaticamente il file caricato da una cartella all’altra. Tuttavia, per motivi che verranno meglio illustrati in seguito, la procedura di upload sarebbe risultata più complessa, richiedendo il rispetto di una serie di parametri troppo stretti, che avrebbero sicuramente introdotto una grossa percentuale di errori umani. Un altro punto che si sarebbe potuto formalizzare all’ interno del codice è il cambio di status del documento, che è stato demandato all’ intervento manuale del relatore. D’altra parte non solo è difficile automatizzare il processo di approvazione con un’ interfaccia user- friendly per l’utente non potendo sfruttare, come verrà spiegato in seguito, l’ autenticazione per ciascun reviewer, ma, come rilevato da esperienze pregresse, spesso il feedback da parte di questo tipo di utente giunge attraverso canali comunicativi differenti ed obbligare i reviewer ad interagire attivamente con il sito SharePoint potrebbe determinare un rallentamento del flusso di lavoro. Inoltre l’applicazione concreta dei workflow implementati generalmente gestisce una quantità ridotta di elementi, pertanto l’ intervento umano non risulta eccessivamente oneroso. Dopo un’analisi dettagliata dei requisiti sono state progettate una serie di diverse soluzioni, ciò è dovuto al fatto che le ipotesi teoriche di un sistema ideale non sempre hanno trovato riscontro nella realtà. ~ 18 ~
  • 19. 1. Caso ideale: utenti S SharePoint Per iniziare a studiare gli strumenti messi a disposizio ne da Share Po int ho supposto de lle condizio ni ideali che rispecchiassero il mode llo sugge rito dalla piattaforma stessa, ho assunto pe rciò che ciascun atto re co invo lto nei flussi di lavoro dispo nesse di un account personale , gode ndo pertanto de lle re lative proprie tà di autenticazione ed auto rizzazio ne. Ho quindi creato tre utenti, uno per ciascun ruo lo necessario , rispettivamente stude nte , reviewer e supe rviso re studente (re latore) . Ad o gnuno di essi ho fatto corrisponde re un gruppo in Share Po int (stude nts, reviewers e superviso rs) , in mo do da garantire rs), flessibilità qualora si do vessero mo dificare i permessi relativi a tutti gli utenti che rico prono il medesimo ruo lo sfruttan do il concetto di sfruttando ereditarietà. Sono state quindi definite due carte lle sul sito Share Po int: repository (ne (nella quale vengono caricate i docume nti dagli le stude nti) e re view (a disposizio ne de i revie wer e re lato ri) , quest’ ultima lista presenta due co lo nne personalizzate , una re lativa ltima allo status (campo boo le ano che indica se la tesi è stata approvata o meno) e un’ altra contenente l’e lenco degli utenti co involti ne l processo di revisione ( il campo è un tipo di dato pre definit o de dicato alla definito gestio ne degli ute nti, oppo rtunamente configurato in modo da po ter contene re più valo ri conte mpo rane amente) Figura 1: esempio upload di un file e relativa assegnazione ai rispettivi reviewers ~ 19 ~
  • 20. 1.1 Invio semplici notifiche implementate con SharePoint Designer Per il primo esempio di imple mentazione è stato usato so lame nte Share Po int Designer. Un wo rkflo w applicato alla lista re posito ry viene attivato automaticamente o gni qualvolta si cre ii un nuo vo docume nto ne lla stessa e si o ccupa di mandare un messaggio di ringraziamento all’ utente che ha caricato il file ne lla carte lla (si presuppone che l’ ute nte in questio ne co incida con lo stude nte autore della tesi) e d uno al re lato re (che si presupp o ne unico proprie tario de lla carte lla a cui è presuppo associato il flusso di lavoro) contene nte l’url de lla risorsa corrispondente. Figura 2: esempio di implementazione di un workflow con SharePoint Designer Un altro workflow associato alla lista re view, anch’esso attivato auto maticamente ad o gni uplo ad, spedisce analo gamente una mail a ciascun reviewe r specificato ne l campo contenente l’e lenco de gli utenti associati (re vie we rs assigned) , so lle citando li a prende re visione de l assigned), docume nto in questione ( indicato pe r me zzo di link all’ url) e fornire un riscontro a riguardo. I l flusso di lavo ro si co nsidera immediatamente concluso do po que st’operazione . Con questa so luzione non è possibile st’operazione. inviare via mail un rie pilogo de i documenti non anco ra approvati presenti ne lla lista, in quanto Share Point Designe r no n riesce a gestire ~ 20 ~
  • 21. in maniera versatile concetti come i dataset, infatti per gestire l’ invio della mail a più destinatari si è reso necessario ricorrere ad una variabile locale di tipo stringa formata dalla concatenazione dei valori presenti nell’elenco. Tuttavia il relatore potrebbe verificarli autonomamente semplicemente aprendo una pagina del sito costituita da una vista filtrata sull’elenco in questione. ~ 21 ~
  • 22. 1.2 Aggiunta di un rep ggiunta report alle notifiche Per ovviare alla mancanza de l rie pilo go via mail si può aggiungere un terzo wo rkflo w, impleme ntato con Visual Studio, mantenendo inalterati que lli appena descritti in SharePo int Designe r I l flusso di lavoro , a r. differe nza de i precedenti, si attive rà non più ad ogni nuovo e le mento, ma anche ad ogni modifica. In questo modo quando si modificano le proprie tà de l documento contrassegnando lo come approvato , il flusso di lavoro co mpie l' unica az ione specificata, cioè inviare un’e mail al azione un’e- re latore; questa conterrà l’e le nco de gli url corrisponde nti ai documenti ; ancora in attesa di appro vazio ne. Pe r otte nere ciò ho inserito ne l codice una query che valuta la clauso la re lativa al valo re conte nuto ne l campo appro ve d e ho concatenato i risultati in una stringa da usare ne l body de ll’e-mail. mail. Figura 3: esempio di semplice workflow in Visual Studio ~ 22 ~
  • 23. Figura 4: esempio di workflow in esecuzione ~ 23 ~
  • 24. 2. Caso reale: utenti occasionali Una delle principali problematiche sorte in fase progettuale è stata il controllo degli accessi al sito. Infatti non si poteva disporre di account per ogni singolo attore coinvolto, mentre supervisori e studenti sono dotati di username e password individuali, per i reviewer che nella maggior parte dei casi entrano in contatto con il portale solamente una volta ( quando cioè prelevano il documento dal server) , risulta troppo oneroso attivare un account per ciascuno, percui l’ accesso viene garantito condividendo le credenziali tra tutti coloro che ricoprono il ruolo di reviewer. Ciò impedisce di adottare le soluzioni esposte in precedenza in quanto rende impossibile sfruttare le informazioni relative all’ utente, senza contare che al compimento di un’azione da parte del reviewer il sistema non è in grado di distinguere chi realmente impersoni il ruolo, e quindi associarne le autorizzazioni corrispondenti. ~ 24 ~
  • 25. 2.1 Recupero informazioni su db esterno Per mantenere in relazione le informazioni concernenti i reviewer ed i progetti ad essi assegnati, ho impiegato il database solitamente interrogato dal relatore per estrarre manualmente i dati di cui sopra. Il database dispone di informazioni riguardanti il documento contenente l’elaborato ed il suo autore, e gli attori coinvolti nel processo di approvazione: reviewers e supervisor. Ogni volta che uno studente sottopone un elaborato all’ attenzione del proprio relatore, quest’ ultimo deve aggiornare la tabella che associa i reviewer al progetto. Ho scritto una query che a partire da un parametro di input rappresentante il nome del file (che deve coincidere con quello caricato) fornisce il titolo della tesi in questione e gli indirizzi e- mail del supervisor e dei reviewer assegnati. Figura 5: implementazione in Visual Studio di un semplice workflow sequenziale che inolta un e- mail al caricare di un file Il primo workflow, incaricato di gestire l’ upload dei file sul sito SharePoint da parte degli studenti segue la medesima logica di quello visto in precedenza, inviando un messaggio al relatore contenente il link per accedere alla nuova risorsa. ~ 25 ~
  • 26. Il secondo flusso di lavoro prese nta una maggiore complessità Ne i complessità. casi precedenti si era assunto per se mplicità che la figura de l re latore co incidesse co l proprie tario de lla pagina web, co n que sta nuo va versione de l wo rkflo w invece le informazioni re lative al supe rvisor risie dono ne l database , in questo modo è anche possibile che la stessa lista o spiti le te si di più re lato ri contemporaneamente , scinde ndo la sta contemporaneamente, figura de ll’autore de lla lista da que lla de l supe rvisor rvisor. Figura 6: workflow sequenziale in Visual Studio con valutazione di più condizioni Il flusso di lavo ro si attiva ad ogni creazione di un nuo vo e lemento ne lla lista e rimane attivo grazie ad un ciclo while fino a quando il campo status de l docume nto non assume un de terminato valore . Questo contro llo è svo lto ad o gni mo difica de l file o de lle sue delle proprie tà, una serie di if e lse confrontano il valo re de l campo di if-e status. In questa soluzione ho esteso questo campo facendo in mo do che po tesse assumere tre valori di tipo testo(a differe nza de i due boo leani visti in precedenza): pending, appro ve d by re viewe rs e ved approve d by superviso r Se questo campo rimane invariato , non r. compie alcuna azione, se co rrisponde al valo re pending viene spe dita un’e-mail in cui si invita ciascun re v iewer a prendere visione de l file in mail viewer questione ed un’e-mail al responsabile de lla lista inse re ndo ne l corpo mail de l messaggio l’e lenco de i documenti no n anco ra appro vati definitivamente . Qualo ra il campo di status assuma il valore approve d ualo by re viewe rs vengono spe dite e mail ai medesimi so ggetti de l caso e- ~ 26 ~
  • 27. precedente ma con contenuti differenti, ai reviewer arriverà un messaggio in cui li si ringrazia per il lavoro svolto, al responsabile la stessa struttura dell’e-mail già vista, ma con l’elenco opportunamente aggiornato. Infine, se lo status diviene approved by supervisor significa che anche l’ultima valutazione è stata data, pertanto un’e- mail ringrazia per l’operato svolto il supervisor analogamente a quanto accaduto nei casi precedenti per i reviewer ed al responsabile della lista arriverà una notifica in cui si indica che il processo di approvazione del documento è giunto al termine. Quando si verifica quest’ ultima ipotesi l’esecuzione del flusso esce dal ciclo principale ed il workflow si considera concluso. ~ 27 ~
  • 28. Figura 7: tabella di esempio utilizzata per archiviare le informazioni relative ai reviewer ~ 28 ~
  • 29. Difficoltà incontrate L’attività che ha richiesto più tempo è stata la configurazione dell’ ambiente di sviluppo. L’ installazione di SharePoint e la successiva configurazione richiedono un notevole impegno, inoltre non sempre le risorse hardware minime di un home pc attualmente riescono a soddisfare i requisiti minimi del sistema. L’ installazione della piattaforma sul sistema operativo Windows 7 non è ben documentata in rete e risulta piuttosto macchinosa. Il deploy dei workflow è abbastanza semplice finché si utilizzano le pagine prescelte per il debug, ma qualora si voglia distribuire una soluzione su diversi siti è necessario compiere una serie di operazioni manuali per niente semplici. ~ 29 ~
  • 30. Possibili sviluppi Combinando assieme gli strumenti messi a disposizione da SharePoint è possibile comporre dei workflow rispondenti ad ogni esigenza, la maggior parte delle funzionalità più comuni è alla portata anche di sviluppatori non esperti. La gestione automatizzata dei documenti digitali potrebbe evitare il ricorso a supporti cartacei, velocizzando gli itineris, abbattendo i costi ed i problemi legati alle distanze. Infatti spesso gli uffici risultano intasati da fascicoli e tenerli in ordine è conseguentemente laborioso, inoltre il rischio che qualcuna di queste pratiche venga smarrita è tanto più alto quanto più difficile è interrogarne l’ archivio. Ad esempio si potrebbe progettare un servizio web sul portale dell’ università che, tenendo conto delle credenziali dell’ utente, permetta agli studenti di inviare tramite internet le proprie tesi di laurea, senza essere obbligati a presentarsi fisicamente allo sportello muniti di copia cartacea dell’elaborato. ~ 30 ~
  • 31. Ringraziamenti Vorrei ringraziare tutti coloro che in questi anni hanno creduto in me sostenendomi ed incoraggiandomi, soprattutto durante i numerosi momenti di sconforto. Ma ancor di più ci tengo a ringraziare coloro che al contrario mi hanno ripetuto che non ce l’avrei mai fatta, stimolando la mia testardaggine a cercare di contraddirli. Infatti è anzitutto grazie a questi ultimi che ho imparato a non accontentarmi di obiettivi facili e a puntare sempre più in alto. Il primo pensiero va alla mia famiglia, ovvero mia madre e mia nonna, ma naturalmente anche a coloro che purtroppo non potranno esserci di persona, in primis a mio padre, per aver avuto fiducia in me . Un enorme grazie va ai miei amici, che con il loro affetto mi hanno fatto sentire meno sola, sopportando il mio caratteraccio. M i astengo dal fare nomi perché l’elenco sarebbe troppo lungo e avrei paura di dimenticarne qualcuno, tra quelli che conosco da oltre 20 anni, quelli che sono entrati nella mia vita solo da pochi mesi e quelli che per un motivo o per l’altro ho perso di vista. Un ringraziamento al mio relatore, il prof. Maurizio Fermeglia, che con il proprio pragmatismo mi ha aiutato a concludere questo lungo percorso di studi. Ringrazio inoltre tutto l’Ateneo per avermi offerto l’opportunità di affrontare la laurea come fosse una sfida personale. ~ 31 ~
  • 32. Fonti bibliografiche Testi • “Beginning SharePoint 2010 – Building Business Solutions with SharePoint” A. Perran, S. Perran, J. Mason, L. Rogers • “SharePoint 2010 Development with Visual Studio 2010” E. Carter, B. Scholl, P. Jausovec (Addison-Wesley) • “SharePoint 2010 Workflows In Action” P. Wicklund (Manning) Riferimenti web • http://office.microsoft.com/ it- it/sharepoint-help/ • http://www.wfmc.org/ ~ 32 ~
  • 33. Appendice Workflow 1.2 using S y st e m ; using S y st e m . Co m po n e n tM o d e l; using S y st e m . Co m po n e n tM o d e l. D e s i gn ; using S y st e m . Co l l e c t io n s ; using S y st e m . D r a w in g; using S y st e m . L i n q; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ; using S y st e m . Wo r k f l o w . R u n t i m e ; using S y st e m . Wo r k f l o w . A ct iv i t i e s; using S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ; using M i cr o s o f t. S h ar e P o in t; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s; n a m e sp a ce A ppr o v i n g. W o r k f l o w 1 { p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y { pu b l i c Wo r k f l o w 1( ) { I n i t i a l iz e Co m po n e n t ( ) ; } pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ; pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ; pu b l i c S tr i n g s e n dE m a i l R e po r t _B o d y = d e f au l t( S y s te m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e po r t _S u b j e c t = de f a u lt ( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e po r t _T o = de f au l t( S y s te m . S tr in g) ; pr iv a te v o i d o n Wo r k f l o w A c t iv at e d 1 _ I n v o k e d( o b je c t s e n d e r , E x t e r n a lD a t aE v e n tA r gs e ) { str i n g d o c L i st = g e t D a t a( ) ; se n d E m a i lR e p o r t _T o = w o r k f lo w P r o p e r t i e s. L i st. A u th o r . E m a i l; se n d E m a i lR e p o r t _S u b j e c t = "A f i l e w as c h a n ge d in " + w o r k f lo w P r o pe r t i e s. L i st. T i t l e ; se n d E m a i lR e p o r t _B o dy = "T h e f o l l o w in g do cu m e n ts a r e s t i l l w a i t in g f o r a pr o v a l: " + d o c L is t; } pu b l i c str i n g g e tD a t a( ) { str i n g a = s tr in g. E m p ty ; str i n g s tr U r l = w o r k f l o w P r o p e r t i e s. S i te U r l + "/ "; u s i n g ( S P S it e s i te = n e w S P S i te( str U r l) ) { u s in g ( S P We b w e b = s i te . O pe n W e b( ) ) { st r in g l i st n am e = w o r k f lo w P r o p e r t i e s. L i st. T it l e ; S P L i st l i st = w e b. L is ts [ l is t n a m e ] ; S P Qu e r y m y q u e r y = n e w S P Q u e r y ( ) ; ~ 33 ~
  • 34. m y qu e r y . Qu e r y = " "; S P L i st I te m Co l l e c t io n it e m s = l is t. Ge tI te m s( m y q u e r y ) ; f o r e a c h ( S P L is tI t e m i te m in i te m s) { if ( i te m ! = n u l l ) { str i n g x = i te m . G e t F o r m a tt e dV a lu e ( " ap pr o v e d ") ; if ( it e m . Ge t Fo r m at te dV a lu e ( " a ppr o v e d ") = = "Y e s ") { } e ls e { a = a + "< br > " + w o r k f l o w P r o p e r t i e s . S it e U r l + " / " + i te m . U r l ; } } } } } return a; } } } ~ 34 ~
  • 35. Workflow 2.1 using S y st e m ; using S y st e m . Co m po n e n tM o d e l; using S y st e m . Co m po n e n tM o d e l. D e s i gn ; using S y st e m . Co l l e c t io n s ; using S y st e m . D r a w in g; using S y st e m . L i n q; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ; using S y st e m . Wo r k f l o w . R u n t i m e ; using S y st e m . Wo r k f l o w . A ct iv i t i e s; using S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ; using M i cr o s o f t. S h ar e P o in t; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s; n a m e sp a ce D o cU p lo a d. W o r k f l o w 1 { p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y { pu b l i c Wo r k f l o w 1( ) { I n i t i a l iz e Co m po n e n t ( ) ; } pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ; pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ; pu b l i c S tr i n g s e n dE m a i l 1 _B o d y 1 = de f a u lt ( S y st e m . S tr i n g) ; pu b l i c S tr i n g s e n dE m a i l 1 _S u b je ct 1 = de f au l t( S y s te m . S tr in g) ; pu b l i c S tr i n g s e n dE m a i l 1 _T o 1 = de f au l t( S y s te m . S tr i n g) ; pr iv a te v o i d o n Wo r k f l o w A c t iv at e d 1 _ I n v o k e d( o b je c t s e n d e r , E x t e r n a lD a t aE v e n tA r gs e ) { se n d E m a i l 1 _T o 1 = w o r k f l o w P r o p e r t i e s. L is t. A u th o r . E m a i l; se n d E m a i l 1 _S u b je ct 1 = " D o cu m e n t u p lo a de d: " + w o r k f lo w P r o pe r t i e s. I te m . D is p l ay N am e ; se n d E m a i l 1 _B o d y 1 = "T h i s d o c u m e n t i s av a i ab l e : " + w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l ; } } } using S y st e m ; using S y st e m . Co m po n e n tM o d e l; using S y st e m . Co m po n e n tM o d e l. D e s i gn ; using S y st e m . Co l l e c t io n s ; using S y st e m . D r a w in g; ~ 35 ~
  • 36. using S y st e m . L i n q; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. Co m p i l e r ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. S e r i a l iz at i o n ; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l; using S y st e m . Wo r k f l o w . C o m po n e n tM o d e l. D e s i g n ; using S y st e m . Wo r k f l o w . R u n t i m e ; using S y st e m . Wo r k f l o w . A ct iv i t i e s; using S y st e m . Wo r k f l o w . A ct iv i t i e s. R u l e s ; using M i cr o s o f t. S h ar e P o in t; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w ; using M i cr o s o f t. S h ar e P o in t. Wo r k f lo w A c t io n s; using S y st e m . D a t a. O l e D b; using S y st e m . D a t a; using S y st e m . Co l l e c t io n s . G e n e r i c; n a m e sp a ce R e v ie w i n g. W o r k f l o w 1 { p u b l i c se a l e d p ar t i a l c l as s Wo r k f lo w 1 : S e qu e n t i a lW o r k f l o w A c t iv it y { pu b l i c Wo r k f l o w 1( ) { I n i t i a l iz e Co m po n e n t ( ) ; } pu b l i c Gu i d w o r k f lo w I d = d e f au l t( S y st e m . Gu i d) ; pu b l i c S P W o r k f lo w A ct iv a t io n P r o pe r t i e s w o r k f l o w P r o p e r t i e s = n e w S P W o r k f lo w A ct iv a t io n P r o pe r t ie s( ) ; pu b l i c bo o l r e s = tr u e; pu b l i c S t ac k < s tr in g> ds = n e w S t ac k < st r in g> ( ) ; pu b l i c str i n g to = s tr in g. E m p ty ; pu b l i c str i n g f i l e n am e = str i n g. E m p t y ; pu b l i c str i n g t h e s i s = str i n g. E m p ty ; pu b l i c str i n g d o cL i s t = str i n g . E m pt y ; pu b l i c str i n g s u p e r v i so r = s tr in g. E m p ty ; pu b l i c str i n g o w n e r = s tr in g. E m pty ; pr iv a te v o i d W h i l e Co n d i t io n ( o b je ct se n d e r , Co n d i t io n a lE v e n tA r gs e ) { e . R e s u lt = r e s; f i l e n am e = w o r k f lo w P r o pe r t i e s. I te m . F i l e. N am e ; o w n e r = w o r k f lo w P r o p e r t i e s. L i st. A u t h o r .E m a i l ; O le D b Co n n e ct i o n o c = n e w O le D b Co n n e c t io n ( @ " P r o v id e r = M i cr o so f t. A CE . OL E D B. 1 2. 0; D a t a S o u r ce = F : R e v i e w e r s N a n o te ch . a cc d b; P e r s i st S e cu r i ty I n f o = F a l se ; ") ; str i n g q u e r y = " R e v i e w e r Q u e r y "; o c. Op e n ( ) ; O le D b Co m m an d co m = n e w O le D bC o m m a n d ( q u e r y , o c ) ; co m . Co m m a n dT y p e = Co m m an dT y pe. S t o r e dP r o c e d u r e ; co m . P a r a m e te r s. A d d( "@ f i l e n a m e ", O le D bT y p e . V ar Ch a r ) . V a lu e = f i l e n am e ; O le D b D a t aR e a d e r d r = co m . E x e c u te R e a de r ( ) ; w h i le ( dr . R e a d( ) ) ~ 36 ~
  • 37. { d s. P u s h ( dr . Ge tS tr in g( 0) ) ; s u p e r v i s o r = dr . Ge tS tr in g( 1) ; t h e s is = dr . Ge tS tr in g( 2) ; } i n t m a x = d s. C o u n t; f o r ( i n t co n t a = 0; co n t a < m ax ; co n t a+ + ) { t o = ds. P o p( ) + "; " + to ; } dr . C lo se ( ) ; } pu b l i c H as h t a b l e o n W o r k f lo w I te m C h an ge d 1_ A f te r P r o p e r t i e s 1 = n e w S y s te m . C o l le ct i o n s. H as h t a b l e ( ) ; pu b l i c H as h t a b l e o n W o r k f lo w I te m C h an ge d 1_ B e f o r e P r o p e r t ie s1 = n e w S y s te m . C o l le ct i o n s. H as h t a b l e ( ) ; pu b l i c S tr i n g s e n dE m a i lP e n d i n g _T o = de f au l t( S y s te m . S tr in g) ; pu b l i c S tr i n g s e n dE m a i lP e n d i n g _S u bj e c t = de f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i lP e n d i n g _B o dy = de f au l t( S y s te m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i lP e n d i n g _C C = d e f au l t( S y s te m . S t r i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e v i e w e d _ B o dy = d e f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l R e v i e w e d _ C C = de f a u lt ( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e v i e w e d _S u b je ct = d e f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l R e v i e w e d _T o = de f au l t( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e d _B o dy = d e f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e d _C C = de f a u lt ( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e d _S u b je ct = d e f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e d _T o = de f au l t( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e w R e l _ Bo d y = d e f au l t( S y s te m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e w R e l _S u b je ct = d e f au l t( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l R e w R e l _T o = de f au l t( S y s te m . S tr in g) ; pu b l i c S tr i n g s e n dE m a i l R e l _ Bo dy = de f a u lt ( S y st e m . S tr i n g) ; pu b l i c S tr i n g s e n dE m a i l R e l _S u bj e c t = d e f au l t( S y s te m . S t r i n g ) ; pu b l i c S tr i n g s e n dE m a i l R e l _T o = de f au l t( S y st e m . S tr i n g ) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _B o d y = de f a u lt ( S y s te m . S t r in g) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _S u b je ct = de f a u lt( S y s te m . S tr in g) ; pu b l i c S tr i n g s e n dE m a i l A p pr o v e dR e l _T o = d e f au l t( S y s te m . S t r in g) ; pr iv a te v o i d N o tC h a n ge d( o b je ct s e n de r , C o n d it i o n a lE v e n tA r gs e ) { str i n g a S t a t u s = o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ; if ( o n W o r k f l o w I te m C h a n ge d1 _ Be f o r e P r o p e r t ie s1 [" S t a t u s "] = = n u l l ) { e . R e su l t = f a l se ; r e tu r n ; } str i n g b S t a t u s = o n W o r k f l o w I t e m Ch an ge d1 _ Be f o r e P r o pe r t i e s 1[ "S t at u s "] . T o S tr i n g( ) ; ~ 37 ~
  • 38. if ( b S t a tu s = = a S t a tu s) { e . R e su l t = tr u e; } e ls e { e . R e su l t = f a l se ; } } pr iv a te v o i d P e n d i n g ( o bj e c t se n d e r , Co n d i t io n a lE v e n tA r g s e ) { str i n g a S t a t u s = o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ; do cL i st = g e tD a t a( ) ; se n d E m a i lP e n d in g_ T o = to ; se n d E m a i lR e l_T o = o w n e r ; se n d E m a i lP e n d in g_ S u b je ct = " D o cu m e n t w a i t in g f o r y o u r a p pr o v a l: " + th e s i s; se n d E m a i lR e l_ S u bj e c t = "D o c u m e n t u p lo a de d: " + th e s i s; se n d E m a i lP e n d in g_ Bo dy = " T h e f o l lo w i n g d o c u m e n t i s av a i ab l e h e r e : " + w o r k f l o w P r o p e r t i e s . S it e U r l + " / " + w o r k f l o w P r o pe r t i e s. I te m U r l + " < br > P l e as e g i v e u s a f e e d b ack a s so o n a s po ss i b l e . < br > B e st R e g ar ds "; se n d E m a i lR e l_ Bo dy = " D o cu m e n t av a i ab l e : " + w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br > T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t; if ( aS ta tu s = = " pe n d i n g") { e . R e su l t = tr u e; } e ls e { e . R e su l t = f a l se ; } } pr iv a te v o i d R e v i e w e d( o b je c t s e n de r , Co n d i t io n a lE v e n tA r gs e ) { / / a p pr o v e d by r e v ie w e r s str i n g a S t a t u s = o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ; do cL i st = g e tD a t a( ) ; se n d E m a i lR e v ie w e d_T o = to ; se n d E m a i lR e w R e l_T o = o w n e r ; se n d E m a i lR e v ie w e d_ S u bj e c t = " T h a n k s f o r r e v i e w i n g "; se n d E m a i lR e w R e l_ S u bj e c t = "D o cu m e n t r e v ie w e d: " + th e s i s; se n d E m a i lR e v ie w e d_ Bo dy = "T h an k y o u f o r r e v ie w i n g " + t h e s i s + "< b r > B e st R e g ar d s " ; ~ 38 ~
  • 39. se n d E m a i lR e w R e l_ Bo dy = " D o cu m e n t av a i a b le : " + w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br > T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t; if ( aS ta tu s = = " a ppr o v e d by r e v i e w e r s ") { e . R e su l t = tr u e; } e ls e { e . R e su l t = f a l se ; } } pr iv a te v o i d A p pr o v e d( o bj e ct se n d e r , Co n d i t io n a lE v e n tA r gs e ) { / / a p pr o v e d by su pe r v is o r str i n g a S t a t u s = o n W o r k f l o w I t e m Ch an ge d1 _ A f t e r P r o p e r t i e s 1[ "S ta tu s "] . T o S tr in g ( ) ; do cL i st = g e tD a t a( ) ; se n d E m a i lA ppr o v e d _T o = o w n e r ; se n d E m a i lA ppr o v e d R e l _T o = s u p e r v is o r ; se n d E m a i lA ppr o v e d _S u b je c t = " D o c u m e n t ap pr o v e d by su pe r v is o r : " + th e s i s; se n d E m a i lA ppr o v e d R e l _S u b je c t = "A p pr o v i n g c o m p le te d: " + th e s i s; se n d E m a i lA ppr o v e d _B o dy = "D o cu m e n t av a i a b le : " + w o r k f lo w P r o pe r t i e s. S i te U r l + "/ " + w o r k f l o w P r o pe r t ie s. I t e m U r l + " < br > < br > T h e se do cu m e n t s ar e st i l l w a it i n g f o r a pr o v a l: " + d o c L is t; se n d E m a i lA ppr o v e d R e l _B o d y = " T h a n k y o u f o r a pp r o v in g " + th e s is + "< b r > B e st R e g ar d s " ; if ( aS ta tu s = = " a ppr o v e d by su p e r v is o r ") { e . R e su l t = tr u e; } e ls e { e . R e su l t = f a l se ; } r e s = f a ls e; } pu b l i c str i n g g e tD a t a( ) { str i n g a = s tr in g. E m p ty ; str i n g s tr U r l = w o r k f l o w P r o p e r t i e s. S i te U r l + "/ "; u s i n g ( S P S it e s i te = n e w S P S i te( str U r l) ) { u s in g ( S P We b w e b = s i te . O pe n W e b( ) ) { ~ 39 ~
  • 40. st r in g l i st n am e = w o r k f lo w P r o p e r t i e s. L i st. T it l e ; S P L i st l i st = w e b. L is ts [ l is t n a m e ] ; S P Qu e r y m y q u e r y = n e w S P Q u e r y ( ) ; m y qu e r y . Qu e r y = " "; S P L i st I te m Co l l e c t io n it e m s = l is t. Ge tI te m s( m y q u e r y ) ; f o r e a c h ( S P L is tI t e m i te m in i te m s) { if ( i te m ! = n u l l ) { if ( it e m . Ge t Fo r m at te dV a lu e ( "S t at u s ") = = " ap pr o v e d by su pe r v i s o r " ) { } e ls e { a = a + "< br > " + w o r k f l o w P r o p e r t i e s . S it e U r l + " / " + i te m . U r l + " ( " + it e m . G e t Fo r m at te dV a l u e (" S t a tu s ") + ") "; } } } } } return a; } } } ~ 40 ~
  • 41. Query Database PARAMETERS filename Text ( 255 ); SELECT Reviewers.[E-mail Address], Reviewers.emailSupervisor, Reviewers.ThesisT itle FROM Reviewers WHERE (((Reviewers.filename)=[ filename])); ~ 41 ~