The Sydney SharePoint Forum was held in Sydney on May 6th. You can now watch videos of some of the presentations from the event site. Go to the Resources page and click the View link for the relevant presentation. My session with Allyson Skene is here – Find it faster with MOSS 2007 Search. It's true what they say about the camera adding ten pounds – I'm much slimmer in real life.
Wednesday, May 21, 2008
Now available on video
Thursday, May 15, 2008
Tag – you’re it!
I was putting together an ASP.net page that was retrieving information from a database. This page is going to be indexed by SharePoint. So to make sure that the search experience could be as good as possible, I wanted to make sure that the page includes useful metadata tags. While trying to figure out the best way of setting the metadata, I came across the HtmlMeta class. This allows you to programmatically add your meta tags to your content: metaTag.Name = "DC.Title"; metaTag.Content = "Tag – you're it"; head.Controls.Add(metaTag); Neat, huh?
HtmlMeta metaTag = new
HtmlMeta();
HtmlHead head = (HtmlHead)Page.Header;
Tuesday, April 22, 2008
'Open Mike' session for SharePoint User Group
Would you like to find out;
- How can you leverage Microsoft Office SharePoint technologies to provide a platform for collaboration, ECM, search, BI and social computing?
- The interoperability with MOSS and other line of business applications such as SAP?
- How SharePoint and Office can be the people friendly face of service oriented architecture?
Well we’ve got just the man to answer those burning questions... Microsoft’s Mike Fitzmaurice, Enterprise Technology Strategist and former Technical Product manager for WSS/MOSS, has kindly agreed to hold a lunch time ‘Open Mike’ session on May 5th during his Sydney visit.
We look forward to seeing you there! Please click here to register for this event.
Registration opens at 12:30pm and the Q&A session commence at 1:00pm. This special event will be held at Microsoft’s office, 1 Epping Road, North Ryde, Sydney.
Food & Refreshments will be provided.
‘Open Mike’ – Mike Fitzmaurice Q&A Date: Monday May 5th 2008 Time: 12:30-2:00pm
Visit http://www.sharepointusers.org.au/sydney for further information.
Wednesday, April 16, 2008
Problem with using a Calculated Field in a Lookup property
I've been playing around with using a calculated field as the source for a lookup column in a document library. I've run into a few annoying issues that I thought I'd share. Try this:
- Create a custom list
- Add some rows to your list. In my case I added values like "Quick Pick 1", "Quick Pick 2"…
- Add a calculated column with the formula of [Title]. Leave the calculated type as single line of text
- In your Shared Documents library, add a lookup column and point it to the calculated field you created in the previous step
I agree – not the most productive piece of SharePoint work you will do, but bear with me.
- When you edit the properties for a document via the browser, the Lookup field values display as expected:

- Now, edit a Word 2007 document in the library
- View the Word 2007 Document Information Panel
If your environment is anything like mine, this is what you will get:
I don't know why the "string;#" text is visible in the Document Information Panel view. I know that the Lookup column does store an ID along with the displayed value, but I definitely do not want this displayed in Word 2007.
It's a shame that this doesn't work. My search through the newsgroups and blogs didn't bring back any details about this specific issue, but there were some related questions about not being able to reference certain column types as lookup fields. I'd be interested to hear if anyone has found a fix for this. I can work around this issue by developing a simple event handler on my list to set the value of a text box to what I need. That way I can just use an out-of-the-box lookup column on a text field.
There was also another issue that I saw mentioned in relation to calculated lookup fields. If you try to use one of these in a collapsed Group By view, you will see a "Render Failed" message for each column when you expand the group:

My event-handler work-around will also avoid this issue. However, another alternative is to select the "Show groupings expanded" option for the view. You can then expand/collapse the views as you need.
Wednesday, March 19, 2008
MS Partner Training – On the road again
After appearing to sell-out crowds in 2007, the new and improved "Instructor-lead Chalk-talk to Presales and Business Analyst on the MOSS 2007 Platform" is about to hit the road again. And like all good shows, this time we have a special guest. Mick Badran of Breeze Training is going to attempt the daring feat of stepping into my shoes (spot the pun). I'm going to tackle Brisbane and Melbourne, while Mick will be wowing the crowds in Sydney. Dates are: This two day session is an instructor lead "chalk-and-talk" training designed for Pre-Sales Technical Consultants, Technical Project Managers, Architects and Business Analysts. The content is level-200. You can find out more information and register for this event here
Saturday, February 23, 2008
Building a Windows 2008 x64 Laptop
My primary machine is a Dell XPS M1330 laptop. This has 4GB of memory and a dual core Intel T7300 2 GHz processor. Up until recently I have been running 32-bit Windows Vista as the main operating system. To be honest, I was disappointed with the performance. Considering the specifications, I was expecting the machine to be a bit quicker round the block. I found that I was waiting to switch between applications. Outlook was tediously slow some times. Now this could be for a number of reasons – Dell pre-loads the application with many "performance enhancing utilities". Anyway, I decided it was time for a rebuild. Daniel Larson has been harping on how good Windows 2008 is, so I grabbed my installation disk and dived right in. I wanted to take advantage of the whole 4 GB of memory I have, so I went with the 64-bit version (under 32-bit Windows only sees about 3.4 GB). I reckon that going 64-bit should also give me a performance boost too. The challenge is that I would have to make sure all the various software and hardware that I use would still run under 64-bit. There was only one way to find out for real. I was also keen to see what Hyper-V was all about. This is Microsoft's new version of Virtual Server. The idea is that it takes advantage of features in your processor to run more efficiently. I wasn't 100% sure if my processor supported these capabilities, but I was willing to give it a shot. I was getting tired of doing development work within a VPC and transferring files between the guest and host operating systems. I liked the idea of running SharePoint 2007 directly on my main operating system. No more booting up a VPC to check exactly where a configuration option was. I would be able to code directly on the host. Now VPCs aren't that much of a pain, and they have their own advantages, but I was keen to see what it would be like to run MOSS natively. Finally, by going Windows 2008, I can run 64-bit virtual machines. Yes – I could also do this with VMWare on Vista, but since I was going to get all the other benefits with Windows 2008, this was an extra bonus. This may become more important later this year. I suspect that Microsoft will start to release early betas of SharePoint vNext before the year is out. If this is only going to run on 64-bit (just like Exchange), I want to be set up so that I can install them. Right – so now that I convinced myself, it was time to begin. My first mistake was to back up all my content using Vista backups. I had been running these for a while, so it seemed like a safe bet. The problem came later when I attempted to restore these from Windows 2008. The backup software is not the same between these platforms and I couldn't find any software that would read the Visa backups. I ended up restoring these to another Vista computer and then copying the files across. So I'd recommend just copying your Vista data files onto a separate hard drive. Another hassle with the Vista backups is that it does not include executable files or help files by default. So even after the restore I had to download the MOSS and WSS SDK packages again. Not a big hassle, but something to be aware of. As a belt-and-braces measure, I used Acronis TrueImage to take a snapshot of my entire computer. This was in case the exercise turned into an unmitigated disaster and I needed to roll back. My 130 GB of content got compressed down to a 85 GB file. Thankfully I haven't had to use this, so I can't say what the restore process is like. Now for the risky part. I downloaded the Windows 2008 RTM from my MSDN subscription and created a DVD. I rebooted and walked through the process of deleting my existing partitions (eek!) and creating one new partition for the new install. WARNING: If you are planning to use Hyper-V then make sure to leave the regional settings at US English during installation. I'm in Australia, so I thought I would change these during the installation process. It turns out that the current (beta) release of Hyper-V does not like this, and I ended up having to re-install from scratch. Note that you can't just revert to the US English regional settings if you experience this problem. You can only change to your correct locale AFTER Hyper-V has been enabled. I'm sure this will get fixed soon. Apart from that hiccup, the process was straightforward. My Bluetooth mouse worked from the moment the installation commenced. I think the installation process took about 30 minutes before I was booting into my new desktop. After getting the bare bones installation up and running, here are the configuration changes that I've made: Now I'm very content with my setup. Response time is much faster than my old build. Hyper-V is very slick. VPCs seem to run more efficiently. There are a few hassles though: On balance though, I'm happy. The performance boost is great and I'll now get some experience poking around the new OS. I've just gotten MOSS 2007 up and running, so I can see what it's like to develop straight on the laptop. Here are some of the links I found useful when doing my installation:
2. Enabled the following server roles:
3. Enabled the following server features:
4. Disabled the shutdown prompt by updating my local group policy
5. Configured my Hyper-V network so that I can easily share files between my host and client machines (Bryant Likes's blog)
6. Installed the Synaptic x64 Fingerprint reader driver
7. Installed the Dell x64 sound card drivers
Monday, January 28, 2008
A SharePoint site by any other name...
There are quite a few situations where you want your SharePoint Web Application available to different sets of users, using different web addresses. For example, our internal users may use http://XYZ to access our web application, but our external clients may have to enter https://secure.xyz.com
SharePoint allows you to assign up to five different "end-user addresses" for each of your Web Applications. These "end-user addresses" are ones that people will type into their browser to access your site. SharePoint uses a feature called Alternate Access Mapping (AAM) to make sure that the web application is available through different addresses while still ensuring that the links in the page sent back to the user are formatted correctly.
For a standard, non-SharePoint web site, this is relatively easy. Microsoft's IIS web server allows an administrator to specify as many addresses as they want for a single web site. These are called "host headers". If you are careful and make sure that all the internal links in your standard web site are written without a domain (e.g. /contactus.aspx), then the end user will always get the correct links based on the address they have used to access the website.
So why doesn't SharePoint work the same way? Well, part of the reason is that there are some scenarios where SharePoint will receive requests using one address, but it needs to translate these to another address before sending the final page to the end user. More on this later.
The end result is that IIS is responsible for accepting the page requests and passing them to SharePoint. It is then SharePoint's job to figure out which Web Application on the server farm the user is trying to access, and what "end user address" it should use when creating the output page.
So this is where Alternate Access Mapping comes into play. However, I got to say, it must be one of the most confusing user interfaces in the whole Central Administration. Even the Search Managed Properties is easier to figure out than this one. Here is my attempt to explain its workings. There is also a great set of MSDN blog articles from Troy Starr, and some screen webcasts from Bob Fox
What I have been referring to as "end user addresses" SharePoint calls Public Zone URLs. We have five different zones:
- Default
- Intranet
- Extranet
- Custom
- Internet
They all work the same way, the names just reflect common uses, feel free to use each one as you please. The Default zone is set up for you when you create the Web Application. This zone is given the address that you specified during the "Create Web Application" process. It's up to you to set up the remaining four if you need them.
The easiest way to set these up is to use Edit Public Zone URLs from the Central Administration - Operations - Alternate Access Mapping page:
You need to make sure that you have the correct Alternate Access Mapping Collection specified at the top of the page. This is the Web Application that we want to configure "end user addresses" for. You might find the term "Public URLs" confusing. This does not mean that these are URLs that will be available outside your firewall. It refers to the URLs that your end-users will use to access your site. Some of these may be available outside your firewall, others will only be available internally.
In my example above, I am going to make my Web Application available on all five possible zones. The default name may reflect the machine that my web application is running on. My internal users will go to http://Intranet, but when they are out of the office they will use https://secure.xyz.com. Finally, I will allow clients to access certain information on the same web application at http://extranet.xyz.com
Once we click Save, SharePoint creates one entry in the AAM for each of our Public URLs. I would also update my IIS configuration at this stage to include host headers in my web site for each of these addresses.
But what does the Internal URL section of the table refer to? And how come it is identical to the Public URL? For me, it would have been better if Internal URLs were called Incoming URLs and Public URL was called Out-Going. Basically what happens is that SharePoint looks at the request for a page that it receives from IIS to determine which Public URL to use when creating the final page for the user.
For our example above, this is very straight-forward. If one of our road-warrior salespeople accesses https://secure.xyz.com from their browser, SharePoint will know that they are in the Custom zone, so any URLs on the page that refer to the web application should use the prefix of https://secure.xyz.com on the page it sends to the user. So simple, it almost sounds useless.
However, there are situations when the request that SharePoint receives does not match the address that the user entered. For example, we may have a Reverse Proxy server (such as Microsoft ISA 2006) that receives all the page requests from our external users and then forwards them to our server farm using the SharePoint server name. In this case, we want our our Internal URL to be something like http://AppServer01 but we still want the page sent to the user to use https://secure.xyz.com for any links to other content on the Web Application.
To configure this we use the Add Internal URLs button. This will allow us to specify another address that SharePoint should listen on for requests for our Web Application. By setting the zone to Custom we let SharePoint know what format we want the Web Application links written as.
This will create a 6th entry on our Alternate Access Mapping Collection. Note that we now have two entries for the Custom zone, both with different Internal URLs. We can add as many Internal URLs as we need for each of the zones. However, each Internal URL must be unique across the collection - otherwise SharePoint would not know which Public URL to use to generate the page for the end user.
In our example above, we might think of getting rid of the Custom Zone entry that defines http://secure.xyz.com as a valid Internal URL. After all, SharePoint will never receive requests directly with this URL (only our Proxy Server will). However, this is one of the quirks of the AAM interface - you must have an entry where the Internal and Public URL match. If you do delete this entry, then SharePoint will assign the Default Zone URL to the remaining Custom entry. Just accept that they need to be there.
If you haven't defined a Public URL for one of the zones, you can either use the Edit Public URLs or the Add Internal URLs button to configure it. Confusing, but the end result is the same - a new entry set up in your Web Application's AAM Collection that uses the same URL for both the internal and Public URL.
Similarly, when you use the Edit Public URLs screen to clear one of the Zones, SharePoint will remove the entry from the Collection that uses the same Internal and External URL. If there are any other entries in the collection for that Zone, SharePoint will reconfigure it to use the the Default Public URL.
Finally, here's a graphic to illustrate what is happening. Each zone can have many Internal URLs. SharePoint translates these to the appropriate Public URL based on the Web Application's AAM settings.
