Archives

Archives / 2006 / February
  • Colligo making the SharePoint rounds

    Colligo Networks, makers of Colligo for SharePoint has released their beta 2 version of the product. If you’re not familiar with it, Colligo for SharePoint is a rich offline client that emulates the functions of SharePoint team spaces. The client enables mobile users to download, create, organize, view, edit and save content on their laptop much like they can on a SharePoint server. 

    A lot of new features and fixes have gone into Beta 2, including the following highlights:

    • Support for views with grouping
    • Support for events lists and recurring appointments
    • Support for issues lists
    • Can now reuse Windows login credentials to authenticate with site
    • Can now modify credentials and URL for a site through the Workspace > Manage Workspaces menu item.
    • Synchronization progress bar now reflects the actual progress of the sync
    • Switched to .NET Framework Version 2.0

    Some Key improvements still to come include:

    • Ability to sync multiple sites at once (rather than syncing each site individually)
    • Improved error handling and reporting

    They have a blog online now at http://www.offlinesharepoint.com and you can sign up (free) for the beta here.

    Enjoy!

  • No post back Web Part connection using the DataSheet View

    Maybe you haven’t seen this trick before so I figured I would serve it up to you for a weekend thing to try. Create a DataSheet view of two lists and with some field to connect them together, drop them onto a page and add connection information to link the fields together. You’ll have a dynamic view that doesn’t post back to the page and filters information from one list to the other like this:

    Click to see full size image

    Normally when you connect two Web Parts together (say through an ID field of some kind) you’ll have a radio button on one that, when clicked, will cause a post back to the page and filter the second list. Here we’re doing the same thing but instead of using the Standard SharePoint view, we’re using a DataSheet View.

    I created two lists (by exporting the Northwind from Microsoft Access to a SharePoint site, another trick that you can do if you want some quick data), one for Suppliers and one for Products. The Products list has a column called SupplierID which matches the ones found in the Supplier list. Then I created two DataSheet Views for the lists and put them on a Web Part Page (in this case, the home page). Note that your clients will need Office 2003 installed in order to view this.

    Connect the two lists as you would normally, having Products provide a row to Suppliers via the SupplierID column. That’s all there is to it. Now when you select a Supplier from the list, it filters the available Products. No post backs, no fuss. Give it a try with your lists.

    Enjoy!

  • Leverage what you have, it really does work

    Almost every day you'll find people complaining about SharePoint and how it doesn't do something exactly the way they want, or it's complicated to use, blah, blah, blah, blah, blah. This is pretty much true of any technology and yes, with enough time/money/resources anything is possible. Don't like what SharePoint does with Grouped Listings? You're welcome to write your own Web Part from scratch because you want the icon on the left instead of the right. Is it really worth it? I seriously doubt it.

    SharePoint is a mish-mash of technologies and comes at a price of a pretty steep learning curve. A SharePoint guru needs to know all about the product in order to really know how they can exploit it. If you don't know all the features of a DataView Web Part (and there are many) then how can you dismiss it when you're looking for a solution? In addition to just knowing the product, you really need to know Windows infrastructure, Windows Server, IIS, Active Directory, DNS, SQL Server, and the list goes on. Now you don't need a deep understanding of all of these technologies but you certainly need some familiarity with most of them (and having a good breadth with 1 or 2 topics covered in depth is a good rounding of knowledge when it comes to SharePoint).

    For example I was challenged with creating a news archive web part which allowed a user to browse all news items in the system, select a year, then filter by that year. All news items live as listings in SharePoint and you can just target the top level area to start getting listings for, recurse through them and put together your collection of information and present it. This is neither rocket nor science, at any level. However the implementation of the system was that they chose not to use the OOTB news areas, but rather created a custom area and all news items were entered manually (in a Document Library using the Web Part Page template) and listings were added manually (and then repeated on the Home Page to display the content again). This was all apparently done because someone didn't like the way news was entered and wanted more flexibility. True, you have a lot of options when you use a Web Part Page and a Content Editor Web Part, but is it really worth all that hassle? Using the built in news area and news feature of SharePoint Portal Server, it's a one step process. Click "Add News", enter your text (or link to an external news item) and save. The process the users go through now is about 10 steps involving a lot of duplication of information and manual editing of links (which can [will] lead to broken listings at some point).

    Bottom line:

    • Learn the technology platform you're working with and what it has to offer. Assume it works as expected (after all, you paid for it and it should) but do small technology spikes if it's a feature you're unfamiliar with (for example if you've never done a CAML query in code before try it before you offer that as a solution to building a White Pages system).
    • Experiment yourself before you go into the meeting to discuss what the user needs so you know your boundaries
    • Only build what you need. It's great to provide a system that has all the bells and whistles, but you'll find yourself quickly creating work for youself and makes your solution more complex than it needs to be and features that the end-user, while they may appreciate it, not really use in the end.
    • Be the customer. If a solution smells complicated to you, walk through a scenario from their shoes and if you're frustrated doing it then they'll probably be too.
    • Clearly set expectations with your customer on what they're getting and provide options (options always come at a cost but generally there are many ways to present information with OOTB features in SharePoint)
    • Get buy in from as many levels as you need and flag things early and often if they look like an oddball solution to you (which in the long run will end up costing more when you keep revisiting it to fix things)
    • Don't paint yourself into a corner and deliver a "Quick Hit" if you know you're going to be going back and fixing/rewriting/changing it entirely. While we can't read the minds of end-users, we can (if we're good enough) anticipate their needs and have alternate plans to back out if things get too complicated.
  • Hello to the Saskatoon and Regina user groups!

    I had a fun time tonight presenting (via Live Meeting, thanks to Dan!) a level 100 session on developing for the SharePoint platform to the Saskatoon and Regina .NET User Groups. It was a great webcast with a good turnout and we have an advanced session coming up on Thursday night that will get into all the nitty gritty details of Web Part Connections and Code Access Security.

    If you have a user group and are interested in having your friendly neighborhood MVP (that would be me) blather on about SharePoint over a phone call and Live Meeting presentation, let me know.

    BYOBA*

    *Bring Your Own Balloon Animals

  • Those crazy Germans and their SharePoint templates

    By way of Michael Greth, those crazy Germans they hosted the first SharePoint Conference in Munich this week with more than 500 attendees. Michael presented 15 new site templates that were created by Microsoft Partners and customers from Germany. These templates were created during a competition called “SharePointChallenge 2006” and there’s a whole schwack (is that a word?) of them. First, before you all go frothing at the mouth they’re in German. Second, some require extra Web Parts to be installed and setup for them to work (don’t worry, free ones – I think). They are however a great collection of templates for Windows SharePoint Services and again, really show off what can be done with the little tool that could.

    What’s great here is that there’s so much diversity. Bug tracking, a Library template for managing books and eBooks, CRM, Project Management (conforming to PMI standards and the Microsoft Solution Framework), Class scheduling, Travel expenses, and more. There’s even a template for tracking a football league with participant administration, play results, and evaluations. Some of these templates also have full documentation and information on their use.

    Some are very imaginative in how they are designed and you can utilize these concepts for your own needs (yes, even though they might be in a foreign language for some). So check them out here to download them. They also have a live online demo system here with each template setup so you can give them a test drive yourself. This is great stuff and I can’t stress how important examples like these are needed to show how SharePoint isn’t just a document repository. I really hope someone (not me) would put forth the effort to translate these to English (hint, hint) as I’m sure a lot of people could find them useful.

  • It's official

    Start making room for the new Microsoft Office 2007 System line of products. MS announced the “official” name which replaces Office 12 (and all the other names we’ve been using) in a press pass today. This includes Office SharePoint Server 2007 (which merges SPS and CMS together) and the new Microsoft Office SharePoint Designer 2007, which is partially based on Office FP 2003 and will be the tool for building SharePoint Web Sites. Check out the full press release here.

  • To Dispose or Close, is there a difference?

    I’m in the giving mood tonight so figured I would fire off one more post before I hit the sack. Last Summer Maurice Prather wrote an entry about when to use Dispose (and leveraging the using clause). This also led to a KB article about this, so check it out if you’re interested.

    One thing that a few people have asked me is what’s the difference between calling Dispose or Close? Various blogs mention using either but is there a difference when it comes to an SPSite or SPWeb? Yes, there’s a difference so now that you’ve decided to use Dispose/Close to dump your objects, which one should it be?

    Dispose is a virtual method on both the SPSite and SPWeb classes. That means you can override it and, in turn, call the base class if desired. Let’s say you have a complicated setup where mutiple webs are connected, or perhaps you’re calling an external web service. You could subclass SPWeb into your own class and have it handle those external connections. Then in your own SPWeb class you would override Dispose, clean up any external connections and extra stuff you have, and then call the base implementation of Dispose (which just in turn calls Close). Or you could call Close yourself in your own Dispose method. The Close method on the other hand is not virtual so you can’t override it. It’s the one that actually does the final cleanup for an SPWeb and SPSite object.

    So basically, if you’re creating your own SPWeb or SPSite sub-class (and you’re perfectly okay to do this) and have to do extra cleanup that the base class wouldn’t know about (maybe connections to a SQL database, but not the SharePoint one right…) then override Dispose, do your stuff, and call the base implementation. Otherwise if you’re just using the classes normally you can call the Close method directly.

    P.S. I would provide code for this but my plugin is broken for some reason (I blame my IE7 fiasco) but you guys are smart so you’ll figure it out.

  • TDD and SharePoint

    Chris Chapman has been blogging the past couple of days about using using TDD, NUnit, and SharePoint together. Chris follows some of the very same technique I do (or maybe I’m following him, who knows) as I have my [SetUp] and [TearDown] methods create SPWeb and SPSite objects for use in the tests (although I don’t use a base class for this, but it’s a good idea). As this is something I’m very passionate about (I’m giving a presentation about it at SharePoint Connections in April) it’s great to see people blogging about it and showing that TDD can be done even in that complicated, crazy environment we call SharePoint. So check it out.

  • Plumbers @ Work Podcast: Episode #3 - Powered by Infinite Improbability Drive

    Our latest podcast is now online at Plumbers @ Work. We’re just belting out the episodes now that John isn’t traveling the globe pimping Visual Studio anymore. Episode #3 is up and running along with an upgrade to Community Server 2.0 which has a better look and a lot of cool features (perfect for our 3 listeners to play with).

    Here’s the show notes from this episode:

    • Introduction
    • Around the Horn with the Plumbers
    • Security March with Dan Sellers
    • Microsoft Blacklisted C++ Libraries
    • SHA-1 Discussion
    • Team Foundation Server (TFS) Release Candidate (RC) 1
    • Public Release of Internet Explorer (IE) 7.0 Beta 2
    • Various Issues with IE 7.0 Beta 2
    • Development of IE versus Development of Firefox
    • The Browser as a User Experience (i.e. AJAX)
    • Really Simple Syndication (RSS) in IE 7.0 and Outlook (AKA, The Ultimate Pull Application)
    • Information Overload (AKA, Organizing Information)
    • Upcoming Canadian Conferences: VSLive! and DevTeach
    • Half-Time
    • .NET Framework 2.0 Adoption
    • ASP.NET 2.0 Adoption
    • PetShop 4.0 Discussion and Highlights
    • .NET Nuke 4.0
    • Old Microsoft Reference Applications (AKA, "Different Strokes" or "ALF")
    • Enterprise Library 2.0 Highlights
    • Windows "Live" Highlights (i.e. Domains, Favorites, and Messenger)
    • Other "Live" Projects (Office "Live" and Visual Studio "Live")
    • Windows OneCare Beta
    • The Realities of a "Secure" Operating System
    • Windows Vista Favourite Features
    • Running as Standard User/Non-Admin on Windows Vista
    • Event Viewer in Windows Vista
    • Windows Calendar (WinCal) in Windows Vista
    • What's Coming Up for the Plumbers
    • Upgrading to Community Server 2.0
    • John (and Bil for that matter) Still Doesn't Have a Xbox 360

    Running time for this show is 1 hour and 10 minutes. You can download the MP3 here on the files page (33.5 MB) as it hasn’t updated on the Community Radio at MSDN Canada site yet.

    Enjoy!

  • Followup on Setting up your Development Environment

    I stumbled across a new post by Maurice Prather over at Bluedog Limited which I wanted to comment on here (and I’ve left a similar comment on his blog). His concern was with my post about setting up your virtual development environment. The issue was regarding the part around changing “WSS_Minimal” to “Full” in the web.config file. Like he mentioned in an earlier post, this isn’t required for debugging to work nor is it a recommended practice in your shop.

    I personally use it in my own development spaces only but what I neglected to mention was that a) I have another VM which is setup with “WSS_Minimal” as the trust level and b) doesn’t have Visual Studio, etc. installed. I use this VM for testing Web Parts before I release anything to anyone for testing externally (either publically or to my clients development/testing environments). With this setup, I also have to setup the policies on Code Access Security for any Web Parts. This isn’t a trivial thing to do but it’s also neither rocket or science.

    The point of my article was about getting a development environment up and I personally don't consider it lazyiness if your dev enviroment is running full trust. Yes, if that's *all* you do then it's being lazy and maybe I've set a bad example but let's be honest here, do you really want to go through the issue of creating the web.config entry for every single web part you create? (grant you, not every web part might need that but there’s probably something you need to do for most).

    Another thing that I lean towards in this development environment is one of presentations and just rattling off a quick web part to test a technology spike. As an example, sometimes I need to quickly create a Web Part so I:

    • Create a new Web Part project
    • Write the minimal amount of code I need to get my spike results
    • Compile
    • Install with the InstallAssemblies tool

    I can have a working web part up in a minutes which for me is key when you're either showing someone something or just need a quick hit to figure something out. To spend time on CAS for a web part I’m going to throw away is probably too much time that I don’t want to waste (especially if someone else is paying for it). For me (and again, this is my preference) I would rather deal with security (and other SharePoint-y type stuff that can be fixed with configuration) in a test environment.

    Having said all that basically you should read up on Code Access Security and Web Parts as there’s a lot out there and it’s important stuff so bottom line, don’t run as “Full” trust in web.config for your SharePoint environments.

    One more thing that might make life easier (although I’m not sure yet). I finally got around to playing with CodeSmith that I picked up awhile ago. I’ve always seen it as a generation tool for creating your Data Access Layer (from a SQL or Access database) and I’m not one for code generation tools. There are some more advanced examples like the .NetTiers templates, which generates a fully commented and unit tested DAL from a database but one of the really cool thing you can use CodeSmith for is just generating repetitive code. I’ve always had to create things that are repetitive like strongly typed collections for business objects. It’s not a lot of work, but redundant and always the same thing. With CodeSmith you can get it to do the work for you (like a really uber-geeky macro). There’s also the ability to tie in a code-behind page with your template so it got me thinking that you might be able to do something like point a CodeSmith template at your Web Part (or a CAB file) and generate all the CAS entries for your web.config file automagically. Well, it’s just a theory and when I find some time to investigate I’ll see what can be done.

    In any case, thanks Maurice for this important aspect of SharePoint development that often gets overlooked.

    Note: In addition to Maurices resources on Code Access Security, Bamboo has an in-depth PDF document here on pretty much everything you need to know (including the complete set of permissions) but were afraid to ask about CAS and SharePoint.

  • BrightWork Reporter for SharePoint

    BrightWork has just launched BrightWork Reporter, a highly configurable SharePoint web part that can “roll up” data from every list and web on a SharePoint server and simultaneously display it in a view-like report. Highlights of this new product include:

    • 16 highly configurable reports delivered right out of the box
    • Ability to configure shipped reports without any programming effort and to easily create new reports
    • Facility to email, print and export the generated reports to Excel

    Click here for a 30 day free trial that includes:

    • A fully functional test drive
    • Free training and customer support
    • Access to a gallery of 34 additional reports
  • SharePoint Connections Sessions and Microsoft Day

    The SharePoint sessions of the DevConnections conference that I’m speaking at (April 2–5 in Orlando) has the schedule posted for those that want to pre-plan their time there. With some horse trading, the DevConnections guys managed to wrangle in some softies and declared the first day of the conference, Monday, to be Microsoft Day! They’re presenting a full day of sessions for each track at the conference (SQL, ASP.NET, Visual Studio and of course, SharePoint) and they’ll be a Microsoft “Unplugged” Night (don’t ask me what that means but feel free to fill in the blanks with your imagination).

    This is both good and bad news as it’s always a pleasure to see Fitz do his thing but it means they had to bump one of my sessions. I won’t be presenting “Minority Report: The Art and Science of building reports from SharePoint data” as it was the one that was dropped but hey, you still get 3 full hours of me with my other two sessions (Hard Core Logo: A Deep Dive into SharePoint Branding, and Rabbit Test: Building Unit Testing Web Parts using TDD and SharePoint) which are both being presented on the last day, Wednesday. Trust me, Wednesday is so much better than Tuesday because they have, right after my session, ICE CREAM BREAK! Way cooler than the plain old boring coffee break on Tuesday and I’ll promise not to prevent you from getting some Hagan-Daas by running over (or if things get really wild we’ll just bring the ice cream machine into the room and serve ourselves, like what are they going to do… fire me on the last day?). So if you’re not running around trying to get the last of the swag, drop by and see me and we’ll have some fun. You can download the PDF shedule directly from here.

    Also remember that the early bird registration is still available until February 16 so if you’re planning on going, register now to save $100 (okay, it isn’t much but I don’t make the rules and if you want to register after the 16th then send me the C-note).

  • Support your new Notepad MVP nominee

    No, really. I’ve been a SharePoint MVP for a couple of years now and it’s great. My award cycle renews in April and I’m looking to receive the coveted Silver Sow award for SharePoint again but for awhile now, something else has caught my eye. It’s that silly little application that everyone uses, Notepad!

    You know all about Notepad. In fact, it’s deployed to every Windows machine out there. Yup, every single machine. Let that sink in for a minute. It even can’t be uninstalled so it’s almost like Internet Explorer (but much better). It’s used worldwide and I bet you yourself have used it every day (or at least once in your lifetime). I’ve heard even Bill Gates and Steve Balmer use it whenver they right click and select View Source on a web page like Google to see what those crazy guys are up to (Bill and Steve don’t use those “enhanced” versions like Notepad++ or Notepad2). 

    What’s so great about Notepad you ask? Here are some interesting facts:

    • Notepad saves files with a .txt extension and has no formatting or styles, making it suitable for editing any file at all.
    • It can edit traditional 8–bit text files as well as Unicode (both UTF-8 and UTF-16, and in the case of UTF-16, both little-endian and big-endian files)
    • Notepad has been around since Windows version 1.0 in 1985 (it might be older than some of you out there)
    • Notepad does not require a lock on a file (like Wordpad does) so it can open files already open by other processes
    • Like Visual Studio, it already has an edit and continue feature as you just keep on going as you’re working, no mess, no fuss
    • Notepad supports headers and footers (just like Word) and you can insert the current Date and Time by pressing F5 (go ahead, try it, betcha didn’t know it was there did you?)
    • The current version number is 5.1.2600.2180. That’s a lot of builds for such a small program.
    • Notepad only uses about 4k of memory which is a lot less than Word or Visual Studio uses.
    • While Notepad is not a .NET application, it already supports NoTouch deployment as it’s installed by default.
    • Notepad fully supports the “It just works” motto by Microsoft
    • Nobody has ever reporting having to use Task Manager to shut down the Notepad process or Notepad hanging their system

    Notepad is the perfect Agile piece of software, as it only implements what it needs. No RSS feeds. No stupid tabs. No silly Ribbon or fancy dropdown toolbars. There’s no crazy COM interface or unnecessary managed code bulk, it’s just plain old good C code.

    So you can clearly see why I want to be the first Notepad MVP don’t you? I however have a quandry. A dilemma if you will. You see, you can only be awarded for one product as an MVP at a time. So much as I want to be a Notepad MVP, I would have to give up my current SharePoint MVP status in order to achieve this. This in itself isn’t a bad thing considering I would be giving it up for Notepad but I must do my due dilligence here, namely let’s compare SharePoint to Notepad to see if being an MVP in one is better than the other.

    Notepad SharePoint
    Notepad is already installed on every machine and no configuration is required. SharePoint takes about 1/2 hour to install and another 10–15 minutes to configure.
    Notepad requires less than 100,000 bytes on your hard disk. SharePoint requires 512,000,000 bytes on your hard disk
    Notepad can work with any type of files. SharePoint only supports Microsoft Office files (natively).
    Notepad runs on all versions of Windows (including 3.x and Vista) SharePoint only runs on Windows Server 2003.
    Notepad is free. SharePoint Portal Server costs $3,999 USD per server and $71 USD per device or user connecting to it.
    Notepad can be taught to anyone (including Grandma who has never seen a computer before and thinks her cordless phone is a wonder of technology) in less than 10 minutes (assuming Grandma is awake for the whole 10 minutes). SharePoint requires expensive training and sometimes, people still don’t get it.
    Notepad supports custom headers and footers when printing. SharePoint pages can’t print a damn.
    Notepad launches in under 10 seconds on practically any hardware. SharePoint launches in about 2–3 minutes on high end server hardware.

    It’s painfully obvious how much of an advantage Notepad has over SharePoint. I mean, the cost savings alone for an organization… that just writes itself.

    Of course, there’s also the problem that Notepad isn’t a recognized product for the MVP program, but as a Notepad MVP I’m willing to look past that. If you support and nomimate me to this honorary status I promise to:

    • Always push Microsoft to include Notepad on every single operating system they produce and never change it
    • Support and contribute to the Notepad Microsite where everyone can add their experiences with Notepad for everyone to see
    • Hold frequent webcasts on what’s new with Notepad and offer Notepad related swag
    • Show how Notepad can benefit your Enterprise and how easily it integrates into complex business proceses using BizTalk (Notepad is an *excellent* Xml editor too!)
    • Solicit the book vendors to write the first Notepad Unleashed book and make it available as a downloadable e-book that Notepad itself can read.

    So here’s to that old 69,632 byte program on everyone’s hard drive that we can’t do without. Here’s to the day that, like when Halle Berry accepted the Academy Award in 2003, Bill Gates will present the Notepad MVP award to me personally at the 2007 Global MVP Summit. Here’s to Notepad! The everymans (and everywomans) editor of choice!

  • The Big Dummies Guide to Setting up your SharePoint Virtual Development Environment

    Okay, so it’s a long title. And hey, this is a long post (I seem to be doing that recently) but I was struggling with VMs, IE7, and SharePoint and figured I would put this together for those that want to build their own SharePoint development environment in a stand-alone virtual machine. While it’s still basically install a few pieces of software, there’s a lot of configuring going on, extra tools you can (should) use, and a few gotchas when it comes to Virtual Machines and things like Visual Studio solutions.

    Note that this is my preferred setup. It has tools that I use and configurations I prefer. This isn’t the only way to fly and I’m sure others out there have other ways of doing this (for example developing on a Windows XP box rather than directly on a server, using differencing disks, local files, small lizards, logging chains, etc.) but this works for me and I’m comfortable with it. Most tools and VS addins are optional and totally up to the reader. Feel free to tweak these instructions as you see fit, add/remove/suggest components, or throw it out altogether.

    This is part of my bag of tricks I’m sharing with you. Please use it for good, not evil.

    Setup
    This assumes that you’ll be using a virtual server type of software (Virtual PC, Virtual Server, or VMWare). Makes no difference but I prefer Virtual PC for now as I can drag and drop files from my desktop into it. Virtual PC and Virtual Server images are compatible so you can build in VPC and use it in Virtual Server if you want. I generally give the VM 1–2GB of RAM as its going to be running everything (Windows Server, SQL, SharePoint, Visual Studio, etc.) so it’ll need it (1GB when I run on my laptop which has a max of 2GB, and 2GB to the VM when I run on my desktop which has a max of 4GB).

    I generally don’t keep source code in my VM (or it’s very temporary, say for demos) so I keep it generally on an external drive. This drive is shared to the VM as the Z:. Also keep your VHD files (Virtual Hard disk, or whatever VMWare uses) on an external drive. Mucho better performanco.

    Also this a workgroup install rather than a domain controller. Some people like having a DC running with SharePoint but I like to keep it separate. You can also spin up a domain controller VM and connect the machine to the domain through the local network later.

    Installing
    Okay, here’s the rundown of what gets installed. Some things can be shifted around in order of preference, but obviously you can’t install SharePoint before you install SQL Server. Again, feel free to move things around as you see fit.

    No detailed instructions for installing most of this (but feel free to ask for clarification on anything, as some of it might not make much sense). Just follow the wizards entering whatever information is needed and you can generally accept the defaults. Really, it’s not that complicated. Also I make things easy for development like creating a single user for everything and just giving them admin rights to the box. In a real setup you would have domain accounts and only grant them the rights they need in SQL Server. I just find having as few things possible make it easier for development (and we’ll worry about configuration later in the test/production environment).

    Windows Setup

    • Install Windows Server 2003 Standard Edition. Any edition will do, but this one works fine.
    • Install Windows Server 2003 Service Pack 1
    • Create local spadmin account on the machine. Add to the Local Administrators group. This will be used for all portal functions.
    • Create local spuser account on the machine. You can use this as a reader or contributor on your sites for testing (and feel free to create more, but I find two is enough)
    • Setup IIS. Just the basic options are needed here.

    • Remove event tracker shutdown dialog. What a PITA this thing is for development.
    • I prefer to browse to http://machinename rather than http://localhost. Add machinename to trusted sites in IE for this to work. This will eliminate the NT challenge/response dialog when you browse to the site, and all urls will be better formed.
    • Edit the command prompt to add QuickEdit. Just handy when copying/pasting things like wp part packs in the command window.

    Mail Server

    • Install hMailServer. This is a free (open source) SMTP/POP3 server that I use instead of Exchange. Lightweight and free. Alternately you can install Exchange if you really want to.
    • Add a catch all account to the mail server – admin@yourdomain.com. This will be used for any mail to/from the Portal or WSS sites.
    • Add user account – username@yourdomain.com. This is attached to the user account for the portal (or you can use admin for everything)

    SQL Server

    • Install SQL 2000. Standard OOTB install, configure it to run in mixed mode. I use SQL instead of the built in MSDE so I do testing with full text searches.
    • Install SQL 2000 SP4.

    SharePoint Install

    • Install SharePoint Portal Server 2003 without the database engine. We’ll connect it to SQL during setup phase.
    • Configure and create the initial portal. Name it whatever you want like “Development Portal”, “My Little Pony”, “Big Man Hands”, whatever.
    • Use the spadmin account name you created above for all operations.
    • Use localhost for the mail server.
    • Give spadmin email address of admin@yourdomain.com.
    • Add machinename\spuser (spuser@yourdomain.com) as reader to the portal.
    • Install WSS SP2. Have to install this before we install SPS SP2.
    • Install SPS SP2.
    • Add shortcut to 60 HIVE directory on desktop or QuickLaunch. I just find it a pain to navigate down the ugly tree anytime I need to hit the directory in Explorer so having a folder that goes directly there is handy.
    • Add STSADM dir to path in command prompt. I find this very handy so I can open up a command prompt and just start typing STSADM rather than the full path. Optionally you can install STSADMWin or whatever. I’m just a command prompt kinda guy

    IIS Configuration

    • Change WSS_Minimal in web.config to Full. This is required to set debugging=true and makes life easier.
    • Set debug=true in compilation section of web.config for debugging Web Parts

    Visual Studio Setup

    • Install and Configure Visual Studio 2003. I just select the default which includes C# and VB.NET but you do whatever works for you.
    • Copy keyboard shortcuts (so ReSharper can install, if you’re installing it)\
    • Install Web Part Templates for Visual Studio .NET. These are the templates for creating new Web Part Library projects.
    • Install ReSharper. Set the persistence to use the local drive (this is for performance of local files vs. remote). I prefer ReSharper but some like CodeRush, Refactor Pro!, and other tools.
    • Install GhostDoc. I use this for creating stub documents for APIs and Web Parts that I’ll be sharing.
    • Install TestDriven.NET. Killer app for TDD and running unit tests. Also includes NCover now. 

    SharePoint Tools

    • Copy InstallAssemblies (from the Web Part Toolkit) to server and add to QuickLaunch. You just need the EXE and I like having it on the QuickLaunch taskbar as I can just click on it and install a web part quickly.
    • Install SharePoint Explorer. Best tool for looking at what you have.
    • Install SmartPart (if you’re planning to do development via User Controls)

    Office 2003

    • Install Office 2003
    • Install FrontPage 2003

    Install Other Tools

    • TopStyle. I use this for editing CSS files but feel free to use Visual Studio (blech) or your own CSS editor (Notepad anyone?)
    • XmlSpy. This comes with a cost, but it’s worth it for Xml editing. There are some less expensive packages and then there’s always… Notepad!
    • IE Dev Toolbar. Very handy for debugging pages and poking around in SharePoint sites.
    • Notepad++/Notepad2. I prefer these over the standard Notepad.
    • Paint.Net if you plan on making your own icons or graphics. Free and written in .NET!
    • SysInternals BGInfo. I have this in my startup for the server as it shows me what the server name is, IP, and other info that is handy when you’re flipping around between machines.
    • Plus any other tools you like. Scott Hanselman’s list here is a great resource.

    Testing

    • Create a new web part using the template (Hello World or something)
    • Install using InstallAssemblies. This will add it to the bin dir and create the SafeControl entries in web.config so the web part will work correctly.
    • Add the web part to a page somewhere.
    • Run Web Part project in Visual Studio with debugging to make sure debugging works
    • Create an alert, open up Outlook Express and configure it to use your local mail server (if you installed it). You should receive an alert.

    Security and Source Code

    When working in a VM you generally do NOT want your source code to be in the VM (just in case it turfs and you can’t recover it) so I keep all my source on an external drive (rather than say the host drive as I move from place to place). I also only have it set to use Local networking meaning it can’t see out and I can’t see in (which is why I prefer Virtual PC so I can drag/drop files to the VM). This allows me to have a domain controller on the local network if I need it.

    With Virtual PC you can share this drive as a network drive letter inside the VM (my external drive is always Z:. In order to open files and not get the dreaded “the project location is not fully trusted” you need to fix security policy if you want to open files from a network drive. Google "the project location is not fully trusted" and you’ll get a ton of answers. Problem is that none of these work for a drive that is mapped into a VM. A drive shared shows up in the Intranet Zone. Bizzare huh? Means you have to trust the entire internet zone. Not a good thing. Can’t use z:\\, have to use file:// but there is no file:// for a mapped drive (because there is no server name).

    James Kovacs says to use ZoneStripper but I really don’t want to do this with each project so the technique below works well:

    • Open the ".NET Framework Configuration" utility
    • Expand "Runtime Security Policy->Machine->Code Groups"
    • Right click "All Code", and then select the "New..." item
    • Type a name in the "Name" textbox (like “VS Projects on Z:“ or something), and then click the "Next" button
    • Set the condition type to "URL" and type the following string to the "URL:" textbox: “file://Z:/*”
    • Click the "Next" button and assign the "FullTrust" permission set to this Code Group.

    This will trust all code on Z: and not display the dialog. You can also use file://servername/* but since we’re working with a drive letter here, we don’t have a server name.

    I also run regular scheduled backups of my external drive to whatever host it’s connected with using SyncToy so I generally always have 3 copies around (1 on laptop, 1 on desktop, 1 on drive) and do make weekly DVD backups of the source and CVS trees.

    Tips and the Afterlife

    • After your environment is setup, all the tools are running, and you’re happy with what you have created SAVE IT! Snapshot that puppy so you can come back to it. Some people might prefer to use undo disks but again, I find these sometimes have issues so I just copy the whole dang VHD file as an archive in case the worst happens.
    • Setup a Development Area in the Portal. Two things I do as a final step in getting things up and running on the portal. If I installed SPS then I create an area called Development. This is just a collection of sub-areas for various projects, spike web parts, whatever. It leaves the rest of the default portal setup intact as I don’t need to build a taxonomy that represents a production site or anything. If I need something like that (for example to demo what a sample navigation structure might look like) I’ll just create a new Virtual Server in IIS and create a portal off it. I keep the main portal on port 80 for general development.
    • Another thing I do is copy the STS definition and create a new STSDEV site def from this. Not much is changed in the definitions but I do go in and add a top and bottom zone to the default.aspx page. This lets me a) screw around with any list definitions without touching the default STS one and b) have some extra zones to mess with in case I want them. I also setup 10 pages in the default module which are copied at creation time. These are placeholder pages (copied from default.aspx) which I can use instead of web part pages and are ghosted so I don’t worry about them showing up in something like Ghost Hunter. Finally I create a new site called Sandbox using this config and add it to my Development section in SPS as a listing to quickly get to it. For most web parts, I develop them so they work in both a SPS area and a WSS site (unless it has SPS specific stuff).

    Okay, now go start using your portal for development. It’s complete, self-sufficient, and fun for the whole family.

    Whew.

  • What else can go wrong today?

    Yeah, it's a bad day for Billy today. Let's walk through what's happened so far to me today:

    • My VMs crapped out on me to the point where they were not usable and I had to rebuild them (bluescreen of death in a VM is pretty much a given death)
    • Spent the better part of yesterday just physically installing stuff and not getting anything done. Visual Studio wouldn't install from the DVDs. I switched to a copy I had on an external drive (that I've used in the past to install from) and it would freeze halfway through.
    • Differencing disks (yes, I went down that path to try it out) were just dying left, right, and centre. I fully believe that using a differencing disk on an external drive when you're installing software doesn't work, no matter what anyone says. It also really doesn't save me space as 1 master image = 2.5gb. 1 diff image = 4gb (because it saves the changes, it decides to save the entire swap file). 1 copy of master image with extra software installed = 3gb. I don't see a savings here.
    • Trying to move to a new external Iomega hard disk as I bought a new 250gb one to replace my 80gb one for demos, presentations, etc. Can't seem to install onto it.
    • Forgot my phone at home this morning (don't you hate when that happens?)
    • Somehow left my Outlook client running at home so now it's picking up emails every few minutes. I usually shut it down so I can access mail to my ISP via a web interface.
    • Discovered that IE7 is absolute crap (feel free to quote me on this) as a) it barely renders most web pages where there's CSS layouts involved and b) it can't render SharePoint sites worth a damn. An upgrade should at *least* do what it's previous version could do, even if it was doing it incorrectly. Now I'm hoping I can uninstall it cleanly or it's paving time.

    Yeah, it's pretty craptastic today and doesn't seem to be getting much better. Feel free to leave suggestions as to how my day can get worse.

  • Bamboo Solutions and filling the gap with SharePoint

    I’ve been checking out the various web parts from Bamboo Solutions lately and they’re pretty good. I’ll provide a more complete review of them at a later date but wanted to mention two new web parts from them.

    A common problem with SharePoint lists that I hear is that there’s no referential integrity with lists. You can create lookups from one list into another, but if you delete the lookup list, the parent just shows blank data. I’ve come across this a few times building solutions for people and it’s been a typical thing that presents SharePoint as a tinker-toy rather than a robust solution like Oracle or SQL Server. Yeah, right. You go and write a document versioning system in Oracle. Anyways, the Bamboo guys have a solution in the form of the List Integrity Web Part that enforces various constraints and performs background “housekeeping” tasks while maintaining referential integrity between SharePoint lists. Neat stuff so you can check it out here.

    Another cool thing they’ve done is created a more unified process for adding users to SharePoint. From the website:

    The User Account Setup Web Part enables users to create a user account in ADS at the same time that the user account is added to SharePoint. Administrators can assign Site Groups and Cross-Site groups along with defining ADS user attributes such as Job Title, Company, Business Phone, Address, etc all from the User Account Setup Web Part.

    Personally I think you should have your people setup in AD already before you go adding them to a portal, but then with this web part it paves the way for using SharePoint as an admin tool for people to create new users in an organization. I’m not convinced 100% that this is really what you want to use SharePoint for, but it may fit some peoples agendas.

    So drop by and check these guys out as their stuff is of good quality, reasonable price, and works as advertised. Their main site is here and their storefront where you can download 30 days trials for most of the web parts can be found here. Enjoy!

    On a side note, I do notice that there are many gaps in the SharePoint world that third-party companies and individuals have to step up to the bat to fill. I don’t know about the Outlook, Excel, and Powerpoint worlds but it seems people are always asking for features that are not available OOTB but can be accomplished with some extra development work. Maybe it supports the notion that SharePoint is an application development platform rather than an application, but it is frustrating when people ask to accomplish something and are forced to download (or even purchase) external tools or web parts to get the job done. I’m all for capitalism and hopefully we’ll see more base functionality with the next version but in the meantime, keep those thinking caps on and keep pushing us to fill in those gaps.

  • Monday Morsels

    A few tidbits of non-original thoughts this morning as I teach the new cat (we named him Xander) how not to wake up Daddy with his claws buried in my chest at 4 in the morning.

    The SharePoint Show has launched and looks (well, sounds) pretty good. It’s an independent audio show (read: podcast) all about SharePoint (and in English too, Michael Greths podcast is great by my German is so rusty he could be podcasting about the latest bratwurst recipe for all I know). The launch site has a good amount of content for it’s first day so why not drop by and give it a listen.

    Fitz comes out of his rabbit hole and has a nice lengthy talk about WSRP, Web Services for Remote Portlets. This was a standard that formed sometime in the last year or so and there was some buzz about it but it quickly died out. Fitz comes back with some highly technical architecture diagrams explaining it and the benefits. You’ll see a lot more of this as Office 12 kicks in.

    Finally I see our newly awarded MVP, Carlos Segura Sanz, has posted a modified doclib schema with folders in a regular view. It was only a matter of time someone did this but his solution shows a doclib with folders in a view that gives you a sort of tree view of the library (but without using Explorer view which we all know is evil). Very nice and simple for those that are still clinging to their folder structure and want to see SharePoint behave like Windows Explorer. Check it out here.

    I’ve added a copy of things to the site here that may (or may not) make life easier for you, the weary traveller. The site feed can now be consumed via Feedburner here. Not really sure what benefit that has over the normal .Text Xml feed but whatever. It does put a nice graphic on the home page showing me how many people are subscribed (a whole 2 at the moment, but don’t worry as I won’t hold a small intergalatic animal hostage to bump that number up). There’s also a Google guestmap that you can pin your name somewhere on the map to let everyone know where you’re from. Again, I have 2 people on this (including me) but it’s fun. Check it out on the left hand side under the map. Yeah, my sidebar is getting pretty full with a lot of silly internet tricks. Let me know if it’s really annoying and I’ll take it down but I figure I might as well fill up the space.

    Looks like VMWare has it’s server software up and available for download so go forth and be free in the virtual world.

    Oh yeah, Rory finally got it up last night so check out the new TinyThings site running on dasBlog and download the show 10,000 times to free the Ewok.

  • A New Hope

    It is a period of blogging war (and a slow weekend). Rebel MVPs, striking from a hidden base somewhere on the internet, have won their first victory against the evil Crusader Evangelist. During the battle, MVP spies managed to steal secret plans to the leaders ultimate weapon, the COMMUNITY SERVER, an online web application framework with enough power to host 10,000 downloads at a time. We have observed the Crusaders forces as they try to upgrade their so called COMMUNITY SERVER to the latest version. Apparently the upgrade has hit some snags but we have discovered through intel that they are now meeting with a deep operative codename “Grandma”. We believe this person to be the mastermind behind the entire Ewok Adventure and feel that after this meeting, our MVP spies will be in position to carry out the second part of our rescue attempt and release our captive brethren.

  • Episode I - Infiltration into Tiny Things and the Rescue of the Ewok

    It all started so innocently. Rory Blyth and his so called “TinyThingswanted some attention. Wanted some traffic. Wanted somebody to love.

    Then he succumbed to the dark side. The dark side where fear leads to anger. Anger leads to hate. Hate leads to page hits. Unfortunately, as there are always casualities in war, Mr. Byth took it upon himself to capture and is currently holding an unnamed Ewok against his will.

    That was the last straw. I have put together a top secret covert operation comprised of a band of the top MVPs to rescue the little guy. As Solution Architect of the dastardly deed, I went ahead and drafted together the blueprint for the rescue mission. Please review it below in order to prepare for the mission.

    Click to see full plans

    I only hope that we’ll be in time to rescue the poor little Ewok.

    In the meantime, please visit Rory’s TinyThings site and check out his cool podcast about that stuff you keep in your pocket (no, not THAT stuff, the OTHER stuff like PDAs and electronic doofers).

  • Letting the (client) cat out of the bag

    So according to Patrick, we’re now allowed to openly blog about Office 12 client products (Word, Excel, etc.) which is great. This was also mentioned on Josh’s blog and Ed Bott’s blog and Josh confirmed it with a Micrsoft PR guy. We’ll still have to wait on the server products (namely SharePoint and Windows SharePoint Services) but hopefully that’ll come shortly (if this is any indicator). Odd but it seems some of us MVPs are that last to know this stuff (meaning that I end up reading other peoples blogs to discover it). I guess because I’m not an Office Client guy I wasn’t on the “in”. In any case, let the floodgates open and watch for all the cool things to come.

  • Free as in beer for VMWare

    Nice way to start the weekend off. Maybe by now you’ve seen the news (I caught it through Roy Osherove’s blog here) but on Monday, VMWare is releasing their GSX server for free. Yup. Basically it’s the same as Virtual Server that you can get from Microsoft (except it costs a lot less). Like Roy, I too am using Virtual Server (well, flipping between Virtual Server and Virtual PC) and it comes with my MSDN subscription so I use it for all my development, but there are a lot of features that VMWare has that Microsoft doesn’t.

    Anyways, the link to where you can download it will be here (not active yet, probably will be on Monday) and you can catch the CNET news article here.

    Might be a good time to consider a switch if you haven’t already made that purchase of the Micrsoft product. Take a look at VMWare has to offer. After all, free as in free beer is good isn’t it?

  • SharePoint as an Application Platform

    I love the internet. The community factor is what makes it stand out and drive us forward and see things in a new light (well, at least for me). Tuesdays post on comparing DotNetNuke and SharePoint was about the features each offered. In that post, both Rob Howard (Community Server) and Shaun Walker (DotNetNuke) made some interesting comments.

    Rob corrected me about Community Server:

    DNN and SharePoint are both portals - we (Community Server folk) are not positioning Community Server as a portal. Rather, Community Server is a platform used to enable community applications. We just had a team in Redmond last week at a SharePoint lab. Furthermore, Community Server has been designed, architectually, to scale out; easily supporting multi-server environments as well as the ability to off-load search (we actually offer an Enterprise Search in 2.0) that is completely file system based. Community Server is designed to empower sites such as www.hive.net and blogs.msdn.com.

    Shaun Walker posted a couple of messages about DotNetNuke:

    DotNetNuke is not a portal. DotNetNuke is a Web Application Framework. You can use the services in the framework to build portals, but you can also use them to build many other types of applications including standard ASP.NET web applications, community sites, intranets, extranets, and vertical market application service provider ( ASP ) applications. In reality, it is a rich service layer on top of ASP.NET which eliminates much of the mundane coding required to build a web application from the ground up

    This really gets my noodle cooking as it starts to question what we think of as a web application, a framework, and a portal doesn't it?

    Rob Howard said that CS was a framework as well, and you could build web apps from it and basically leverage what they've already done in CS. Saying DNN is a framework isn't any different than saying WSS is one, or SPS (although zealots will argue that WSS is the framework/platform and SPS is the product).

    I mean I can build a web app inside of SharePoint and leverage all the features it has. I can ignore the default.aspx page that comes with a site definition and completely create my own (in fact I can create lists and everything else programatically and not both with xml). For example if I don't want to use SQL database tables to store my app data, I can create everything using lists and just never expose the interface to the user. And if lists are too restrictive (no referential integrity, size limits, performance, etc.) I can still use my own table for some of these things (after all, SQL is available to me in the infrastructure). My web application can be just a bunch of web parts that read and write to SharePoint lists and render out from a single Default.aspx page. In fact I could build DotNetNuke (with less code) using SharePoint (which is odd if both of them are a framework).

    The problem is (with SharePoint, DNN, and CS) is that you would have to really do a LOT of customization to any one of these "frameworks" to build a vertical market application, at least if you took the subtractive approach and tried to build something by removing what you get OOTB. I agree that it is a rich layer on top of ASP.NET but it's not much different than any one of the vast number of UI tools (Infragistics, etc.) that enhance say DataGrids and Web Forms with additioinal functionality. Sure, these are enhancements to base controls in the .NET framework rather than consuming services but it could be considered mincing words. With each of these come restrictions and I'm sure (although I haven't looked) I would have the same with DNN if I tried to build something other than a DNN site with it.

    Maybe I'm wrong but we seem to get back to say ASP.NET 2.0 with all it's features (membership, roles, web parts, master pages) can provide what we need, so what exactly are you really getting from any of these other services? Grant you, if I want to have say alerts sent to me when an item is updated in a document library, the SharePoint services handle that for me. If I was building in ASP.NET 2.0 I would have to have my own component doing this (and something to store the documents, etc.). The same for DNN as it provides some services you can use, but again to build say an eCommerce application on top of SharePoint/DNN/CS is a lot of work (grant you, less work than building it from scratch but still no walk in the park).

    Windows SharePoint Services, the foundation piece that provides structured lists, notifications, search, etc. is something that can be leveraged as a platform to build web applications from but most people don't see it that way (the same way most people don't see DNN or CS as anything but a community site or set of forums). I think that's the sweet spot we can get to where you can leverage these things as services so rather than building a new Web App in Visual Studio, why not have a new "DotNetNuke Application" or "Community Server Application" or "Windows SharePoint Services Appliation" as an option? Ahh, the lightbulb comes on.

    I think the DNN Starter Kit that they've built with version 4 starts down this path. So why not say have a new item in Visual Studio that addresses this for SharePoint. I'm not talking about building a new Web Part as we have that template, but something bigger. Imagine starting up Visual Studio and seeing "Windows SharePoint Services Application" in the list of C# Project types available. This would a) create a top level site on a server running WSS b) create a new project for you with a default.aspx page, much like what you get with creating a new ASP.NET Web Application c) add new items to the system like Web Part, Web Part Page, etc. Now that would be a web application framework.

    However it does pave the way for looking at WSS, DNN, or CS in a different light and rather than building little doofers that connect to each other, what we might be missing is the glue that binds it together. Actually, we've had the glue all along, we just need to repackage it so it's more useful.

  • InfoPath 12 web and mobile forms

    Like the SharePoint team finally did, the InfoPath team has stepped up to the plate with their first blog entry on the next gen for form entry, InfoPath 12 (okay, so it’s a codename the real name will be known soon enough). For some of us this is old stuff but for those that haven’t seen it, InfoPath 12 will deliver the same rich client experience forms you get today but in a web browser. Nice.

    What’s really slick is the additional platform of targetting mobile devices (as seen above). This really opens up the possiblities for doing some seriously cool stuff with forms.

    Forms that live in SharePoint form libraries.
    Forms that can be delivered to your mobile device.
    Forms that can have workflow attached to them.

    Yeah, that just plain rocks.

    Be sure to bookmark the teams blog here or subscribe to their feed here with your favorite aggregator (go ahead, click on it you IE7 guys, I know you wanna…)

  • DotNetNuke vs. SharePoint, the big showdown

    I’ve been meaning to do this blog for awhile and it’s a long one so better get a fruit flavored drink of your choice and curl up on the couch with your laptop for this one. Sorry, I do apologize for the rambling (and length) as this post has now encompassed a couple of hours of my time and I’ve been bouncing up and down the text like Tigger on crack. Caveat lector.

    Terminology

    One thing I want to stress as I go through this posting. I’ll use the term SharePoint throughout this post but it really will refer to both SPS and WSS capabilities. I’ll also use WSS and SPS where I talk about specific features so just keep that in mind as you fall asleep halfway through. Also note that most of this article discusses the current version of DotNetNuke (3.2.2 and 4.x) and SharePoint (SPS 2003 and WSS 2.0) but there’s mention of the v-Next flavors of SharePoint that will be coming with Office 12. I mention these because in some cases, they do level the playing field and create almost exact setups from what DotNetNuke has (for example with membership providers). So it’s a little hard to draw the comparisons without talking about it, but I’ll leave it as an exercise to the reader to draw your own conclusions given all data points. Hopefully it won’t be too confusing.

    DotNetNuke

    Microsoft introduced ASP.NET and people saw the potential, but they’re not completely sure about how to leverage it. Do we just rebuild our “classic” ASP apps using this new tool. What can we really do with it? Up until this point, anyone building a “portal” application would have done it manually. You all have done it because I’ve seen it time and time again. Corporate intranets built from ASP or even ASP.NET from the grass roots. I’ve even seen “web part” like implementations long before there were these funny doofers that people could drag and drop on web pages interactively.

    Enter DotNetNuke. The amazing ASP.NET portal that spewed forth from IBuySpy. Okay, a super brief history lesson. Microsoft puts together a “portal” application to show off ASP.NET and it’s called IBuySpy, a fictional shop for purchasing spy type products (x-ray glasses, hidden microphones, that sort of thing). This app has a few key features showing off ASP.NET like being able to dynamically add “modules” to pages creating content, hide visibility based on membership, and provide simple site navigation (without having to manually edit pages to do any of this). IBuySpy is a starter kit and lets people build off it to create their own storefronts and portals. Life is good.

    December 2002 rolls along and Shawn Walker forks the code, creating a VB.NET implementation with a few enhancements, and dubs it the IBuySpyWorkshop. The development community starts to froth at the mouth (as we often do with cool things) and thousands of downloads ensue (think Slashdot effect). It’s an immediate success and eventually evolves into it’s own product which is then renamed to DotNetNuke (this is a brief history, for a more concise one check out the DotNetNuke page or Shawn’s book). Since then, a few other forks have appeared all based off the IBuySpy codebase including Rainbow, etc. and I’m sure there are others. In any case, it’s a big hit and has some great features. Both DNN and SharePoint have a vast number of features where they align, and some other areas where they don’t. Let’s take a look at some of the differences and similarities and what makes each stand out.

    Modules vs. Web Parts

    A rose by any other name would be the same. Okay, so that’s not the quote but it works for me. DotNetNuke calls them Modules, SharePoint calls them Web Parts. They’re essentially the same thing. A .NET assembly (or assemblies) that makes up the logic and presentation for a function that can be placed anywhere on your portal.

    A SharePoint Web Part, just like a DNN Module, is a component that can be used in a site. In DNN you add them to pages, in SharePoint you add them to Web Part pages. Same concept as they offer positioning, personalization, minimize capabilities, etc. DNN has a few extra baked in features that a SharePoint Web Part could use like RSS feeds, custom containers, and a print capability. Again, in vNext RSS is built into the entire system so your SharePoint Web Parts will now be subscribable, much like DNNs modules today.

    The big advantage that SharePoint has over DNN is that DNN modules can only be used in DNN. SharePoint Web Parts can be used in other systems that use Windows SharePoint Services as a foundation (Small Business Server, Project Server, etc.). While you can’t use all Web Parts everywhere, if it works in WSS it will probably work in SBS. This feature actually becomes even more of an asset with vNext as ASP.NET Web Parts can be used in both ASP.NET apps as well as SharePoint sites so you’ll be able to say expose a data source in a business application and (depending on the codebase of course) drop it onto a SharePoint page without hassle. Again remember that this is all very dependent on how you build your Web Parts but I don’t see DNN modules being used anywhere but DNN, even with Version 4.x that is built on ASP.NET 2.0.

    Having played my SharePoint Web Part card, I have to say that adding modules to DNN is a snap with it’s Private Assembly (PA) approach. Basically you package up the Module a certain way and a Host can upload it and make it available to any or all portals running under it. This is all done at runtime without the system going offline (which includes adding new tables to the database, etc.). This is great although I’m sure you could exploit this with a rogue module. Compare this to the fairly daunting task of a) adding an assembly to the bin directory or GAC b) adding the SafeControl entry to the web.config file and c) potentially doing an IISRESET or recycling the Application Pool. Now if someone were to build a “Upload Web Part Web Part” that would be something (hint, hint).

    I won’t talk about developing Modules vs. Web Parts as I get into it below but it’s all very similar from a conceptual point of view (ASP.NET, User/Server Control, yada, yada, yada)

    Core Modules

    DotNetNuke provides about 25 core modules. These are available out of the box and ready to put onto any page by an end-user. The later releases (3.x and up) came with templates and a wizard to walk you through applying a set of pages and skins to your site immediately. This is very similar to a site or area template in SharePoint. SharePoint provides a stock number of list and document library templates along with a set of instances of these (based on the site template you select).

    You might say DNN has more modules than SharePoint does but if you look at the DNN modules most can be achieved with a custom list and perhaps some custom views tossed in for good measure:

    Feature DotNetNuke SharePoint Notes
    Announcements Built-in Built-in Very similar but DNN offers the ability to add the date display to each announcement. Could be done with a DataView Web Part in SharePoint
    Banners Built-in N/A Could be achieved with CEWP but not native. Could not accomplish banner rotation without either Java Script or custom Web Part
    Contacts Built-in Built-in SharePoint wins out on this as it provides many more fields and can link to Outlook.
    Discussion Built-in Built-in Both are very similar. Flat and practically useless for threaded discussions. DNN has a new core Forum module which is more like what traditional forums should be.
    Documents Built-in Built-in Similar but SharePoint provides Office integration, versioning, and check in/out features that DNN doesn’t have.
    Events Built-in Built-in Very similar as both offer list and calendar views, reoccuring events, expiration, etc. SharePoint provides Outlook integration with the ability to create a meeting workspace for an event.
    FAQs Built-in N/A Could be done as a custom list but would need a DataView Web Part with Java Script or grouped views to do expand/collapse features that DNN has.
    Feedback Built-in N/A Could be done with CEWP, Form Web Part, or a custom list but no email integration like DNN has.
    IFrame Built-in Built-in PageViewer in SharePoint. CEWP can also link to content via a URL.
    Image Built-in Built-in Pretty much exactly the same.
    Links Built-in Built-in DNN has more flexibility around ordering and presentation of links but could accomplish similar things with SharePoint with some customization (not coding)
    Newsfeeds Built-in N/A Requires third party web part but can be accomplished with Xml Web Part and XSLT file.
    User Account Built-in Built-in Different access and presentation between SPS and WSS but similar to user account. Since SharePoint is using values from Active Directory rather than a custom list or database, not as much editing capability as DNN has.
    Text/HTML Built-in Built-in CEWP in SharePoint. Pretty much exactly the same as DNN.
    Members Built-in Built-in DNN has more features like last member logged in, current users, etc. SharePoint is generally just a list of who’s a member of the site.

    It’s not an exact match, but it’s close and I would say each has advantages and disadvantages. An adventurous soul (not me, I have way too many projects on the go) might put together a custom SharePoint site template complete with the custom lists that DotNetNuke offer in a default DNN setup. There’s really no magic here although there some core DNN modules that you don’t need or have with SharePoint (like a login module). For the others, a custom list would pretty much give you similar functionality.

    Putting on my DNN hat, I could say that you could add custom modules and perhaps tweak the codebase of DNN a bit to provide similar (but not 100%) funcationality of DNN that SharePoint has. After all, some of the Office 2003 integration is just done through ActiveX controls so nobody says it’s a “SharePoint” thing (for example, I’ve used the Address Book feature on a standard ASP.NET app before).

    The only true gem that stands out here is the Office integration that SharePoint provides today and that may be compelling enough if you’re a MS shop and deal a lot with Office documents and Outlook contacts. You would probably have to go a long way with modifications to DNN to provide integration to Word (if that would be possible at all) and enable Word to check in a document to DNN (not saying it’s impossible, but certainly not a simple task).

    Visibility

    This is the primary feature in SharePoint that is missing today. In SPS we have Audience targeting and some security features to hide areas, but more often than not (and especially in WSS sites) the user sees more than he should. This is called Security Trimming, only show the end user what he can do and don’t let him get 5 steps into a Wizard only to tell him he doesn’t have access to complete the process (man does that bug the crap out of me).

    Anyways, in DNN we have the ability to target modules to roles or inherit the pages security settings (which can also be targeted to roles). There is no individual user targeting here, so you have to define a role and assign that role to a user for him/her to see (or not see) a page or module. It works quite well and is vastly used on systems where clubs present information to members only, but the general public gets a different view until they register or otherwise are granted access.

    Security trimming is there in SharePoint vNext (finally!) so again, the playing field is level.

    Custom Look and Feel

    This is a tough one but I have to give it to DotNetNuke as the winner (for now, see note below).

    DNN uses something called Skins, very similar to Themes in WSS or using custom CSS files in SPS. However DNN Skins go one step further and let you design the layout of the page, including pulling in modules and controls (like the current date/time and a login control that shows who the user is or a logout button if they’re already recognized). Building a Skin for DNN is pretty basic and can take anywhere from a few minutes to a few hours (depending on how complex you create it). The great thing with DNN is that it uses the skin for every page in the system (primarily because the architecture of DNN runs off a single page). In any case, you don’t get the level of granularity in Themes vs Skins and frankly it’s easier to create a fully customized Skin in DNN (I built the WSS Skin for my personal site in about an hour).

    Of course, we have to talk about SharePoint vNext as it fully utilizes ASP.NETs Master Pages so basically once that hits the streets, all bets are off. Apply a master page and instantly, Bob’s your uncle.

    Infrastructure

    You really can’t compare the two products on this level as SharePoint scales out to gargantuan sizes (Microsoft itself runs SharePoint for internal teams and has something like 250,000 team sites worldwide). Yeah, DNN is for hobbyists and in some cases can be used for corporate intranets, but I would want to try to scale it out to run the likes of IBM, Boeing, or NASA. A small corporation with a few hundred users, why not?

    However as far as hardware goes, you can really only scale DNN out to 1 web server and 1 SQL server. There’s really no features like Enterprise Search, Single Sign-on, or separate indexing like SharePoint has so that’s the limit from an architecture point of view on DNN.

    DNN provides many of the infrastructure items that ASP.NET has. For example logging. DNN provides a mechanism handling vendor ads and ways for them to pay for it. DNN also provides mechanisms to handle subscriptions so that users can access premium areas of the sites. You have to build these items for yourself in ASP 2.0 (again, it’s not difficult to build this, but does require “work”).

    The best part about DNN is that a normal user can actually use it to add/edit/delete content out of the box. You can give them a demo and turn the mundane tasks over to them. You can accomplish this with SharePoint as well but for some reason a lot of people seem to scratch their heads at SharePoint. Maybe I’m just dealing with the wrong people.

    Community

    You would probably agree that the DotNetNuke community might be bigger than the SharePoint one (or perhaps more/less mature). Maybe this is true as there are literally thousands of DNN sites out there running eCommerce sites, club sites, and personal home pages compared to probably hundreds of SharePoint sites. This might be a result of free vs. $$$ for extranet licensing along with some other factors. I would say finding SharePoint vs. DNN content is about a wash at this point.

    As far as Modules and Web Part availability go, this is a pain point for me. SharePoint has it’s fair share of commercial vendors. Guys like ADVIS, OmniSys, CorasWorks, etc. are founded on building extensions on top of SharePoint. As for DNN vendors, there are a few with most of the modules coming from SnowCovered (a reseller) however most that I’ve found are poorly documented or just hacks that someone has put together to make a few bucks (yes, I’ve purchased modules from them just to test these waters but I’m not saying all vendors are like that). That’s the problem I have with DNN modules. There’s a ton of them out there, but they all seem to do very similar things and some are completely unnecessary. For example there’s a Google AdSense module. However with AdSense, you get the HTML code you need for it so you can just slap it into Text module in DNN or a CEWP in SharePoint. I find most DNN modules don’t really add much value or function, but on the flipside they’re usually pretty inexpensive. On the other end of the spectrum, SharePoint Web Parts generally go the distance with replacing built-in functionality (like Ontolica’s Search) and really increasing the functionality of your portal, but this comes at a hefty price usually pushing up into the hundreds if not thousands of dollars.

    Maybe what bugs me more is the fact that I have to register on every freakin’ DNN site out there to get a demo of some module (or a free download). Believe me, I have hundreds of DNN sites that I’ve registered on just to see what they have to offer. Maybe I can’t blame the product for that as people can choose to leave their modules open for download without having to register, but then they lose the tracking feature.

    This might be a sign of things to come should there be an influx of WSS v3 sites and user registrations with the new ASP.NET 2.0 providers so we’ll see where that goes. Come back in a year or so and let’s see how many SharePoint sites you’re registered on.

    The other pain point is Skins and Themes. I’ve stumbled across maybe a dozen or so free Skins for DotNetNuke (with only a handful of them being any good) but there are some vendors/individuals who offer up custom Skins for a price. The SharePoint fence isn’t much better with probably the custom Themes Shane put together a few months ago being the best offering I’ve seen in a long time. So why don’t we have a repository of SharePoint Themes (well, WSS Themes technically) that are as plentiful as these Web Template sites that I get spammed about wanting to sell me thousands of site templates for a few dollars. That’s just not right.

    ASP.NET

    The question of ASP.NET 2.0 might come up in discussion as we compare these two creatures. In 2.0 I can drop a DataGrid on a page, bind it to a business class with my ObjectDataSource using Generics, have it fire on select, update, and delete methods and write a little code to make it work (and by little, I really do mean little). Toss in master pages, web parts, and themes and I have pretty much what both DNN and SharePoint have to offer. So why would I use either?

    In some cases, it makes sense to build something but think about what SharePoint gives you. I can create a list without having to have discussions with my DBA and model my system. I can have grouped views of the information and publish it in varies ways. I can even consume those services and present them a completely different way (say as a lookup field in an InfoPath form). In other words, I can do a lot of the heavy lifting that I would have to do in ASP.NET 2.0 but without having to do it, if you get my meaning. Same as DNN (except substitute “Modules” for “Web Parts”).

    There are compromises here as a SharePoint list or a DNN custom module doesn’t have robust referential integrity nor can it easily talk to my legacy application and make calls to an SAP API without having to write all that stuff. Those compromises are what software development is about. Buy vs. Build and all that. If I already have something that can come pretty close to what I need, why build it. If I can extend what I have (like write a Module or Web Part to talk to my legacy system) then all the better.

    So rather than starting with a completely blank page using ASP.NET 2.0, you can start with a blank site or portal then extend it to meet your business needs. Its the foundation that these frameworks already provide that will enable you to hit the ground running. Who really wants to code a “Feedback” page or “Members” module/web part when you can simply add one dynamically. Grant you, some people will say that they can just download someone’s User Control and drop it in, but then are you now just not getting back into building your own Portal? In the end you’ll find that to be a much easier model to sell in terms of productivity to leverage what you can get for free (although there is a steep learning curve with anything and SharePoint or DNN is no exception).

    Development

    Which is a good transition into development. Both DotNetNuke and SharePoint are .NET based so both use Visual Studio as an IDE to build from and the framework to build on. As much as we all bitch and complain about how hard it is to create SharePoint Web Parts, personally I find DotNetNuke that much more complex. Take this Code Project article for example. It’s entitled Creating a DotNetNuke Module - For Absolute Beginners! The article is MAMMOTH and contains about 30 steps just what seems like a simple Guestbook module together. Wow. What a faceslap to the “simplicity” that DotNetNuke is supposed to be about. From a user perspective it’s good, but from the development side of the fence it’s madness.

    One users experience was documented here on installing and setting up his environment. Grant you, he mentioned that he didn’t completely read the instructions and if you do follow the 35 page manual that Shawn has put together it (mostly) works. The thing is that this is 34 pages too long. When you actually have an template in VS2005 to create a module for you, why is it still so freakin’ complicated to get it up and running? To be fair SharePoint has it’s issues but they’re generally more specific like Code Access Security but to get a Hello World Web Part put together for SharePoint takes about a page (and that’s writing it up for Dummies to follow IMHO).

    I mean, yes, we as SharePoint developers scream about how difficult impersonation is and how some APIs don’t work right or are not documented correctly. Yes, it’s an ugly world we live in and sometimes a PITA but nothing compared to the steps in this article. And this isn’t the only article or approach. I’ve gone through the official document and module creation and the Code Project article isn’t over complicating things. It really is that immense. For a SharePoint guestbook you could just create a list, modify the fields and if you really, really, really wanted write a Web Part of all about 50 lines of code to present the guestbook (you could probably just slap together a DataView Web Part in FrontPage with no code and call it a day, but let’s compare apples to apples here). Feel free to challenge me on this, but as far as developing DNN Modules vs. SharePoint Web Parts goes, even writing out HTML in code is better than the hoops you have to jump with DNN.

    I can hear the OSS zealots out there now. Oh but DNN is Open Source (=good) and SharePoint is Microsoft Closed Source (=evil). Personally I think this is a non-issue. If you seriously are looking to sell someone don’t try to pitch them on the fact that you can crack open DNN and start making modifications whereas you can’t with SharePoint. Trust me, it’ll take more time to “add” a feature to the DNN codebase than its worth. There’s also the discussion around learning from DNN but I’m not very happy with how the codebase has evolved and frankly from some peoples experiences (and mine) just from building the codebase or trying to build a module for it, it seems to be a result of over-engineering and many extra unnecessary layers. It’s not to say SharePoint isn’t similar but SharePoints implementation of tables inside tables inside tables are presentation problem, not architectural issues.

    If you really want to learn from something like this, get Visual Studio Express and install the Personal Web Site Starter Kit or something. Less code, similar functionality.

    Bottom Line

    DotNetNuke has it’s place. SharePoint has it’s place. Both are great at what they do and they seem to overlap in some areas, while completely living in their own space in others.

    Currently. If you want an externally facing website where you want the standard message boards, blog, calendar, feedback, and files (and users can optionally register online), then I would say DNN is for you. CommunityServer has some of these and the latest beta looks like it’s approaching something usable like that as well however I haven’t seen a lot of add-ons for CS (or the add-ons were bastardized patches, much like how there are add-ons for phpBB to turn it into something other than a forum). The CS community isn’t as expansive as the DNN one is either as it hasn’t been around as long. You could probably do well with either if you’re looking for a simple community site for say a club or something but DNN does feature more modules (at a cost as you can see above) and more extensibility than CS does so if you’re planning to go beyond the OOTB experience, you might be better off with DNN.

    As for DNN vs SharePoint, it’s a toss up. There are both pros and cons to each. In the current incantation, you need Active Directory behind SharePoint but that changes with the next version so you can go to a more “register and login” model like DNN has.

    I think the Private Assembly feature of DNN is killer in that I can download/write/purchase a module and have it on my site in minutes without asking an IT guy to reset IIS or modify a web.config file for me. That alone sets DNN apart from SharePoint right now. Again, however, the feature system of SharePoint is going to allow this kind of approach but I don’t see it getting as simple as DNN is today.

    Like anything, choose the right tool for the right job. Obviously DNN isn’t as scalable as SharePoint is and it can’t search file shares, web sites, Lotus Notes databases, etc. but then it also can’t be setup and running on an external web host where you don’t have console access in 10 minutes like DNN can.

    Choose, but choose wisely.

    Also be sure to check out Richard Dudleys post on DotNetNuke and SharePoint here as he puts together a good summary. His place is generally DNN for extranet, SharePoint for intranet. I would agree for the most part and it’s a good rule of thumb to follow if you’re into that sort of approach.

    Update: Come to think of it and reading over Richard’s blog post again he really does touch on the main points I listed here (cost, Office integration, authentication, skinning, etc.). He just does it in a much more compressed and easy-to-consume-in-one-sitting read. Kudos to Richard.

    OOTB: Out of the Box
    CEWP: Content Editor Web Part