Sharepoint is an interesting product, because it’s hard to understand what it actually is and does. It looks like a File Server with the ability to store Documents, yet it enables server-side Full-Text Search on those. It also looks like a Server Version of Excel or Access (which is actually partially true, it is intended as a Server for Collaboration) with the ability to store informations in Lists. And it also looks like an Application Server, with the ability to host Workflows.
But it’s the Application Server Role that i find somewhat tricky. if you “only” want to share data or do Approvals, Sharepoint is really straight forward. Create a list, write a workflow, done. But what if you want to make something “funky” with Database-Relations? Here, Sharepoint has some limitations – but limits are there to be broken, right?
Chris Johnson looks at some ways to do “real” Application Development with Sharepoint. I find Option 2 and 3 a bit “awkward”, but Options 1 and 4 clearly show that it can be done. (I don’t like Option 3 because the SmartPart does not seem to be well maintained, as Godotnet is Phased out and I could not easily find another download link – certainly not a good promise to base development on). Option 4 is possibly the only one really feasible, even though it looks a little bit like a “hack” to me. But then again, The tree of software development must be refreshed from time to time with the blood of hacks and workarounds.
For me, there are still a few open questions. Like: Is it better to use lists to store the data, even though if the data is strictly application-internal? Or should a “real” database be used, thus adding a second database layer? I would prefer option 1 if feasible, because then the deployment is easier, and i don’t have “hidden” data somewhere – absolutely everything is stored in one site. I lose a lot of what makes databases though, as in Foreign-Keys or most other Constaints. In terms ob Query/Join, i cannot use SQL anymore, but XML or CAML would work as a substitute in most cases. And what about deployment – is it possible to wrap such an application together as a Solution/Feature or as a Site Template?
I think i’ll spend the next days with fiddling around with this. Too bad you can’t use “real” versioning properly, but using the FileVersion will have to be sufficient then…