ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ!
Ερώτηση για το Sharepoint! ΖΗΤΩΩΩΩ! Πραγματικά δεν καταλαβαίνω πως μπορεί ένα προϊόν να είναι τόσο δημοφιλές αλλά να μην υπάρχουν ερωτήσεις γι αυτό. Ίσως είναι τόσο τέλειο που δεν χρειάζεται κανείς να ρωτήσει τίποτε?
Σοβαρά τώρα. Αυτό που ζητάς από μόνο του δεν γίνεται αλλά πρέπει να καταλάβεις το γιατί. Το Sharepoint δεν έχει drop down πεδία, έχει choice ή lookup πεδία τα οποία by default γίνονται render ως drop down αν επιτρέπεται μόνο μία επιλογή. Αν επιτρέπονται πολλαπλές επιλογές, τα πεδία γίνονται render ως εξής:
- Τα choice πεδία γίνονται render ως checkbox list
- Τα lookup πεδία γίνονται render ως δύο list boxes με τις διαθέσιμες και επιλεγμένες τιμές και μερικά κουμπιά για Add/Remove.
Από μόνο του το Sharepoint δεν έχει κάποιο ιεραρχικό τύπο για choice ή lookup, ούτε μπορείς να συνδέσεις δύο διαφορετικά lookup που κοιτάζουν την ίδια λίστα. Αναγκαστικά θα πρέπει να βρεις κάποιο workaround. Θα πρέπει να μας πεις τί ακριβώς θέλεις να κάνεις, αλλά θα προσπαθήσω να μαντέψω από αυτά που λες ότι θέλεις να κάνεις μόνο μία επιλογή οπότε δεν χρειάζονται check boxes. Υποθέτω επίσης ότι χρησιμοποιείς lookup πεδίο και όχι choice, οπότε οι τιμές που ζητάς είναι πεδία σε κάποια λίστα
- Η απλούστερη λύση - Βάλε όλες τις επιλογές σε ένα πεδίο στο στυλ "Χώρα - Πόλη". Μπορεί να μην είναι ωραίο, αλλά δουλεύει χωρίς έξτρα κώδικα και νέα πεδία. Στο Sharepoint ισχύει πραγματικά το "The simplest thing that could possibly work"
- Η πιο ολοκληρωμένη λύση είναι να φτιάξεις το δικό σου τύπο πεδίου που θα υλοποιεί ακριβώς αυτό που θέλεις: Ένα πεδίο το οποίο θα εμφανίζει δύο drop-down και το δεύτερο θα φιλτράρεται από το πρώτο. Στο Sharepoint θα αποθηκεύεις μόνο μία τιμή (τη δεύτερη) οπότε μπορείς να διατηρήσεις τη λειτουργικότητα του Lookup πεδίου, απλά κάνοντας Inherit από αυτό. Αν πρόκειται να το χρησιμοποιήσεις σε ένα μόνο project μπορείς να κάνεις hard-code τα πεδία που θα εμφανίζονται, διαφορετικά θα πρέπει να πειράξεις τη φόρμα με τις ιδιότητες του πεδίου για να μπορείς να επιλέγεις ποιά πεδία θα εμφανιστούν.
- Αν δεν έχεις πάρα πολλά δεδομένα, μπορείς να εμφανίσεις τα στοιχεία ως ιεραρχία σε ένα ιεραρχικό drop down. Μιλάμε πάλι για custom πεδίο, αλλά αυτή τη φορά αντί να εμφανίσεις δύο dropdown, εμφανίζεις ένα. Παραλλαγή σε αυτό είναι να εμφανίσεις ένα treeview. Σε αυτή την περίπτωση θα πρέπει να πειράξεις πάλι τις ιδιότητες για να μπορείς να επιλέξεις ποιά πεδία θα εμφανιστούν.
- Ετοιμάσου να τα σκάσεις. Γερά. Έχουν βγει αρκετές εταιρείες οι οποίες πουλάνε control τα οποία αντιμετωπίζουν τις ελλείψεις του Sharepoint αλλά με σημαντικό κόστος. Συγκρινόμενο με τα controls της Infragistics, Telerik, DeveExpress και με βάση όσα παρέχουν, θα έλεγα υπερβολικό. Από την άλλη, φτιάχνοντας τα δικά σου control σίγουρα θα πληρώσεις περισσότερα απ' όσο κοστίζουν αυτά τα controls. Για παράδειγμα, η kwiz έχει φτιάξει το Dual Lookup Field Type με κόστος $750. Τα διάφορα bundles της kwiz κοστίζουν από $1800 μέχρι $3200. Από την άλλη, πόσο θα σου κοστίσει σε χρόνο, άρα και χρήμα, να φτιάξεις το ίδιο control?
Για δώσε μερικές επιπλέον πληροφορίες για το τί θέλεις να κάνεις. Ίσως να υπάρχει μία πιο απλή λύση που να κάνει αυτό που θέλεις.
Υ.Γ. Μπορείς μεν να πειράξεις τις NewForm, EditForm αλλά δεν συνίσταται. Bad, BAD, BAAAAD idea αλλά όχι πάντα. Τα control που βλέπεις σε αυτές τις σελίδες δεν είναι ανεξάρτητα, αλλά ο τρόπος με τον οποίον γίνεται render ένα ListView control το οποίο αναλαμβάνει να εμφανίσει όλα τα πεδία ανάλογα με τον τύπο τους. Υπάρχει μία εναλλακτική, να χρησιμοποιήσεις ένα DataForm web part αντί για το list view, αλλά θα πρέπει πρώτα να αντιμετωπίσεις μερικές δεκάδες bugs όπως ότι δεν θα δουλεύουν πλέον τα attachments.
Από την άλλη, μπορείς να "φυτέψεις" javascript και να το χρησιμοποιήσεις π.χ. για να μετακινήσεις ένα control στην οθόνη, για να το κρύψεις ή να το εμφανίσεις κλπ. Το πρόβλημα είναι ότι το Sharepoint δεν έχει κάποιο αξιόλογο client-side API οπότε δεν μπορείς να κάνεις πολλά πράγματα. Ακόμα και για να βρεις την τιμή ενός πεδίου θα πρέπει να βασιστείς σε κάποια naming conventions για να βρεις ποιό control εμφανίζει ποιό πεδίο και να το διαβάσεις. Ευτυχώς, η διαδικασία περιγράφεται σε κάποια blog posts αλλά δεν είναι και η ευκολότερη λύση. Το blog του Sharepoint Designer Team είναι μία ενδιαφέρουσα πηγή αν και συνήθως ξεχνάνε να ειδοποιήσουν για τα bugs, ειδικά όσον αφορά το DataFormWebPart. Θα μου πεις, αυτοί το φτιάξανε, οπότε τί να σου πούνε .....
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos