Archives

Archives / 2004 / August
  • Some blogging todos...

    There continues to be a lot of (what seems to be) frequently asked questions however either people are not visiting and consuming the great SPS and WSS FAQ sites or something is falling through the cracks. Just a note to let you guys what I'm working on in the SharePoint/.NET space and will be publishing over the next week to help spread the knowledge and hopefully help out some groups:

    • HOWTO on the whole custom filtering thing in SharePoint views. This is a big discussion that gets asked all the time (like how do I filter on something other than [Today]). I'll have a full blog on the various tips and tricks on this.
    • HOWTO customizing email alerts (both in SharePoint Portal Server and Windows SharePoint Services as they're different). Again something that gets asked a lot but isn't crystal clear.
    • CODE my SharePoint wrappers are ready for production and re-use which should help you work with SharePoint through web services. They're pretty robust, support both 2001 (using COM Interop) and 2003 (using Web Services) and can be used in any .NET, COM, Delphi, etc. application. Very cool.

    Also this blog is now aggro'd (my word) on MSDN Canada Blogs now so lots of happy-happy-joy-joy there. More aggregation is better I always say (well, okay I don't ALWAYS say it but... never mind)

  • XP Agile Universe

    Pretty cool stuff happening here in Cowtown. XP Agile Universe is just wrapping up the last day. Last nights festivities were great as Bob Martin gave a wicked (bet you never thought you'd see that word in an Agile blog) Keynote speech, centering around Copernicus and how Johannes Kepler used Unit Tests (and 15th century mathematics) to prove Copernicus' theories of how the Sun was the center of the universe (and how he had to throw out his UML diagrams halfway through because he discovered orbits were eliptical not round). Kepler's laws (orbit of a planet around the sun being an ellipse, orbiting intervals, and squares of the periods of planets) are still in use today and solid. Yes, this all related to Agile in Bob's unique and uplifting way (look for Bob's crumbled up notes on eBay shortly, especially the last one he didn't talk about).

    Eric Evans also gave a great presentation, revolving around his own Domain Driven Design book (which I highly recommend as part of my Programmers Essential Bookshelf). Eric talked about how the domain model is key (and it is) and that your system should be an implementation of that model. Far too often I see teams that tread down the DDD path only to toss away any semblance of a model and go heads-down coding to build a system. At the end of the day, it bears no resemblance to anything originally concieved and is a maintenance nightmare. Again, great words of wisdom from a quiet but smart man.

    Next years conference is to be merged with the Agile Development Converence. The new name is (drumroll please...) Agile United. Now of course our immediate reaction last night was around the Manchester United football club, with a table breaking out into song which I'm sure will carry on the joke for years to come. In any case, it's been a great conference so mark the next one down on your calendar and be sure to attend.

  • Portal Owner QuickStart Guide

    I'm currently setting up a common component repository using SharePoint and was looking at a few ideas for it. One thing that I've always found rather interesting was the Portal Owner QuickStart Guide that gets installed by default when you setup a new portal. This rather lonely web part goes practically unnoticed because it is there as a guide when you setup a portal and, once used, is usually deleted. However it's a powerful user experience tool that you may want to take a second look at.

    When I said it was a web part, it is. It's a very specific web part buried deep inside of the Microsoft.SharePoint.WebControls namespace in the SharePoint assembly. It's not just a simple content web part or a data view. It's a full blown web part that can be customized for your use. The problem is that it's undocumented, not very user friendly to configure and even harder to customize.

    Basically the web part has a custom property called "LinkHtml" that contains pseudo-HTML that will do three things:

    1. Render the text for your link
    2. Send the user to the link when they click on it
    3. Popup an additional link that you can use for help or information

    Here's how you customize the content of your web part:

    1. With the web part on your page click on "Edit Page" from the navigation menu
    2. Select the QuickStart web part and choose "Modify Shared Web Part"
    3. On the tool pane you can specify all the typical web part properties like title, size, etc.
    4. Down at the bottom of the tool pane, expand out the Miscellaneous section
    5. There you'll find the HTML for links field. This is where the magic happens.

    The HTML for links field contains pseudo-HTML that is processed by the web part. Here's a sample that produces one link in a group:

    <TABLE class="ms-ls">
    <TR>
    <TD colspan=2 style="padding-top: 6px;" class="ms-smallheader">
    <SPAN class="ms-announcementtitle">Sample Group</SPAN>
    </TD>
    </TR>
    <TR>
    <TD valign=top><IMG SRC="%LSTBULETGIF%" alt=""></TD>
    <TD width="100%" valign=top class="ms-lsmin ms-vb">
    BEGINPOPUP /SamplePopup.htm ENDPOPUP
    BEGINNAVIGATE /SamplePortalPage.aspx ENDNAVIGATE
    BEGINTEXT Sample Text ENDTEXT
    </TD>
    </TR>
    </TABLE>

    The magic that happens are the following keywords:

    • BEGINPOPUP [insert link to your popup content here] ENDPOPUP
    • BEGINNAVIGATE [insert link to where you want the user to go here] ENDNAVIGATE
    • BEGINTEXT [insert text to show the user here] ENDTEXT

    Note: All three must be present in the HTML for links for the web part to work. Specifying a blank value will render the text incorrectly.

    Another thing the web part does is inject the following javascript onto the page when the portal renders it. This provides the popup window that you specify in each BEGINPOPUP/ENDPOPUP pair (don't worry, you don't have to write this it's included when the web part is added to your page but here for reference):

    function PQSDI(helpUrl)
    {
      window.open(helpUrl,
       
    '_blank',
        '
    scrollbars=yes,
        resizable=yes,
        fullscreen=no,
        channelmode=no,
        status=no,
        toolbar=no,
        menubar=no,
        location=no,
        directories=no,
        width=200,
        height=571'
    );
      return false;

    </Script>

    Once you setup the HTML for links content, the web part will parse it and render out the right HTML to the end user (creating an ONCLICK event to call the PQSDI function when the link is selected).

    Yes, it's ugly to edit and no you cannot change the size/position of the popup window but this does provides a nice alternate facility to present information to the user. Also be careful when editing the content. It's very picky about the formatting and sometimes you'll get it, other times it displays nothing or not quite what you want (I haven't had it invalidate my page or anything). Caveat emptor.

    So you may want to export this thing to a DWP file and save it for later use if you have something new to introduce to your users and want a way to provide a sort of self-training guide. Hope this helps!