Χμμμμμμμμμμμμμμμμμμμμμμ, η μεγάλη ερώτηση. Προφανώς, χρησιμοποιώντας CAML έχεις μία "no-code", αν μπορείς να το πεις έτσι, μέθοδο, η οποία επιδέχεται κάποιου είδους version control και μπορεί να ελεγχθεί ως ένα σημείο από το Sharepoint κατά το deployment. Δεν έχεις όμως τη δυνατότητα να κάνεις upgrade διάφορα definitions, να προσθέσεις/αφαιρέσεις πεδία, να αλλάξεις τύπους, να κάνεις migrate δεδομένα και content types, και πολλές άλλες απαραίτητες εργασίες. Ακόμα και αν θέλεις να φτιάξεις ένα publishing site, είναι ευκολότερο να ενεργοποιήσεις το Publishing μέσω κώδικα παρά να το κάνεις με CAML. Τελικά απλά δεν αρκεί το CAML για να πεις ότι θα φτιάξεις ένα επαρκές πακέτο για deployment.
Από την άλλη, με κώδικα μπορείς να κάνεις πολύ περισσότερους ελέγχους, όπως να ελέγξεις αν υπάρχουν τα πεδία που θέλεις, να προσθέσεις νέα, να κάνεις upgrade στήλες και content types και πολλά άλλα. Το "κακό" είναι ότι θα πρέπει να κάτσεις να γράψεις ουσιαστικά ένα δικό σου deployment framework για να κάνει όλα αυτά τα πράγματα, εκτός και αν έχεις σκοπό να ξαναγράφεις τον ίδιο κώδικα κάθε φορά που φτιάχνεις ένα καινούριο project. Άλλος πονοκέφαλος είναι ότι υπάρχουν πάρα πολλές ρυθμίσεις που μπορείς να κάνεις κατά το deployment, είτε μέσω CAML είτε μέσω κώδικα.
Είχα δοκιμάσει αυτή τη λύση παλιότερα, φτιάχνοντας "κάτι σαν μίνι DSL" για Sharepoint, όπου όριζα τη δομή πχ. μίας λίστας με τον παρακάτω τρόπο στον κώδικα:
var list=Site.List("MyList", ListType)
.Field("MyField1",Integer)
.Field("MyField2",Text,20)
.LookupField("MyLookupField","MyLookupID","MyDisplayField")
Και μετά καλούσα μία Update για να δημιουργήσω όσα πεδία λείπανε, ή και όλη τη λίστα αν δεν υπήρχε. Για εμένα που είχα φτιάξει τον κώδικα τα πάντα ήταν ξεκάθαρα. Για κάποιον άλλο όμως, σίγουρα θα χρειαζόταν κάποια εξοικείωση. Επιπλέον, από τη στιγμή που δεν είχα βάλει κάποιο validation δεν ήξερα αν θα πετύχει το deployment μέχρι να εκτελεστεί ο κώδικας. Θα μου πεις πάλι, γιατί το VS σου κάνει validation ...
Μία καλύτερη λύση φυσικά θα ήταν να χρησιμοποιήσω κάποιο parser generator για να φτιάξω μία ωραία γλώσσα που να κάνει αυτά που θέλω, ή κάποια γλώσσα η οποία επιτρέπει τη δημιουργία πιο κατανοητών DSLs.
Φυσικά, ούτε λόγος να γίνεται για να φτιάξω το schema που θέλω σε XML. Αυτό είναι η CAML και είναι η καλύτερη απόδειξη ότι η XML είναι ΑΚΑΤΑΛΛΗΛΗ για αυτή τη δουλειά.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos