Δευτέρα, 23 Ιουλίου 2012

Sharepoint Project – Create Forms and WorkFlows

Καλημέρα σε όλους

Ασχολούμαι με το sharepoint αρκετά χρόνια φτιάχνοντας διάφορα μικρά ή και λίγο μεγαλύτερα Project. ΔΕΝ ΕΙΜΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗΣ ΟΥΤΕ DEVELOPER….

Είχα πάρα πολύ καιρό να γράψω κάτι αλλά τελικά πήρα την απόφαση, βρήκα και λίγο χρόνο και είπα να σηκώσω κάτι στο Blog μου

Θεωρώ ότι είναι ένα εργαλείο το οποίο το έχουμε αφήσει στην άκρη, ειδικά εδώ στην Ελλάδα.

Νομίζω ότι οι Developers που δημιουργούν εφαρμογές Web από το μηδέν θα είχαν ένα μεγάλο όπλο στο οπλοστάσιό τους αν “μάθαιναν” να χρησιμοποιούν το Sharepoint.

Επειδή λοιπόν βλέπω ότι κανένας μας δεν γράφει κάτι για αυτό το εργαλείο, αποφάσισα να γράψω κάποια πράγματα και να προσπαθήσω να δημιουργήσω έναν Step By Step Οδηγό για την δημιουργία ενός “προγράμματος” στο Sharepoint στο οποίο θα καταχωρούμε τις αιτήσεις αδειών και θα δημιουργήσουμε και ροές εργασίας εγκρίσεων.

Το να καταγραφεί το παραπάνω με λόγια είναι αρκετά δύσκολο, αλλά θα προσπαθήσω να μεταφέρω όσο καλύτερα μπορώ την φιλοσοφία.

Γενικά τι χρειαζόμαστε?

Χρειαζόμαστε έναν Sharepoint Server 2010

Τον Sharepoint Server τον χρειαζόμαστε για να μπορούμε να κάνουμε Publish Excel Services, αλλά και Form (Infopath) Services, πράγμα που δεν το κάνει ο Free Sharepoint.

Επιπλέον οι άδειες που χρειαζόμαστε είναι Enterprise έτσι ώστε οι φόρμες να μπορούν να ανοίξουν σε περιβάλλον Web και να μην είναι αναγκασμένοι οι Clients να έχουν infopath στο PC τους.

Χρειαζόμαστε το Infopath για να σχεδιάσουμε τις φόρμες

Χρειαζόμαστε τον sharepoint designer για να σχεδιάσουμε τις ροές εγκρίσεων (Ο Sharepoint Designer είναι Free και μπορείτε να τον κατεβάσετε από http://www.microsoft.com/el-gr/download/details.aspx?id=16573) Καλό θα ήταν να κατεβάσετε την Ελληνική Έκδοση έτσι ώστε κάποια προεπιλεγμένα Workflows που έχει να είναι μεταφρασμένα στα Ελληνικά.

Πρώτα από όλα πρέπει να έχουμε εγκαταστήσει τον Sharepoint Server μέσα στο Domain μας ο οποίος για να εγκατασταθεί θέλει να υπάρχει και SQL τουλάχιστον 2005 64bit. Στον server αυτό θα πρέπει να έχουμε ενεργοποιήσει Excel Services, Form Services κλπ και θα πρέπει να έχουμε ορίσει κάποιο σημείο το οποίο θα το θεωρεί αξιόπιστο ώστε να μπορούμε να αποθηκεύουμε κάποιο Excel και αυτό να ανοίγει σε περιβάλλον Web και όχι απλά να μπορούμε να το κάνουμε Download από τον Sharepoint Server.

Εφόσον λοιπόν είμαστε έτοιμοι με όλα τα παραπάνω μπορούμε να ξεκινήσουμε.

Όλα ξεκινάνε από τον καλό σχεδιασμό, έτσι ώστε να μην μας εμφανιστούν στην πορία πράγματα τα οποία δεν τα είχαμε προβλέψει. Σε αυτό το σημείο λοιπόν πρέπει να πάρουμε μολύβι και χαρτί και να καταγράψουμε όσο δυνατόν καλύτερα τις απαιτήσεις μας.

Θέλουμε λοιπόν ένας ΧΡΗΣΤΗΣ να συμπληρώνει μία φόρμα στην οποία θα διαλέγει έναν ΕΡΓΑΖΟΜΕΝΟ (Διότι όλοι οι εργαζόμενοι Δεν έχουν υπολογιστή και Active Directory Account)
Θέλουμε η φόρμα να έχει ΗΜΕΡΟΜΗΝΙΑ ΔΗΜΙΟΥΡΓΙΑΣ. Θέλουμε να διαλέγει την ημερομηνία ΑΠΟ που θα πάρει άδεια μέχρι την ημερομηνία ΕΩΣ που θα πάρει άδεια. Στη συνέχεια θέλουμε να υπολογίζουμε τις ημέρες και μάλιστα τις ΕΡΓΑΣΙΜΕΣΗΜΕΡΕΣ αφαιρώντας τα Σαββατοκύριακα και τις επίσημες αργίες. Στο τέλος θέλουμε να καταχωρεί την φόρμα και να αποθηκεύετε η φόρμα με ένα μοναδικό όνομα ΟΝΟΜΑΦΟΡΜΑΣ.

Με τα παραπάνω βλέπουμε ότι χρειαζόμαστε τα πεδία
ΧΡΗΣΤΗΣ
ΕΡΓΑΖΟΜΕΝΟΣ
ΗΜΕΡΟΜΗΝΙΑΔΗΜΙΟΥΡΓΙΑΣ
ΑΠΟ
ΕΩΣ
ΕΡΓΑΣΙΜΕΣΗΜΕΡΕΣ
ΟΝΟΜΑΦΟΡΜΑΣ

Σκεφτόμαστε ότι όταν θα ψάχνουμε αποτελέσματα θα πρέπει να μπορούμε να φιλτράρουμε ανά έτος έτσι ώστε να βλέπουμε πόσες άδειες πήρε ο κάθε χρήστης το κάθε έτος Οπότε χρειαζόμαστε ένα πεδίο ΕΤΟΣ το οποίο με κάποιο τρόπο θα υπολογίζεται από την ημερομηνία Δημιουργίας.

Επίσης αν η πολιτική της εταιρίας είναι ότι στο νέο έτος κουβαλάει το υπόλοιπο αδειών του από το προηγούμενο μέχρι κάποια ημερομηνία κάποιον τρόπο να ελέγχουμε αν η αίτηση αφορά ημέρες για προηγούμενο έτος ή για το τρέχον. Οπότε ένα πεδίο Yes/No ΠΡΟΗΓΟΥΜΕΝΟΕΤΟΣ.

Θα θέλαμε ο χρήστης να δηλώνει την επιθυμία του για άδεια την τάδε του μηνός αλλά δεν θέλουμε να ξεκινά ροή εγκρίσεων αν ο πρώτος διευθυντής του δεν δώσει το ΟΚ για την ημερομηνία αυτή, αν δεν ελέγξει ένα χρονοδιάγραμμα αδειών για εκείνη την περίοδο που αφορά το τμήμα του και την πόλη του.
Από το παραπάνω βγάζουμε συμπέρασμα ότι θέλουμε την ΠΟΛΗ του εργαζομένου, το ΤΜΗΜΑ του εργαζομένου, καθώς και ένα στοιχείο ελέγχου ΟΡΙΣΤΙΚΗΥΠΟΒΟΛΗ Ναι ή όχι.

Στη συνέχεια θέλουμε Αν έχει γίνει οριστική υποβολή να ξεκινά διαδικασία εγκρίσεων σειριακή με τους Υπεύθυνους του Εργαζόμενου. Οπότε χρειαζόμαστε τους υπεύθυνους εγκρίσεων με την σειρά που υπογράφουν, ΔΙΕΥΘΥΝΤΗΣ1, ΔΙΕΥΘΥΝΤΗΣ2, ΔΙΕΥΘΥΝΤΗΣ3, ΔΙΕΥΘΥΝΤΗΣ4, ΔΙΕΥΘΥΝΤΗΣ5, ΔΙΕΥΘΥΝΤΗΣ6.

Όταν καταχωρείτε η φόρμα θέλουμε ο χρήστης που την καταχώρησε να ενημερώνεται με email ότι έχει ξεκινήσει η διαδικασία εγκρίσεων. Στη συνέχεια θέλουμε να πάει email στον πρώτο Διευθυντή και αν εγκρίνει να συνεχίσει στο δεύτερο κλπ. Αν κάποιος απορρίψει να σταματά η διαδικασία εγκρίσεων και να αφαιρείται η άδεια από το χρονοδιάγραμμα αδειών.. Αν τελικά Εγκριθεί η άδεια θέλουμε να ενημερώνεται ο δημιουργός ότι έχει εγκριθεί ή άδειά του, και στην συνέχεια να μπορεί αυτή η άδεια πλέον να μην μπορεί να πειραχτεί.
Οπότε χρειαζόμαστε (για ευκολία) μία δεύτερη βιβλιοθήκη μέσα στην οποία θα αντιγράφονται οι εγκεκριμένες μόνο άδειες και δεν θα μπορεί να τις πειράξει κανένας παρά μόνο κάποιοι χρήστες (Για να διορθώσουν για παράδειγμα τις ημερομηνίες διότι ο Εργαζόμενος ήρθε νωρίτερα επειδή έπρεπε να έρθει, που εύχομαι να μην τύχει σε κανέναν μας αυτό).

Όταν η άδεια είναι εγκεκριμένη, όταν την ανοίγουμε να είναι σε εκτυπώσιμη μορφή και να μην μπορεί να πειραχθεί τίποτε, και επιπλέων να γράφει τα ονόματα των διευθυντών που έδωσαν τις εγκρίσεις. Τέλος θα πρέπει όταν η άδεια είναι εγκεκριμένη να πηγαίνει ένα email ενημέρωσης στο τμήμα Hr της πόλης που είναι ο χρήστης έτσι ώστε να μπορεί να εκτυπώσει την φόρμα σε περίπτωση που αυτό είναι απαιτητό και να βάλει τον εργαζόμενο να υπογράψει (Σε περίπτωση που και αυτό είναι απαιτητό).

Θέλουμε να μεταφέρεται στον φάκελο Εγκεκριμένων ΟΤΑΝ ο τελευταίος Διευθυντής Υπογράψει και όχι ενδιάμεσος. Ποιος είναι ο τελευταίος Διευθυντής? άλλος εργαζόμενος έχει 2 άλλος 3 άλλος 5, οι οποίοι είναι υπεύθυνοι για να εγκρίνουν για τον κάθε εργαζόμενο. Οπότε χρειαζόμαστε έναν έλεγχο για να βρούμε τον τελευταίο διευθυντή.
Ο έλεγχος θα είναι της μορφής IF ΔΙΕΥΘΥΝΤΗΣ1<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ2=1
IF ΔΙΕΥΘΥΝΤΗΣ2<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ2=1
IF ΔΙΕΥΘΥΝΤΗΣ3<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ3=1
IF ΔΙΕΥΘΥΝΤΗΣ4<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ4=1
IF ΔΙΕΥΘΥΝΤΗΣ5<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ5=1
IF ΔΙΕΥΘΥΝΤΗΣ6<>”” Then ΔΙΕΥΘΥΝΤΗΣ1ΕΛΕΓΧΟΣ6=1
Θέλουμε το άθροισμα των παραπάνω ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=sum(ΔΕΙΥΘΥΝΤΗΣ1;Δ ΙΕΥΘΥΝΤΗΣ2;ΔΙΕΥΘΥΝΤΗΣ3;ΔΙΕΥΘΥΝΤΗΣ4;ΔΙΕΥΘΥΝΤΗΣ5;ΔΙΕΥΘΥΝΤΗΣ5)
Και τέλος ένα ΠΕΔΙΟ όπου ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=1 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ1
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=2 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ2
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=3 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ3
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=4 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ4
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=5 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ5
IF ΑΘΡΟΙΣΜΑΔΙΕΥΘΥΝΤΩΝ=6 Then ΤΕΛΙΚΟΣΕΓΚΡΙΝΩΝ=ΔΙΕΥΘΥΝΤΗΣ6

έχοντας όλα τα παραπάνω σκέφτομαι ότι η φόρμα όταν θα έχει εγκριθεί πρέπει να ανοίγει σε άλλη μορφή (εκτυπώσιμη) οπότε θέλω και ένα Πεδίο ΚΑΤΑΣΤΑΣΗΕΓΚΡΙΣΗΣ.

Νομίζω ότι με τα παραπάνω πεδία είμαστε καλυμμένοι. Στην πορεία θα δούμε αν θα χρειαστούμε κάτι αλλά τον βασικό σχεδιασμό τον έχουμε κάνει.

ΚΑΤΑΛΗΞΑΜΕ ΛΟΙΠΟΝ ΝΑ ΧΡΕΙΑΖΟΜΑΣΤΕ
Τα προφανή ΧΡΗΣΤΗΣ, ΕΡΓΑΖΟΜΕΝΟΣ, ΗΜΕΡΟΜΗΝΙΑΔΗΜΙΟΥΡΓΙΑΣ, ΑΠΟ, ΕΩΣ, ΕΡΓΑΣΙΜΕΣΗΜΕΡΕΣ, ΟΝΟΜΑΦΟΡΜΑΣ, Αλλά και ένα σωρό ακόμη πεδία τα οποία δεν φαινόταν από την αρχή. Όλα αυτά τα πεδία θα πρέπει λοιπόν να τα περιέχει η φόρμα μας.

Data Input
Τα στοιχεία που θα “διαβάζουμε” στην φόρμα, μπορούν να έρχονται από πολλών ειδών πηγές.
Μπορούν να έρχονται από κάποιον SQL Server, από ODBC, από Web Service, ή από λίστες του Sharepoint. ΕΔΩ ΘΑ ΗΤΑΝ Η ΠΟΛΥ ΚΑΛΗ ΔΟΥΛΕΙΑ ΤΩΝ Developer να έκαναν για παράδειγμα ένα Web Service ή έναν Connector ή κάτι τέλος πάντων το οποίο θα μας σύνδεε τα Data με το ERP της εταιρίας για παράδειγμα. Μιας και δεν έχουμε αυτή τη στιγμή Developer σκέφτομαι ότι καλό θα ήταν να μπορώ αν χρειαστεί να κάνω Upload στην μισθοδοσία για παράδειγμα τα δεδομένα, οπότε στα παραπάνω πεδία προσθέτω και τον ΚΩΔΙΚΟΣΕΡΓΑΖΟΜΕΝΟΥ που έχει στην μισθοδοσία αλλά και τον αν είναι ΕΝΕΡΓΟΣ ή όχι.

Εγώ λοιπόν το έκανα με λίστα του sharepoint
Τι πρέπει να έχει αυτή η λίστα?

ΕΡΓΑΖΟΜΕΝΟΣ ΚΩΔΙΚΟΣ ΕΝΕΡΓΟΣ ΤΜΗΜΑ ΠΟΛΗ Δ1 Δ2 Δ3 Δ4 Δ5 Δ6
ΛΑΓΙΟΠΟΥΛΟΣ ΚΩΣΤΑΣ 234 Ναι ΙΤ ΘΕΣΣΑΛΟΝΙΚΗ p.petropoulos
t.tasopoulos        
ΠΕΤΡΟΠΟΥΛΟΣ ΠΕΤΡΟΣ 146 Ναι OIKONOMIKO ΑΘΗΝΑ k.kostopoulos          

Θα πρέπει λοιπόν να έχει την παραπάνω μορφή όπου οι τιμές των διευθυντών είναι τα UserName που έχουν στο Active Directory.

Σε αυτό το σημείο νομίζω ότι πρέπει να διακόψω το πρώτο μέρος, έτσι ώστε να μπορείτε να διαβάσετε όλα αυτά αλλά και να μπορείτε να τα σκεφτείτε .