Αυτό που ζητάς είναι αυτοματοποίηση της διαδικασίας του Navision, κάτι το οποίο μπορεί να γίνει με workflow μπορεί και όχι. Το Sharepoint όμως ΔΕΝ είναι workflow server. Έχει μία υλοποίηση workflow μέσω του Sharepoint Designer για task automation με βήματα που αφορούν καθαρά το ίδιο το Sharepoint (π.χ. δημιουργώ list item, δημιουργώ task, αλλάζω ένα πεδίο, στέλνω ένα email). Αφορά εντελώς γραμμικά workflows, χωρίς καμμία δυνατότητα looping (π.χ. for, while). Μπορείς βέβαια να φτιάξεις και δικά σου workflow activities ή ακόμα και να φτιάξεις ολόκληρο το workflow με το Visual Studio, αλλά αυτό απαιτεί αρκετό χρόνο.
Το Sharepoint δεν παρέχει workflow, χρησιμοποιεί workflow, όπως π.χ. θα μπορούσε να χρησιμοποιήσει και το Navision το ίδιο.
Αυτό δεν σημαίνει ότι δεν μπορείς να χρησιμοποιήσεις Sharepoint, απλά ο τρόπος θα είναι διαφορετικός. Ας πάρουμε καταρχήν ποιές είναι πραγματικά οι απαιτήσεις (το workflow είναι τεχνολογία, όχι απαίτηση).
- Έχουμε μία διαδικασία αλλαγής πιστωτικών ορίων κατά την οποία ανταλλάσονται πολλά έγγραφα.
- Δεν υπάρχει μία αυστηρή διαδικασία αλλά κάποιες φάσεις και κάποιες απαιτήσεις οι οποίες πρέπει να καλυφθούν.
- Θέλουμε να μαζέψουμε την αλληλογραφία της διαδικασίας σε ένα σημείο
- Θέλουμε να παρακολουθούμε την εξέλιξη της διαδικασίας, δηλαδή
- Θέλουμε να ξέρουμε σε ποιό βήμα βρίσκεται τώρα η διαδικασία
- Ερώτηση: Θέλουμε να ξέρουμε αν καθυστέρησε κάποιος, κάτι, κάποιο βήμα κλπ?
- Ερώτηση: Θέλουμε στατιστικά π.χ. έγιναν τόσες μειώσεις το μήνα, μέσος χρόνος Χ, έκανε 5 μέρες στο τάδε βήμα?
- Οι πελάτες θα προέρχονται από το Navision αλλά θα προσθέσουμε και δική μας πληροφορία
- Το θέλουμε τσάμπα

Το τελευταίο σημείο είναι μάλλον σημαντικό, καθώς προκαλεί επιπλέον κόστος
. Βλέπεις, στην Enteprise edition του Sharepoint υπάρχει το Business Data Catalog το οποίο σου επιτρέπει να συνδεθείς με άλλα συστήματα και να εμφανίσεις π.χ. πελάτες λες και ήταν λίστες και στήλες του Sharepoint. H Enterprise όμως κοστίζει, οπότε θα πρέπει να κάνεις τη δουλειά με δικό σου κώδικα.
Ας πάρουμε τα πράγματα με τη σειρά.
1-2. Για να αυτοματοποιήσεις μία διαδικασία δεν απαιτείται workflow, μπορείς άνετα να έχεις μία λίστα με τις αιτήσεις, ένα checkbox για κάθε απαίτηση και στο τέλος ένα πεδίο "Φάση" με τιμές "Νέα", "Σε Εξέλιξη", "Παγωμένη", "Εγκρίθηκε", "Απορρίφθηκε". Μπορείς μετά να βασιστείς σε views επάνω σε αυτή τη λίστα για να δείχνεις π.χ. μόνο τις ενεργές αιτήσεις στους αντιπροσώπους.
3. Αυτό φωνάζει για document library. Μπορείς να φτιάξεις ένα document library στο οποίο θα προσθέσεις ένα lookup πεδίο προς τη λίστα των αιτήσεων για να συνδέσεις έτσι αιτήσεις με έγγραφα. Θα χρειαστεί βέβαια να φτιάξεις και μία σελίδα στην οποία θα εμφανίζεις και την αίτηση και τα σχετικά documents. Ο πληρέστερος τρόπος θα ήταν να φτιάξεις custom edit/display φόρμες για τη λίστα των αιτήσεων οι οποίες θα εμφανίζουν τα σχετικά documents κάτω από τα στοιχεία της αίτησης. Ο πιο quick&dirty τρόπος θα ήταν να φτιάξεις μία απλή σελίδα στην οποία θα βάλεις δύο web parts, ένα να δείχνει τα στοιχεία της αίτησης και ένα να δείχνει τα documents, και τα δύο φιλτραρισμένα με βάση το ID της αίτησης.
Ή μπορείς να πεις στους χρήστες να κάνουν search με τον κωδικό της αίτησης (very quick, very dirty)!
4. Μπορείς να παρακολουθήσεις την εξέλιξη των αιτήσεων με διάφορους out-of-the-box τρόπους. Καταρχήν, μπορείς να ομαδοποιήσεις τις αιτήσεις με βάση τις φάσεις και να εμφανίσεις και counts ή αθροίσματα. Αυτό γίνεται απλά φτιάχνοντας το αντίστοιχο view. Αν σε ενδιαφέρει να βλέπεις και πότε πέρασε από τη μία φάση στην άλλη, ή πότε ολοκληρώθηκε η μία ή η άλλη απαίτηση, μπορείς να προσθέσεις και κάποια πεδία ημερομηνίας. Για να συμπληρωθούν όμως αυτά τα πεδία θα πρέπει να φτιάξεις ένα αρκετά απλό event receiver στο ItemUpdating event ο οποίος θα κοιτάζει ποιό πεδίο άλλαξε και θα ενημερώνει την αντίστοιχη ημερομηνία. Δεν μπορείς να χρησιμοποιήσεις Sharepoint designer workflow γιατί η έλλειψη loops σημαίνει ότι δεν μπορείς να εκφράσεις το "όσο είναι ενεργή η αίτηση περίμενε για αλλαγές στα πεδία Χ,Υ,Ζ και άλλαξε τα A,B, C".
Αν βάλεις ημερομηνίες θα μπορέσεις να υπολογίσεις και χρόνους (με λίγη παραπάνω δουλειά) για να καλύψεις και το 4.2
5. Εφόσον δεν παίζει BDC, θα πρέπει κάπως να έρθει η πληροφορία από το Navision στο Sharepoint. Η ευκολότερη λύση είναι να φτιάξεις μία λίστα πελατών την οποία θα γεμίζεις περιοδικά με στοιχεία από το Navision. Θα πρέπει να καλείς είτε τα web services του Navision, είτε να χτυπήσεις τη βάση του (ό,τι σε βολεύει) και να περάσεις τα στοιχεία στη λίστα του Sharepoint. Η λίστα των αιτήσεων θα περιέχει και ένα lookup πεδίο στη λίστα των πελατών έτσι ώστε να μπορείς να επιλέξεις ποιός πελάτης αντιστοιχεί σε ποιά αίτηση. Η λίστα των πελατών θα περιέχει τουλάχιστον τα πεδία Όνομα, Επώνυμο, Πιστωτικό Όριο, Navision ID και όποια άλλα σε ενδιαφέρουν.
Για να εκτελείται περιοδικά το τράβηγμα των στοιχείων μπορείς είτε να φτιάξεις ένα command-line εργαλείο το οποίο θα τραβάει τα δεδομένα, ή να φτιάξεις ένα Sharepoint Job το οποίο θα κάνει την ίδια δουλειά. Απλά το Sharepoint Job θέλει λίγο κώδικα παραπάνω για να το εγκαταστήσεις, γιατί .... δεν προβλέφθηκε τρόπος να φτιάξεις jobs χωρίς κώδικα.
Το παραπάνω είναι απλά ένας συνδυασμός τεχνικών τις οποίες μπορείς να χρησιμοποιήσεις. Έχω αντιμετωπίσει πάρα πολλές φορές παρόμοιες απαιτήσεις και άλλοτε ήθελαν να βρίσκουν τις καθυστερημένες αιτήσεις, άλλοτε ήθελαν να στέλνουν email ειδοποίησης, άλλοτε ήθελαν έγκριση για τη μετάβαση από τη μία φάση στην άλλη, άλλοτε μονή και άλλοτε διπλή υπογραφή κλπ, κλπ, κλπ, κλπ.
Θα πρέπει να ξεκαθαρίσεις τί θέλουν πραγματικά οι χρήστες σου πριν αποφασίσεις τί πεδία θα βάλεις μέσα και πόσο και τί κώδικα θα γράψεις. Αν είσαι μάλιστα στη φάση που "ό,τι μας δώσετε βοηθάει" καλό είναι να κρατήσεις απλά τα πράγματα για να μην βρεθείς προ απροόπτων.
Τέλος, αν έχεις περίπλοκη διαδικασία θα πρέπει να σκεφτείς μήπως πρέπει να χρησιμοποιήσετε κάποιο πραγματικό workflow server με σύνδεση προς το Sharepoint. Κοστίζουν μεν, αλλά έχουν όλα όσα είπαμε και πολλά ακόμα όσον αφορά δρομολόγηση, παρακολούθηση, escalation, διαχείριση εισερχομένων, εξερχομένων αιτήσεων, στατιστικά κλπ. Η απαίτηση #6 μπορεί να κοστίσει περισσότερο απ' όσο αξίζει.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos