studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

41
~ 1 ~ UNIVERSITÀ DEGLI STUDI DI TRIESTE F ACOLTÀ DI I NGEGNERIA C ORSO DI LAUREA SPECIALISTICA IN I NGEGNERIA I NFORMATICA 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

Upload: snoopalexia

Post on 14-Jun-2015

335 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 1 ~

UNIVERSITÀ DEGLI STUDI DI TRIESTE

FACOLTÀ DI INGEGNERIA

CORSO DI LAUREA SPECIALISTICA IN INGEGNERIA INFORMATICA

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

Page 2: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 2 ~

Page 3: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 3 ~

a me

Page 4: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 4 ~

Sommario

Introduzione ........................................................................................................................................ 5

Caso in esame ................................................................................................................................... 6

Approccio tradizionale ............................................................................................................. 7

Approccio server .......................................................................................................................... 8

Approccio SharePoint ............................................................................................................... 9

Strumenti util izzati ...................................................................................................................... 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 Invio 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

Page 5: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 6: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

studente relatore

reviewer

reviewer

reviewer

Page 7: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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. Infatti è 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

Page 8: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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

Page 9: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 10: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 10 ~

Strumenti utilizzati

SharePoint

SharePoint è un prodotto Microsoft pensato per la creazione di siti web in maniera collaborativa, integrando servizi intranet ed extranet in un unico portale. Tra 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 stessi1.

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 accettabil i, 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 util izzare 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 Microsoft SharePoint

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

Page 11: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 11 ~

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

SharePoint Designer 20102

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

Page 12: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 12 ~

Visual Studio 2010 Ultimate

Visual Studio è un ambiente di sviluppo ideato per lavorare con il framework .NET. Tra i linguaggi di programmazione supportati vi è C#, che ho utilizzato durante l’ implementazione del progetto per scrivere un algoritmo in grado di descrivere il f lusso di lavoro preso in esame. Inoltre Visual Studio 2010 mette a disposizione una serie di util i 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.

Page 13: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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. Il 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 Microsoft 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 Microsoft, SQL Server.

Page 14: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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 util i 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

Page 15: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 16: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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 sequenziali3, fornendo un ventaglio di operazioni standard componibil i tra loro, ovvero condizioni e azioni raggruppabili in step. SharePoint Designer dispone di tre categorie di workflow: site, list o reusable. Il 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 f lusso di lavoro verrà applicato. Tuttavia, 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.

Page 17: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

Workflow: caso specifico

Il f lusso di lavoro che ho svilupapprovazione di un elaborato da parte di alcuni reviewer. L’ idea è stata quella di dividere in due macroparte lo studente che ha redatto il documento accede al sito SharePoint e lo carica in (con permesso di collaborazionequesto punto il primo workflow inizia automaticamente esegnalata la presenza del nuovo documento sul server inviandomessaggio che confermi l’esito positivo dell’operazione allo studente ed una notifica via e-mail al relatore, quest’ultimo procede manualmente a verificarne il contenuto (ed eventualmente correggere il nome del file) ed assegnatodi esaminare l’elaborato. Una volta ricaricato il file in un’altra cartella sul sito (in questo caso gli utenti saranno appunto i reviewer ed il relatoreche prevede uno step iniziale in cui un’einformazioni necessarie avvisa i reviewer assegnati al progetto dell’esistenza del nuovo documento sul sito, invitandoli a prendere visione dello stesso e contattare quanto prima il relatore. quest’ultimo avrà ricevuto l’approvazione da parte di tutti gli attori coinvolti, provvederà a modificare le proprietà del file sul sito, assegnando allo stesso uno status che indichi l’esito positivo del processo. La variazione di questo valore innesca un eventprevede l’ invio di un messaggio ai reviewer di cui sopra contenente un ringraziamento per la collaborazione prestata ed al relatore contenente il riepilogo delle tesi presenti nella relativa cartella ed ancora in attesa di approvazione finalepuò concludersi5.

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

upload studente

notifica relatore, ringraziamento

studente

upload relatore

notifica reviewers

~ 17 ~

aso specifico

Il f lusso di lavoro che ho sviluppato consiste nel processo di approvazione di un elaborato da parte di alcuni reviewer. L’ idea è stata quella di dividere in due macro-fasi il procedimento. Nella prima parte lo studente che ha redatto il documento accede al sito SharePoint e lo carica in una cartella prestabilita a cui hanno accesso con permesso di collaborazione4) solo gli studenti e relativi relatori

il primo workflow inizia automaticamente esegnalata la presenza del nuovo documento sul server inviandomessaggio che confermi l’esito positivo dell’operazione allo studente

mail al relatore, quest’ultimo procede manualmente a verificarne il contenuto (ed eventualmente correggere

ed assegnato al nuovo elemento i reviewer incaricati di esaminare l’elaborato. Una volta ricaricato il file in un’altra cartella sul sito (in questo caso gli utenti che avranno accesso alla risorsa saranno appunto i reviewer ed il relatore) ha origine il secondo flusso

niziale in cui un’e-mail di notifica contenente le informazioni necessarie avvisa i reviewer assegnati al progetto dell’esistenza del nuovo documento sul sito, invitandoli a prendere visione dello stesso e contattare quanto prima il relatore.

ultimo avrà ricevuto l’approvazione da parte di tutti gli attori coinvolti, provvederà a modificare le proprietà del file sul sito, assegnando allo stesso uno status che indichi l’esito positivo del processo. La variazione di questo valore innesca un eventprevede l’ invio di un messaggio ai reviewer di cui sopra contenente un ringraziamento per la collaborazione prestata ed al relatore contenente il riepilogo delle tesi presenti nella relativa cartella ed ancora in attesa di approvazione finale, senza la quale il workflow non

I tipi di permesso predefiniti di SharePoint sono cinque: limited access, read, contribute, design e full control. È finire livelli personalizzati aggiuntivi.

La prima implementazione non comprende l’automazione di quest’ultima funzionalità.

notifica relatore, ringraziamento

studente

notifica reviewers

feedback reviewers cambio status

ringraziamento

(report relatore)

pato consiste nel processo di approvazione di un elaborato da parte di alcuni reviewer. L’ idea è

fasi il procedimento. Nella prima parte lo studente che ha redatto il documento accede al sito

una cartella prestabilita a cui hanno accesso gli studenti e relativi relatori, a

il primo workflow inizia automaticamente e viene segnalata la presenza del nuovo documento sul server inviando un messaggio che confermi l’esito positivo dell’operazione allo studente

mail al relatore, quest’ultimo procede manualmente a verificarne il contenuto (ed eventualmente correggere

iewer incaricati di esaminare l’elaborato. Una volta ricaricato il file in un’altra cartella

che avranno accesso alla risorsa ha origine il secondo flusso

mail di notifica contenente le informazioni necessarie avvisa i reviewer assegnati al progetto dell’esistenza del nuovo documento sul sito, invitandoli a prendere visione dello stesso e contattare quanto prima il relatore. Quando

ultimo avrà ricevuto l’approvazione da parte di tutti gli attori coinvolti, provvederà a modificare le proprietà del file sul sito, assegnando allo stesso uno status che indichi l’esito positivo del processo. La variazione di questo valore innesca un evento che prevede l’ invio di un messaggio ai reviewer di cui sopra contenente un ringraziamento per la collaborazione prestata ed al relatore contenente il riepilogo delle tesi presenti nella relativa cartella ed

la quale il workflow non

I tipi di permesso predefiniti di SharePoint sono cinque: limited access, read, contribute, design e full control. È

ringraziamento reviewers,

(report relatore)

Page 18: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 18 ~

Questo progetto presenta alcune difficoltà che hanno richiesto un’attenta valutazione al fine di stabilire quanto si potesse automatizzare il f lusso 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 f ile 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à.

Page 19: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

1. Caso ideale: utenti S

Per iniziare a studiare gli strumenti messi a disposizione da SharePoint ho supposto delle condizioni ideali che rispecchiassero il modello suggerito dalla piattaforma stessa, ho assunto attore coinvolto nei flussi di lavoro disponesse di un account personale, godendo pertanto delle relative proprietà di autenticazione ed autorizzazione. Ho quindi creato tre utenti, uno per ciascun ruolo necessario, rispettivamente stude(relatore). Ad ognuno di essi hoSharePoint (students, reviewers e supervisors)flessibil ità qualora si dovessero modificare i permessi relativi a tutti gli utenti che ricoprono il medesimo ruolo sfruttanereditarietà. Sono state quindi definite due cartelle sul sito SharePoint: repository (nestudenti) e review (a disposizione dei reviewer e relatori)quest’ultima lista presenta due colonne personalizzate, una relativa allo status (campo booleano che indica se la tesi è stata approvata o meno) e un’altra contenente l’elenco degli utenti di revisione (il campo è un tipo di dato predefinitgestione degli utenti, opportunamente configurato in modo da poter contenere più valori contemporaneamente)

F ig ura 1 : e sem pi o u pl oa d di u n f i le e r e l at i va asseg naz i one a i r isp ett i v i re v ie wers

~ 19 ~

1. Caso ideale: utenti SharePoint

Per iniziare a studiare gli strumenti messi a disposizione da SharePoint ho supposto delle condizioni ideali che rispecchiassero il modello suggerito dalla piattaforma stessa, ho assunto perciò che ciascun attore coinvolto nei flussi di lavoro disponesse di un account personale, godendo pertanto delle relative proprietà di autenticazione ed autorizzazione. Ho quindi creato tre utenti, uno per ciascun ruolo necessario, rispettivamente studente, reviewer e supervisore (relatore). Ad ognuno di essi ho fatto corrispondere un gruppo in SharePoint (students, reviewers e supervisors), in modo da garantire

si dovessero modificare i permessi relativi a tutti ricoprono il medesimo ruolo sfruttando il concetto di Sono state quindi definite due cartelle sul sito

SharePoint: repository (nella quale vengono caricate i documentistudenti) e review (a disposizione dei reviewer e relatori)

ltima lista presenta due colonne personalizzate, una relativa allo status (campo booleano che indica se la tesi è stata approvata o meno) e un’altra contenente l’elenco degli utenti coinvolti nel processo di revisione (il campo è un tipo di dato predefinito dedicato alla gestione degli utenti, opportunamente configurato in modo da poter contenere più valori contemporaneamente)

: e sem pi o u pl oa d di u n f i le e r e l at i va asseg naz i one a i r isp ett i v i re v ie wers

Per iniziare a studiare gli strumenti messi a disposizione da SharePoint ho supposto delle condizioni ideali che rispecchiassero il modello

perciò che ciascun attore coinvolto nei flussi di lavoro disponesse di un account personale, godendo pertanto delle relative proprietà di autenticazione ed autorizzazione. Ho quindi creato tre utenti, uno per ciascun ruolo

nte, reviewer e supervisore gruppo in

, in modo da garantire si dovessero modificare i permessi relativi a tutti

do il concetto di Sono state quindi definite due cartelle sul sito

le vengono caricate i documenti dagli studenti) e review (a disposizione dei reviewer e relatori),

lt ima lista presenta due colonne personalizzate, una relativa allo status (campo booleano che indica se la tesi è stata approvata o

coinvolti nel processo o dedicato alla

gestione degli utenti, opportunamente configurato in modo da poter

: e sem pi o u pl oa d di u n f i le e r e l at i va asseg naz i one a i r isp ett i v i re v ie wers

Page 20: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

1.1 Invio semplici notificheSharePoint Designer

Per il primo esempio di implementazione è stato usato solamente SharePoint Designer. Un workflow applicato alla lista repository attivato automaticamentenella stessa e si occupa di mandareall’utente che ha caricato il f ile nella cartella (si presuppone che l’utente in questione coincida con lo studente autore della tesi) ed uno al relatore (che si presuppassociato il f lusso di lavoro) contenente l’url della risorsa corrispondente.

F ig ura 2 : e sem pi o d i im pl ement az io ne d i un wor kf l ow c on S hareP o in t Des ig n er

Un altro workflow associato alla lista review, anch’esso attivato automaticamente ad ogni upload,ciascun reviewer specificato nel campo contenente l’elenco degli utenti associati (reviewers assigned)documento in questione (indicato per mezzo di link all’url) riscontro a riguardo. Il f lusso di lavoro si considera concluso dopo quest’operazioneinviare via mail un riepilogo dei documenti presenti nella lista, in quanto SharePoint Designer non riesce a gestire

~ 20 ~

semplici notifiche implementate con SharePoint Designer

Per il primo esempio di implementazione è stato usato solamente Un workflow applicato alla lista repository

automaticamente ogni qualvolta si creii un nuovo documento si occupa di mandare un messaggio di ringraziamento

all’utente che ha caricato il f ile nella cartella (si presuppone che l’utente in questione coincida con lo studente autore della tesi) ed uno al relatore (che si presuppone unico proprietario della cartella a cui è associato il f lusso di lavoro) contenente l’url della risorsa

: e sem pi o d i im pl ement az io ne d i un wor kf l ow c on S hareP o in t Des ig n er

associato alla lista review, anch’esso attivato automaticamente ad ogni upload, spedisce analogamente una mail a ciascun reviewer specificato nel campo contenente l’elenco degli utenti

(reviewers assigned), sollecitandoli a prendere visione del in questione (indicato per mezzo di link all’url)

riscontro a riguardo. Il f lusso di lavoro si considera immediatamente dopo quest’operazione. Con questa soluzione non è possibile

inviare via mail un riepilogo dei documenti non ancora approvati presenti nella lista, in quanto SharePoint Designer non riesce a gestire

implementate con

Per il primo esempio di implementazione è stato usato solamente Un workflow applicato alla lista repository viene

un nuovo documento un messaggio di ringraziamento

all’utente che ha caricato il f ile nella cartella (si presuppone che l’utente in questione coincida con lo studente autore della tesi) ed uno

one unico proprietario della cartella a cui è associato il f lusso di lavoro) contenente l’url della risorsa

: e sem pi o d i im pl ement az io ne d i un wor kf l ow c on S hareP o in t Des ig n er

associato alla lista review, anch’esso attivato spedisce analogamente una mail a

ciascun reviewer specificato nel campo contenente l’elenco degli utenti , sollecitandoli a prendere visione del

in questione (indicato per mezzo di link all’url) e fornire un immediatamente

. Con questa soluzione non è possibile non ancora approvati

presenti nella lista, in quanto SharePoint Designer non riesce a gestire

Page 21: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 22: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

1.2 Aggiunta di un rep

Per ovviare alla mancanza del riepilogo via mail si può aggiungere un terzo workflow, implementato con Visual Studio,quelli appena descritti in SharePoint Designerdifferenza dei precedenti, si attiverà non più ad ogni nuovo elemento, ma anche ad ogni modifica. In questo modo quando si modificano le proprietà del documento contrassegnandolo come approvato, il f lusso di lavoro compie l'unica azrelatore; questa conterrà l’elenco degli url ancora in attesa di approvazione.codice una query che valuta la clausola relativa al valore contenuto nel campo approved e ho concatenato i risultati in una stringa da usare nel body dell’e-mail.

F ig ura 3 : e sem pi o d i se mp l ice wor kf lo w in V is ua l St ud i o

~ 22 ~

ggiunta di un report alle notifiche

Per ovviare alla mancanza del riepilogo via mail si può aggiungere un implementato con Visual Studio, mantenendo inalterati

in SharePoint Designer. Il f lusso di lavoro, a differenza dei precedenti, si attiverà non più ad ogni nuovo elemento, ma anche ad ogni modifica. In questo modo quando si modificano le proprietà del documento contrassegnandolo come approvato, il f lusso di lavoro compie l'unica azione specificata, cioè inviare un’e

; questa conterrà l’elenco degli url corrispondentiancora in attesa di approvazione. Per ottenere ciò ho inserito nel codice una query che valuta la clausola relativa al valore contenuto

campo approved e ho concatenato i risultati in una stringa da mail.

: e sem pi o d i se mp l ice wor kf lo w in V is ua l St ud i o

Per ovviare alla mancanza del riepilogo via mail si può aggiungere un mantenendo inalterati

I l f lusso di lavoro, a differenza dei precedenti, si attiverà non più ad ogni nuovo elemento, ma anche ad ogni modifica. In questo modo quando si modificano le proprietà del documento contrassegnandolo come approvato, il f lusso

ione specificata, cioè inviare un’e-mail al corrispondenti ai documenti

Per ottenere ciò ho inserito nel codice una query che valuta la clausola relativa al valore contenuto

campo approved e ho concatenato i risultati in una stringa da

Page 23: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

F ig ura 4 : e sem pi o d i w ork f lo w in ese cu z i o ne

~ 23 ~

: e sem pi o d i w ork f lo w in ese cu z i o ne

Page 24: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 25: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

F igura 5 : im p leme nt az i o n e i n Vi su al S tu d io d i un se mp l i ce wor kf low se que nz i a le c he i no lt a un e -mai l a l car ic are d i u n f i le

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.

Page 26: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

Il secondo flusso di lavorocasi precedenti si era assunto per semplicità che la figura del relatore coincidesse col proprietario della pagina web, con questa nuova versione del workflow invece le informazioni relative al supervisor risiedono nel database, in questo modo è anche possibile che la stessa lista ospiti le tesi di più relatori contemporaneamentefigura dell’autore della lista da quella del supervisor

F ig ura 6 : wor kf l ow seq ue nz i a le in V is ua l St u di o c o n va lu taz i one d i p iù c on d i z i on i

Il f lusso di lavoro si attiva ad ogni creazione di un nuovo elemento nella lista e rimane attivo grazie ad un ciclo while fino a quando il campo status del documento non assume un determinato valore. Questo controllo è svolto ad ogni modifica del file o deproprietà, una serie di ifstatus. In questa soluzione ho esteso questo campo facendo in modo che potesse assumere tre valori di tipo testo(a differenza dei due booleani visti in precedenza): pending, approveapproved by supervisorcompie alcuna azione, se corrisponde al valore pending un’e-mail in cui si invita ciascun revquestione ed un’e-mail al del messaggio l’elenco dei documenti non ancora approvati definitivamente. Qualora il campo di status assuma il valore approved by reviewers vengono spedite e

~ 26 ~

Il secondo flusso di lavoro presenta una maggiore complessitàassunto per semplicità che la figura del relatore

coincidesse col proprietario della pagina web, con questa nuova versione del workflow invece le informazioni relative al supervisor risiedono nel database, in questo modo è anche possibile che la stessa sta ospiti le tesi di più relatori contemporaneamente, scindendo la

figura dell’autore della lista da quella del supervisor.

: wor kf l ow seq ue nz i a le in V is ua l St u di o c o n va lu taz i one d i p iù c on d i z i on i

Il f lusso di lavoro si attiva ad ogni creazione di un nuovo elemento nella lista e rimane attivo grazie ad un ciclo while fino a quando il campo status del documento non assume un determinato valore. Questo controllo è svolto ad ogni modifica del file o delle sue proprietà, una serie di if-else confrontano il valore del campo di status. In questa soluzione ho esteso questo campo facendo in modo che potesse assumere tre valori di tipo testo(a differenza dei due booleani visti in precedenza): pending, approved by reviewers e approved by supervisor. Se questo campo rimane invariato, non compie alcuna azione, se corrisponde al valore pending viene spedita

mail in cui si invita ciascun reviewer a prendere visione del filemail al responsabile della lista inserendo nel corpo

del messaggio l’elenco dei documenti non ancora approvati ualora il campo di status assuma il valore approved

by reviewers vengono spedite e-mail ai medesimi soggetti del caso

presenta una maggiore complessità. Nei assunto per semplicità che la figura del relatore

coincidesse col proprietario della pagina web, con questa nuova versione del workflow invece le informazioni relative al supervisor risiedono nel database, in questo modo è anche possibile che la stessa

, scindendo la

: wor kf l ow seq ue nz i a le in V is ua l St u di o c o n va lu taz i one d i p iù c on d i z i on i

Il f lusso di lavoro si attiva ad ogni creazione di un nuovo elemento nella lista e rimane attivo grazie ad un ciclo while fino a quando il campo status del documento non assume un determinato valore.

lle sue else confrontano il valore del campo di

status. In questa soluzione ho esteso questo campo facendo in modo che potesse assumere tre valori di tipo testo(a differenza dei due

d by reviewers e rimane invariato, non

viene spedita iewer a prendere visione del file in

inserendo nel corpo del messaggio l’elenco dei documenti non ancora approvati

ualora il campo di status assuma il valore approved mail ai medesimi soggetti del caso

Page 27: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 28: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 28 ~

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

Page 29: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

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

Page 30: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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 it ineris, 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.

Page 31: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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 facil i 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. Mi 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.

Page 32: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 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/

Page 33: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 33 ~

Appendice

Workflow 1.2 using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collect ions; using System.Drawing; using System.Linq; using System.Workf low.ComponentModel.Compiler; using System.Workf low.ComponentModel.Ser ial izat ion; using System.Workf low.ComponentModel; using System.Workf low.ComponentModel.Design; using System.Workf low.Runtime; using System.Workf low.Activ it ies; using System.Workf low.Activ it ies.Rules; using Microsoft.SharePoint; using Microsoft.SharePoint.Workf low; using Microsoft.SharePoint.Workf lowActions; namespace Approving.Workf low1 { public sealed part ial c lass Workf low1 : SequentialWorkf lowActiv ity { public Workf low1() { Init ial izeComponent(); } public Guid workf lowId = default(System.Guid); public SPWorkf lowActivat ionPropert ies workf lowPropert ies = new SPWorkf lowActivat ionPropert ies(); public Str ing sendEmailReport_Body = default(System.Str ing); public Str ing sendEmailReport_Subject = default(System.Str ing); public Str ing sendEmailReport_To = default(System.Str ing); pr ivate void onWorkf lowActivated1_Invoked(object sender, ExternalDataEventArgs e) { str ing docList = getData(); sendEmailReport_To = workf lowPropert ies.List.Author.Email; sendEmailReport_Subject = "A f i le was changed in " + workf lowPropert ies.List.T it le; sendEmailReport_Body ="The fol lowing documents are st i l l wait ing for aproval:" + docList; } public str ing getData() { str ing a = str ing.Empty; str ing strUr l = workf lowPropert ies.SiteUrl + "/"; using (SPSite site = new SPSite(strUr l)) { using (SPWeb web = site.OpenWeb()) { str ing l istname = workf lowPropert ies.List.T it le; SPList l ist = web.Lists[ l istname]; SPQuery myquery = new SPQuery();

Page 34: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 34 ~

myquery.Query = ""; SPListItemCollect ion items = l ist.GetItems(myquery); foreach (SPListItem item in items) { if ( item != null) { str ing x =item.GetFormattedValue("approved"); if ( item.GetFormattedValue("approved") == "Yes") { } e lse { a = a + "<br> " + workf lowPropert ies.SiteUrl + "/" + item.Url ; } } } } } return a; } } }

Page 35: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 35 ~

Workflow 2.1 using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collect ions; using System.Drawing; using System.Linq; using System.Workf low.ComponentModel.Compiler; using System.Workf low.ComponentModel.Ser ial izat ion; using System.Workf low.ComponentModel; using System.Workf low.ComponentModel.Design; using System.Workf low.Runtime; using System.Workf low.Activ it ies; using System.Workf low.Activ it ies.Rules; using Microsoft.SharePoint; using Microsoft.SharePoint.Workf low; using Microsoft.SharePoint.Workf lowActions; namespace DocUpload.Workf low1 { public sealed part ial c lass Workf low1 : SequentialWorkf lowActiv ity { public Workf low1() { Init ial izeComponent(); } public Guid workf lowId = default(System.Guid); public SPWorkf lowActivat ionPropert ies workf lowPropert ies = new SPWorkf lowActivat ionPropert ies(); public Str ing sendEmail1_Body1 = default(System.Str ing); public Str ing sendEmail1_Subject1 = default(System.Str ing); public Str ing sendEmail1_To1 = default(System.Str ing); pr ivate void onWorkf lowActivated1_Invoked(object sender, ExternalDataEventArgs e) { sendEmail1_To1 = workf lowPropert ies.List.Author.Email; sendEmail1_Subject1 = "Document uploaded: " + workf lowPropert ies.I tem.DisplayName; sendEmail1_Body1 = "This document is avaiable: " + workf lowPropert ies.SiteUrl + "/" + workf lowPropert ies.ItemUrl; } } }

using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collect ions; using System.Drawing;

Page 36: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 36 ~

using System.Linq; using System.Workf low.ComponentModel.Compiler; using System.Workf low.ComponentModel.Ser ial izat ion; using System.Workf low.ComponentModel; using System.Workf low.ComponentModel.Design; using System.Workf low.Runtime; using System.Workf low.Activ it ies; using System.Workf low.Activ it ies.Rules; using Microsoft.SharePoint; using Microsoft.SharePoint.Workf low; using Microsoft.SharePoint.Workf lowActions; using System.Data.OleDb; using System.Data; using System.Collect ions.Generic; namespace Reviewing.Workf low1 { public sealed part ial c lass Workf low1 : SequentialWorkf lowActiv ity { public Workf low1() { Init ial izeComponent(); } public Guid workf lowId = default(System.Guid); public SPWorkf lowActivat ionPropert ies workf lowPropert ies = new SPWorkf lowActivat ionPropert ies(); public bool res = true; public Stack<str ing> ds = new Stack<str ing>(); public str ing to = str ing.Empty; public str ing f i lename = str ing.Empty; public str ing thesis = str ing.Empty; public str ing docList = str ing.Empty; public str ing supervisor = str ing.Empty; public str ing owner = str ing.Empty; pr ivate void WhileCondit ion(object sender, Condit ionalEventArgs e) { e.Result = res; f i lename = workf lowPropert ies.I tem.Fi le.Name; owner = workf lowPropert ies.List.Author.Email; OleDbConnection oc = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\ReviewersNanotech.accdb;Persist Secur ity Info=False;"); str ing query = "ReviewerQuery"; oc.Open(); OleDbCommand com = new OleDbCommand(query, oc); com.CommandType = CommandType.StoredProcedure; com.Parameters.Add("@fi lename", OleDbType.VarChar).Value = fi lename; OleDbDataReader dr = com.ExecuteReader(); while (dr.Read())

Page 37: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 37 ~

{ ds.Push(dr.GetStr ing(0)); supervisor = dr.GetStr ing(1); thesis = dr.GetStr ing(2); } int max = ds.Count; for ( int conta = 0; conta < max; conta++) { to = ds.Pop() + ";" + to; } dr.Close(); } public Hashtable onWorkf lowItemChanged1_AfterPropert ies1 = new System.Collect ions.Hashtable(); public Hashtable onWorkf lowItemChanged1_BeforePropert ies1 = new System.Collect ions.Hashtable(); public Str ing sendEmailPending_To = default(System.Str ing); public Str ing sendEmailPending_Subject = default(System.Str ing); public Str ing sendEmailPending_Body = default(System.Str ing); public Str ing sendEmailPending_CC = default(System.String); public Str ing sendEmailReviewed_Body = default(System.Str ing); public Str ing sendEmailReviewed_CC = default(System.Str ing); public Str ing sendEmailReviewed_Subject = default(System.Str ing); public Str ing sendEmailReviewed_To = default(System.Str ing); public Str ing sendEmailApproved_Body = default(System.Str ing); public Str ing sendEmailApproved_CC = default(System.Str ing); public Str ing sendEmailApproved_Subject = default(System.Str ing); public Str ing sendEmailApproved_To = default(System.Str ing); public Str ing sendEmailRewRel_Body = default(System.Str ing); public Str ing sendEmailRewRel_Subject = default(System.Str ing); public Str ing sendEmailRewRel_To = default(System.Str ing); public Str ing sendEmailRel_Body = default(System.Str ing); public Str ing sendEmailRel_Subject = default(System.String); public Str ing sendEmailRel_To = default(System.Str ing); public Str ing sendEmailApprovedRel_Body = default(System.Str ing); public Str ing sendEmailApprovedRel_Subject = default(System.Str ing); public Str ing sendEmailApprovedRel_To = default(System.Str ing); pr ivate void NotChanged(object sender, Condit ionalEventArgs e) { str ing aStatus = onWorkf lowItemChanged1_AfterPropert ies1["Status"].ToStr ing(); if (onWorkf lowItemChanged1_BeforePropert ies1["Status"] == null) { e.Result = false; return; } str ing bStatus = onWorkf lowItemChanged1_BeforePropert ies1["Status"].ToStr ing();

Page 38: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 38 ~

if (bStatus == aStatus) { e.Result = true; } e lse { e.Result = false; } } pr ivate void Pending(object sender, Condit ionalEventArgs e) { str ing aStatus = onWorkf lowItemChanged1_AfterPropert ies1["Status"].ToStr ing(); docList = getData(); sendEmailPending_To = to; sendEmailRel_To = owner; sendEmailPending_Subject = "Document wait ing for your approval: " + thesis; sendEmailRel_Subject = "Document uploaded: " + thesis; sendEmailPending_Body = "The fol lowing document is avaiable here: " + workf lowPropert ies.SiteUrl + "/" + workflowPropert ies.I temUrl + " <br>Please give us a feedback as soon as possible.<br>Best Regards"; sendEmailRel_Body = "Document avaiable: " + workf lowPropert ies.SiteUrl + "/" + workf lowPropert ies.ItemUrl + " <br><br> These documents are st i l l wait ing for aproval: " + docList; if (aStatus == "pending") { e.Result = true; } e lse { e.Result = false; } } pr ivate void Reviewed(object sender, Condit ionalEventArgs e) { //approved by reviewers str ing aStatus = onWorkf lowItemChanged1_AfterPropert ies1["Status"].ToStr ing(); docList = getData(); sendEmailReviewed_To = to; sendEmailRewRel_To = owner; sendEmailReviewed_Subject = "Thanks for reviewing "; sendEmailRewRel_Subject = "Document reviewed: " + thesis; sendEmailReviewed_Body = "Thank you for reviewing " + thesis + "<br> Best Regards";

Page 39: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 39 ~

sendEmailRewRel_Body = "Document avaiable: " + workf lowPropert ies.SiteUrl + "/" + workf lowPropert ies.ItemUrl + " <br><br> These documents are st i l l wait ing for aproval:" + docList; if (aStatus == "approved by reviewers") { e.Result = true; } e lse { e.Result = false; } } pr ivate void Approved(object sender, Condit ionalEventArgs e) { //approved by supervisor str ing aStatus = onWorkf lowItemChanged1_AfterPropert ies1["Status"].ToStr ing(); docList = getData(); sendEmailApproved_To = owner; sendEmailApprovedRel_To = supervisor; sendEmailApproved_Subject = "Document approved by supervisor: " + thesis; sendEmailApprovedRel_Subject = "Approving completed: " + thesis; sendEmailApproved_Body = "Document avaiable: " + workf lowPropert ies.SiteUrl + "/" + workf lowPropert ies.ItemUrl + " <br><br> These documents are st i l l wait ing for aproval: " + docList; sendEmailApprovedRel_Body = "Thank you for approving " + thesis + "<br> Best Regards"; if (aStatus == "approved by supervisor") { e.Result = true; } e lse { e.Result = false; } res = false; } public str ing getData() { str ing a = str ing.Empty; str ing strUr l = workf lowPropert ies.SiteUrl + "/"; using (SPSite site = new SPSite(strUr l)) { using (SPWeb web = site.OpenWeb()) {

Page 40: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 40 ~

str ing l istname = workf lowPropert ies.List.T it le; SPList l ist = web.Lists[ l istname]; SPQuery myquery = new SPQuery(); myquery.Query = ""; SPListItemCollect ion items = l ist.GetItems(myquery); foreach (SPListItem item in items) { if ( item != null) { if ( item.GetFormattedValue("Status") == "approved by supervisor") { } e lse { a = a + "<br> " + workf lowPropert ies.SiteUrl + "/" + item.Url + " (" + item.GetFormattedValue("Status") + ")"; } } } } } return a; } } }

Page 41: Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflowdi sharepoint2010

~ 41 ~

Query Database

PARAMETERS filename Text ( 255 );

SELECT Reviewers.[E-mail Address], Reviewers.emailSupervisor, Reviewers.ThesisTitle

FROM Reviewers

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