Attention: We are retiring the ASP.NET Community Blogs. Learn more >

Fear and Loathing

Gonzo blogging from the Annie Leibovitz of the software development world.

  • Project Catchupalooza 2006

    So here it is, 2006, and I'm already behind. Well, to be fair I'm behind from projects I started last year but hey, that was a year ago so what's the delay? Anyways, here's a rundown (with some links to the original blogs that started them) of projects I have on the go SharePoint wise. Yeah, not much of an eye-popping information-packed blog but sometimes, just occasionally, people need a break from me.

    SharePoint Builder
    SharePoint Builder is my visual Xml editor for site definitions. It’s got a large beta group that is anxiously awaiting a release. I just have to sit down and get it out to everyone. One of the first projects to be added to my SharePointForge site to call its home.

    SharePoint Wrappers
    This set of .NET wrappers provides easy to use objects to access SharePoint information remotely (via Web Services). Uploaded to CVS so anyone can grab them anonymously, I have some updates to do but there hasn’t been any projects using it or needing the updates so it’s been on the back burner. Still, I think it’s a good resource as many people want to do something with SharePoint but can’t use the Object Model (because it’s for a remote web site or desktop app) and don’t want to fiddle with SharePoint Web Services. Will get to update this but probably not until sometime in February.

    SharePoint Template Project
    Another SourceForge-soon-to-be-moving-to-SharePointForge site. This is really two things. First, a framework to distribute templates for SharePoint and a way to get them out to the end user. There are a few templates that people have asked for but couldn’t produce that I’m making for them and others that people have offered me to include in this project. Not sure how this is going to shake out, but there’s some interest. Another project that will come sometime in February as some of the others on this page take precendence (I am only a one-man show you know).

    SharePoint Admin Host
    This is a small project that I built which allows you to write Plugins for SharePoint to basically do anything against a site or set of sites. A call for plugin authors went out and SDKs are being sent out. Another project to be hosted on SharePointForge and makes use of my SharePoint Wrappers to enable you to build desktop SharePoint applications.

    SharePointForge
    My one-stop shopping spot for SharePoint development projects. Basically a home for the homeless. Up and running but not all the hidden wires are revealed so the shop isn’t open for business yet, just the storefront is dressed for people to come by and say “I should come back here again later”. In the works and should be public in the next week or two. 

    DotNetNuke Skins
    I have a set of DotNetNuke skins that basically let you skin your own DNN site to look like any of the OOTB SharePoint themes. I’ll probably put these up on my personal site but still some work to do there as I figure out permission issues. Also have an Office 12/SharePoint V3 skin but I can’t release that until after the public betas (coming soon).

    Might be a couple of other projects (I have so many things kicking around) and I juggle working on them them between custom web parts, sites, templates, tools, HOWTOs, etc. (some say I have ADD) in my spare time. No, I don’t sleep. Why sleep when you can have this much fun!

    BTW, I’m blogging this post with a tool called BlogJet. It’s a desktop doofer that Scott “The Toolman” Hanselman (and a raft of others) push and let’s me do blog entries on my desktop, then upload it to the site. What I really like is that it’s an offline tool. So many times I’m blogging on the weblogs.asp.net site and have to keep saving it and coming back to update it. Yeah, I could use another tool to do it offline but then there’s issues with formatting, image linking, blah, blah, blah. BlogJet is cool because it gives me my full screen to work with and now has Flickr support so I can just upload my screenshots to Flickr and link them visually into my blog.

    Very nice so another tool I’m purchasing and adding to my offline setup directory. I keep a setup folder on an external Iomega 250GB drive that I can easily hook into a new machine after getting the OS up and running. It contains all the setup programs that I use so I update it from time to time with newer versions and burn a DVD on occasion just for backups. Makes for setting up a new drive very nice. I still have to sit down and do something geeky like create an installer that will automatically give me a menu of choices so I don’t have to run each setup.exe individually but with the list of things to do above, Life 1.0 and Work 7.2 going on, who has time?

    So much time and so little to do. Wait a minute. Strike that; reverse it (thanks Todd!)

  • Anyone up for internet panhandling

    Will swap Messenger 8.0 invite for a Google Analytics one. Email me.

    Yeah, it's come to this. Panhandling on the net.

    So, any takers?

    UPDATE: I thought it was to me but I guess not. I’m looking for a GA invite, not a Messenger one. I’ve got tons of those. As someone pointed out, it might be that Google actually sends the invites out, not users. Sorry about that folks.

  • SharePoint Team Room Template: Under the Hood

    Recently there were three new Windows SharePoint Services templates added to the mix (much like the 30 or so that MS published awhile back and I have hosted on my development site for you to mess around with). Thanks to Bart Bultinick's blog for the link to these.

    As an Agile guy, we have a concept called an Agile Modeling Room (or War Room or Team Room, goes by many names). Basically a dedicated space for the project team to get together and work. No interuptions. No having to move your stuff around. Lots of whiteboards. Lots of creativity. Lots of discussion. You know, collaboration. Oh wait. SharePoint. Collaboration. This is going somewhere.

    So if SharePoint is about communication and collaboration, why not build a Team Room using it. Not like anyone hasn't thought about this before but now there's a template you can use and not have to spend a few hours conifiguring lists and all that jazz. Go ahead and download it here. It's an installer which just unzips the .STP file and a README.TXT file to wherever you want. Then you need to upload the .STP file to a top level WSS site template gallery or add it via the STSADM program with the addtemplate command. Finally, create a new site using the template. I've created an online demo of the Team Room site here with the other MS templates I've got online for demo purposes so feel free to look around and even use the Guest account to add and edit content (but please don't mess with it too much).

    When you install the Team Room template and create a new site, you're in for a bit of feast. Rather than the usual one or two custom lists that some of the other templates offer, the Team Room template creates 18 lists (mostly used for lookups and views), a document library and discussion board. It's no replacement for an Agile War Room, but it certainly is useful and some work has gone into it by the guys who make all these templates. So here's a breakdown of what you get and ways you can use this new tool.

    Main Lists
    There are only a few main lists that drive the system but a few nice modifications make these a little more usable than your OOTB list.

    Team Announcements
    This is just your stock announcements list and lives on the home page. Use it to let the team know of changes to the site. As a rule, I generally tell people to subscribe to something like this and anytime there are major changes, post a message. Saves on having to create alerts to every list.

    Discussions
    Standard discussion board on the home page. They've added the modified field to the view so you can see when the message was posted (and sort by this). However the big addition here is the form of metadata and views. They've added the following views to this list: By Category, By Event, By Subteam, By Author, Chronological, Created By Me, Condensed View, Assigned To Me, and Keyword Filter. Most of these are filtered/sorted/grouped around the extra metadata they added to the list which includes the following fields:

    • Primary Category - Lookup (into Category list)
    • Category Keywords - Single line of text
    • Associated Event - Lookup (into Event Profile list)
    • Associated Subteam - Lookup (into Subteam Profile list)
    • Review Deadline - Date and Time 
    • Reviewer - Lookup (into User Information)
    • Review Subteam - Lookup (into Subteam Profile list)
    • Review Status - Choice 
    • Inactive Date - Date and Time 
    • Keep Active - Yes/No 

    The Keyword Filter view is interesting. It contains a form web part on top of the list so enter a keyword (like "winter") and see the matching items.

    Action Items
    Another stock list when it started (the Tasks list) but modified with the following views: By Category, By Event, By Subteam, By Author, Chronological, By Priority, Open By Due Date, Open By Assignment, Created By Me, Calendar (first time I've seen someone do this), Condensed, Milestones, Assigned To Me, and Keyword Filter. Follows the same approach as the discussion with the views grouping/filtering/etc. around the metadata.

    Meetings
    A modified Events list with the following views added: By Date, By Category, By Event, Chronological, By Subteam, By Organizer, Created By Me, Condensed, Workspaces, Attended By Me, and Keyword Filter.

    Reference Documents
    Another modified list (this time a Document Library) with the set of columns and views we're getting tired of reading about (aka same as above).

    Views
    Something that I don't see enough of in SharePoint customization/configuration/development (which I can do an entire blog on that subject and what each of those mean) is the use of views. The Team Room template makes heavy use of this, not only creating a lot of views on lists but also creating lists of the views.

    Each document library or list that has the views (as listed above) also has a list called something like "<ListName> Views". These are just stock Links lists with the URL to each view as it's value. So on the home page, next to each list is the corresponding "Views" list that lets you do a one-click connect to the view directly, rather than having to get the user to go into the list and then pick a view. Such a small thing but a nice touch.

    Lookups
    As I mentioned, there are a lot of lookups on the site which are hooked into many of the lists. The site uses the following lookup lists:

    • Action Item Categories
    • Discussion Categories
    • Event Profile
    • Meeting Categories
    • Reference Document Categories

    This is a good thing as it makes everything dynamic. Two benefits to this (and something to follow if you're doing similar things in your setups). First, it means easy maintenance. Just add an item to a list and voila, it's available as content somewhere else. Second, you can partition the maintenance of the lookups. Give some lackey the ability to alter content on the lookup lists, but your regular users just have access to the lists using the lookups. It means you won't fall into a trap where someone is modifying a list and "accidently" deletes something. Well, okay, it'll happen but this approach can minimize the goof-ups. 

    At least the values are in a single list and these values (say Discussion Categories) are used as lookups in various lists as well as values for filtering and grouping. Again, the nice thing with this setup is that you can just change one list and the other values will change across the entire site. An Action Item category needs modification because the domain changed? No problem, just change it in the Action Item Categories list. Need a new category for documents? No problem. Just add it.

    Subteam Profiles
    I wanted to single this list out as it's really something you rarely see. Jim Duncan has put together the notion of creating a list with related items before (using a Project with Task items). The Subteam Profiles list does the same thing and lets you select a Subteam and display the members relating to that team. Great when you're dealing with a large project that's broken down by group or department and you just want to see a subset of names. You can check it out in action here.

    Like I said, this isn't rocket science. I mean, a few hours just creating lists and lookups and Bob's your uncle. It's just nice there's someone out there to create these and offer them for those of you who don't have the time or inclination to put one together for yourself. As always, you can modify this to your hearts content so if you do enhance this or add to it, please let everyone know!

    Learn!
    The main thing I will tell you from all this blather is to download the templates, install them, and learn. Really. There's a lot here, even if it doesn't look like much. It's not complicated but there are some neat things they've done (for example using the form web part to filter by keywords on the discussion board). Simple things you can with a minimal of effort which can give you some bang for you buck. You can download the Team Room template from here.

    If you find this information useful let me know in the comments. Later I'll step through the other two templates, the Document Library and Discussion Board. These again are site templates (not list templates) and have a few "extras" that make them useful. Enjoy!

  • The SharePointopolis, SharePointForge, and even more MSN invites (for a price)

    Dustin Miller posted an interesting blog today talking about the splintered SharePoint communities we already have out there and what seems to be an angst to centralizing of content and pooling of resources. He makes good points and talks about an offer he made for people to leverage SharePoint University and SharePoint Blogs. I agree with him on a few points, but it's the concept of "One SharePoint" that doesn't sit with me.

    I'm all for a metropolis, but I don't think there can be just one. I absolutely think that entities like SharePointU and MSD2D are benefitial but they're islands unto themselves. They have a specific audience and specific format.

    What does a SharePoint community look like? What does any community look like. I think it's formed by the people for the people type thing and evolves to what the people need. In the case of SPU, it's primarily forums with some news and training and whatnot added on. It serves that communities needs. For SharePointForge, it's going to be a place where developers can share and learn and users can gobble and download. To each his own.

    Can there be a single metropolis (or SharePointopolis, yet another domain to register) that is all things to all people. I doubt it. I think there can be a mega-opolis that is made up of many cities, towns, and communities centered around SharePoint much like societies and communities grow in the real world. Each is going to have it's own audience, resources, format, etc. and each will serve a specific need.

    Much like when you build your own "SharePoint" world in an organization, you generally have the engineers wanting to have complete control and precise logging of everything presented in a well organized manner. The developers would want to be able to hack the crap out of it and the information workers would want something that is just like what they have today so they don't need any training, but get all the benefits. You *can* deliver this with a single technology like SharePoint, but it's the culture of the community and the ability to re-use common elements across multiple groups that will make it bind and work together.

    For a SharePoint community, the trick might be to getting the island owners all together and talk about how they can communicate and connect together rather than trying to get them to live on the same island.

    As for SPF, it's there but I haven't fully lifted the hood for you guys yet. There's lots of wires, chains, and hidden lizards behind the scenes that has yet to be revealed which will make everything just go. I just wanted to get the site setup, the project announced, and have something to reference later. So go ahead and yell at me if you want about no content, it's your dime.

    Also, I have 5 new MSN 8.0 invites and since that's what people really want, send me an email with a picture of your favorite Disney character. First 5 get it. Yes, I'm serious. Asking for it or sending me porn won't do it. I need to see Tigger, Mickey and the rest before I'll give up the holy coveted MSN Messager 8.0 whatever thingies that I have for you.

  • A new Day, a new Community

    Some time ago and for quite awhile I've been disappointed with the likes of Microsoft's Web Component Directory and even GotDotNet. Finding good tools or even trying to download them was difficult. There also wasn't much of a community aspect to it. Lots of little silo operations going on and no cross-polination of information, knowledge, code, and solutions. Hopefully that's about to change.

    SharePointForge is my labour of love to compliment the type of workspaces out there already with a place firmly focused on the community. A place where you can come to and get value as a user and a contributor, quickly, easily, and without jumping through a lot of hoops.

    The site is up and over the next while we'll be getting things going on a full scale basis (including user registration that will get setup in the next day or so). Immediate plans over the next few weeks as the minions get things moved in include:

    • My Site - A place for you to track your own bookmarked sites and projects and generally feel like part of the community
    • Project Help and Hosting - A place to put your stuff if you're a developer and want to show it off. Also a place to look for help from other budding SharePoint developers. 
    • Collaboration and Community Projects - A lot of new initiatives that will encompass the entire community both from a contribution perspective and a benefit one.

    So sit back, relax, and join in the fun. I hope you'll enjoy the ride.

  • SharePoint Forums Part Deux and no more MSN invites!

    Just a quickie as I head off to slumberland tonight. First off, thanks for the fabulous feedback on the SharePoint Forums Web Part. Yes, it's going to be free. Yes, I'm insane. Yes, I prefer boxers (well, actually those boxers that are kind of briefs are cool too). Anyways, a few things came out of it that I'll do (not sure when but I'll squeeze it in):

    • Localization for non-English users. Thanks to Michael Greth as I always forget there are other people in the SharePoint universe. I should make it a practice to just always include this in projects, but it always slips my mind. Anyways, the forums will have localization for as many languages you can throw a stick at (and you guys will have to provide the stick unless you want the Swedish Chef language add-on)
    • Automatic importer for existing discussion forums. This was mentioned by a couple of people (Heather I think kicked it off) so I'll provide a facility in the Admin screen to suck in an existing list and create all the posts in the new list for it. It'll be up to you to delete the old list and come up with the categories (as there are no categories with the existing forum).

    Might be a couple of other nibblets that I can't remember off the top of my head but if you have any additional ideas, requests, etc. just fire them off my way and I'll put them on the list (and there's something coming up REAL soon that will enable you to do this yourself, hint, hint, nudge, nudge, wink, wink).

    Finally, there are no more MSN/Messenger 8 invites left. The internet fairies (that would be you guys) gobbled up all 12 of them I had. Thanks for everyone who nagged me!

    P.S. if anyone has a fairly lengthy discussion forum that they don't mind sending me (as a template with content) please do as I could use it for testing the import facility. Thanks!

     

  • Tired of SharePoint Discussions?

    SharePoint rocks. Okay, I said it. I got it out of my system. It's got a lot going for it but can also be the biggest PITA known to mankind.

    How many of us are sick and tired of the old "Discussion" boards that come with the OOTB SharePoint? I mean, threaded and flat views are so 1990s and you really can't carry on a good conversation without seeing what else was said and maybe oh, I don't know, quoting a post when you reply. I mean seriously. Internet Forums have been around for years and there are tons of great products out there like phpBB and ASP.NET Forums.

    So let's get with the program shall we?

    Another of my "pet" projects that I talked to some people at the last MVP Summit was a new Forum replace for SharePoint. Something that would be worthy of what we, in internet land, refer to as forums and not the red-headed step-child that some SharePoint engineer dreamed up. Something that would be useful. Something like this:

    Some of the features are typical of Forum type applications you see out there including:

    • Threaded messages
    • Reply with Quoting Features
    • Unlimited forums can be organized into as many categories as you like
    • Private forums for specific groups
    • Password protected forums
    • Web based administration (add/edit/delete everything inside the Web Part)
    • Member list (with stats on # of posts, etc.)
    • Locked topics
    • Sticky topics (can be used for announcements)
    • Active topics list
    • Print and email topics
    • Supports smileys/emoticons
    • RSS feeds (and/or Alerts) for forums and topics

    Additional features as this is a SharePoint Web Part:

    • Leverages SharePoint fully by using Lists to store information (instant installer, just drop it on a page)
    • Uses the built-in SharePoint roles of Reader, Contributor, and Administrator (but you can define your own)
    • Uses all built-in SharePoint graphics
    • Conforms to whatever theme/CSS changes you've made to your WSS Site/Portal to fit in
    • No membership or login required, just visiting the page that the Forum lives on will add the user to the system
    • Security trimming so users without access to a forum/category won't see it

    This is a single web part that you can drop onto any WSS site or Portal Area (yes, it works with both, and there was much rejoicing) either on a default page or your own Web Part Page. The posts are all contained in a few lists and they're built (and hidden) dynamically when you add the Web Part. As this Web Part lets you define as many forums and categories as you want, you really don't need multiple instances of it in your site (but I could be convinced to update it if you make a strong enough case for it).

    The mechanics are all done, now it's just fixing up the posts (tracking when someone adds a new post) and the stats and wrap it up for you guys to get your little grubby hands on. Okay, sorry for getting your salivating and all that with no download yet. I just couldn't keep quiet but I'll be working throughout this week to complete this (along with my other projects like SharePoint Builder) to get it out to you.

  • Boxers or Briefs?

    Like Greg Hughes posted on his blog, I have a few Windows Live Messenger (MSN 8.0) invitations available. Please send me an email to make your request, and be sure to indicate which email address you want me to send the invitation to. It would be nice if you would also tell me who you are, a little about yourself and if you prefer boxers or briefs.

  • Have your InfoPath Forms and eat them too

    Yeah, a weird title but a rather annoying quirk. InfoPath is an uber-cool tool (and there should be more posts about it!) as it let's you build fairly complex forms and make up for the lack of sophistication that SharePoint lists have for data entry, but still store the data in a Form Library (which then allows you to create views, get subscriptions, etc.). Of course, with any silver bullet/holy grail/insert name here, there are some drawbacks.

    Here's one that just irks me to no end. When you design a form you can easily tell it to submit the form to a Form Library by just specifying the location of the library and what fields you want to populate the default view. Easy sleazy. It even puts a Submit button on the toolbar for you so your users just have to click it. However the biggest issue with this is that while you can configure it to close the form, you can't tell it exit out of the application. Trust me, I've been all over Google today and tried everyone's ideas and nothing works.

    You can however create your own Submit button (as a button on the form itself) and write the following code attached to the OnClick event of the button:

    function CTRL2_5::OnClick(eventObj)
    {
       XDocument.Submit(); 
       Application.ActiveWindow.Close();
    }

    This works fine. It submits the form (via whatever way you have the submission setup, SharePoint library, email, etc.) and then closes InfoPath (the application). Great.

    Wait a minute. This isn't right. First off, why must I put a Submit button on my form and write an event handler for it in order to close InfoPath. InfoPath gives me a simple way of putting a Submit button on the toolbar (and menu) for this. If I put "Submit" on my form and my users want to print it out, they're going to get a bit ugly button when it prints. That's ugly. There is an event on the submit process, but it's basically an event to make you do all the work the normal XDocument.Submit() does. The problem is that you can't have InfoPath do a Submit to say a SharePoint Form Library from your own OnClick event unless you write all of that code in JavaScript. You need both the Toolbar Submit button to exist in order to call the XDocument.Submit() without having to specify all the nitty gritty details (the ones you can enter if you used the built in Submit dialog) in hard-coded JavaScript (or VB Script but it doesn't make it any better). Blech.

    In other words I'm caught between a rock and a hard place if I want to a) use the built-in submit mechanism and b) exit InfoPath completely.

    Why is this so difficult. Really? I challenge anyone out there to show me an elegant solution that does this. Sure, the code above works if I click on the forms Submit button (i.e. InfoPath quits) but if the user clicks on the toolbars Submit button (which has to be there, otherwise I have to write a gob of JavaScript in my OnClick) it just closes the form (or whatever option I choose, like leave the form open). I don't see a way to have my cake and eat it too.

    Odd that it was designed this way. Why not add the option on the Submit to 1) Close the Form 2) Open a Blank Form 3) Leave the Form Open or hey, what about a new option like 4) Close the Application. Seems everyone wants to do this and you can, but you just have to use your own button and tell your users to ignore the Submit button on the menu or toolbar.

  • Getting jiggy with RPCs

    Recently there were a few articles flying around discussing the Windows SharePoint Services RPC methods and things you can do with them. I thought I would do up some short demos using nothing but XML, XSLT and the built-in SharePoint Web Parts. You can do this as well and create your own pseudo-Web Parts with no coding! Neat huh?

    First off, the RPC methods have two things going for them. They're very powerful and very difficult to sometimes get to do what you want them to do. The great thing however is that for most of them, they return either an ADO.NET RecordSet (which we'll see how to get information out of) or just regular XML responses that you can easily use to put into a Web Part.

    The Basics
    Using the Url protocol, you can call these from a simple PageViewer Web Part or put the results into the Xml Web Part. The Url needs to be formatted a certain way:

    http://Server_Name/[sites/][Site_Name/]_vti_bin/owssvr.dll?Cmd=Method_name[&Parameter1=Value1&Parameter2=Value2

    It's really not that hard. The Method name is whatever method you want to call (not all methods are available via the Url protocol). The following methods are:

    • dialogview - Opens a view of the document libraries within a site, of a specific document library, or of a folder within a document library that is used in a dialog box for opening or saving files; or opens the property form that is used when saving a file.
    • Display - Runs a database query against the list specified by a GUID and returns XML or HTML.
    • ExportList - Exports in CAML format the schema of the list specified by a GUID.
    • GetProjSchema - Requests the XML Schema for a Web site.
    • GetUsageBlob - Returns information about the usage of a Web site.
    • HitCounter - Generates a hit on a page containing a hit counter.
    • RenderView - Requests the contents of a view for the list specified by a GUID.

    We're only going to look at a couple here, but feel free to experiment on your own.

    Display
    For this sample, I've setup a document library called "Samples" on my site and we'll use the Display RPC Method to get the data from it:

    http://sharepoint.bilsimser.com/_vti_bin/owssvr.dll?Cmd=Display&List={40A74BD8-9263-4041-8894-F25A4D59D608}&XMLDATA=TRUE

    The List parameter needs a GUID for the list. You can get this when you select your list and click on Modify Settings and Columns. The GUID is displayed in the Address to the page in your browser. Just copy and paste it for your own list. Click on that link in your browser and you'll see something like this:

    - <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    - <s:Schema id="RowsetSchema">
    - <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
    - <s:AttributeType name="ows_DocIcon" rs:name="Type" rs:number="1">
      <s:datatype dt:type="string" dt:maxLength="512" />
      </s:AttributeType>
    - <s:AttributeType name="ows_LinkFilename" rs:name="Name" rs:number="2">
      <s:datatype dt:type="string" dt:maxLength="512" />
      </s:AttributeType>
    - <s:AttributeType name="ows_Last_x0020_Modified" rs:name="Modified" rs:number="3">
      <s:datatype dt:type="datetime" dt:lookup="true" dt:maxLength="16" />
      </s:AttributeType>
    - <s:AttributeType name="ows_Editor" rs:name="Modified By" rs:number="4">
      <s:datatype dt:type="string" dt:lookup="true" dt:maxLength="512" />
      </s:AttributeType>
    - <s:AttributeType name="ows_LinkCheckedOutTitle" rs:name="Checked Out To" rs:number="5">
      <s:datatype dt:type="string" dt:maxLength="512" />
      </s:AttributeType>
      </s:ElementType>
      </s:Schema>
    - <rs:data>
      <z:row ows_DocIcon="doc" ows_LinkFilename="01_HighConceptPrimer.doc" ows_Last_x0020_Modified="1;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="01_HighConceptTemplate.doc" ows_Last_x0020_Modified="2;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="02_PrelimGameDesignPrimer.doc" ows_Last_x0020_Modified="3;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="02_PrelimGameDesignTemplate.doc" ows_Last_x0020_Modified="4;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="03_RoadMap.doc" ows_Last_x0020_Modified="5;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="04_RequirementsPrimer.doc" ows_Last_x0020_Modified="6;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="05_FinalGameDesignPrimer.doc" ows_Last_x0020_Modified="7;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="05_FinalGameDesignTemplate.doc" ows_Last_x0020_Modified="8;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="06_TechDesignPrimer.doc" ows_Last_x0020_Modified="9;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="07_PublisherMilestonesDeliverables.doc" ows_Last_x0020_Modified="10;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_BugReporting.doc" ows_Last_x0020_Modified="11;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_GameTestingMethodology.doc" ows_Last_x0020_Modified="12;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_GameTestingPrimer.doc" ows_Last_x0020_Modified="13;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_TestDesignGuideline.doc" ows_Last_x0020_Modified="14;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      </rs:data>
      </xml>

    This is the Xml that came back from our list and is basically an ADO.NET RecordSet. Nice. Now we want to do something with it. 

    Drop an Xml Web Part onto a page and enter the Url for your own list into the Xml Link field. Now we want to format this so we can use a simple Xsl file to format the output. In this case, I'm going to put the results into a table. Here's the Xsl file you can enter into the Xsl Editor:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:z="#RowsetSchema" xmlns:rs="urn:schemas-microsoft-com:rowset">
    <xsl:output method="xml" />

    <xsl:template match="/">
    <table border="1">
            <xsl:apply-templates select="/xml/rs:data"/>
    </table>
    </xsl:template>

    <xsl:template match="z:row">
    <tr>
    <td><xsl:value-of select="@ows_DocIcon"/></td>
    <td><xsl:value-of select="@ows_LinkFilename"/></td>
    <td><xsl:value-of select="@ows_Last_x0020_Modified"/></td>
    <td><xsl:value-of select="@ows_Editor"/></td>
    </tr>
    </xsl:template>

    </xsl:stylesheet>

    It's really simple and just selects all the items in the list and displays them in a table. You can see the final output here on this page. That's just a simple example but lets you really grab information from SharePoint without having to resort to building Web Parts. With some transformation you can change the way the information is displayed (for example formatting the dates). You can accomplish the same using the DataView Web Part if you want to use FrontPage, but this method works just as well (although it does require an understanding of Xml/Xsl so be ready to learn something new).

    Online ONET.XML
    This method is one of my favs as it basically lets you see everything about your site, online. The RPC Method, GetProjSchema, will return you something very similiar to what you would see if you opened up an ONET.XML file for a site. Site Name, Navigation Bars, Document Templates, Modules, etc. It's not exactly the same, but is coming straight from the source and with it you can do some pretty cool stuff.

    First, go ahead and invoke it on my demo site. Here's the Url:

    http://sharepoint.bilsimser.com/_vti_bin/owssvr.dll?Cmd=GetProjSchema

    This brings back the output which is just Xml. It starts with the Project tag, then continues on with NavBars, ListTemplates, DocumentTemplates, BaseTypes, Configurations, and finally Modules. Yup, just like ONET.XML.

    What can we do with this information? Well, let's say we want to show a list of all the available Templates on the site with a description (very much the same as what you get when you look at the Create Page). Create a new Xml Web Part, hook it up to call the GetProjSchema method on your site (or mine, I don't much care) and enter this into the Xsl Editor:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:z="#RowsetSchema" xmlns:rs="urn:schemas-microsoft-com:rowset">
    <xsl:output method="xml" />

    <xsl:template match="//Project">

    <table border="1">
    <tr>
    <td><strong>Template Name</strong></td>
    <td><strong>Description</strong></td>
    </tr>
    <xsl:for-each select="/Project/ListTemplates/ListTemplate">
    <tr>
    <td><xsl:value-of select="@DisplayName"/></td>
    <td><xsl:value-of select="@Description"/></td>
    </tr>
    </xsl:for-each>
    </table>

    </xsl:template>

    </xsl:stylesheet>

    Great. You now have a table that lists all the templates in your site with a description. Here's what the sample output looks like. You can extend this to do things like building your own Create page (filtering things out you don't want). You're really only limited by your imagination (and some XSLT skills). Just remember that you can only manipulate the information that you get from the queries, but if you're skilled at XSLT you can do things like combine requests and pull in various pieces of the system together to do your bidding (even have one Xml Web Part feed another).

    So check out the MSDN documentation on the RPC methods and have fun!