Thursday, November 06, 2008

Access is denied. Check that the Default Content Access Account has access to this content.

I had the following error on an Extranet site that I setup recently:
The start address <https://abc.def.com> cannot be crawled.
Access is denied. Check that the Default Content Access Account has access to this content, or add a crawl rule to crawl this content. (0x80041205).

I had read on other blogs that the trick was to login to the Index Server as the MOSS Search account, check that you can access the site, and verify the proxy/exclusions had been setup correctly. This normally works, but it didn't for me this time. And it certainly wasn't permissions as the search account had full read access to the site through the Application Policy interface within Central Admin.

In the end, I found that a registry change and a reboot of the server was required to fix it. See http://support.microsoft.com/kb/896861. I used Method 1 (Disable loopback check) to fix the problem. That is:

1. Click Start, click Run, type regedit, and then click OK.
2. In Registry Editor, locate and then click the following registry key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3. Right-click Lsa, point to New, and then click DWORD Value.
4. Type DisableLoopbackCheck, and then press ENTER.
5. Right-click DisableLoopbackCheck, and then click Modify.
6. In the Value data box, type 1, and then click OK.
7. Quit Registry Editor, and then restart your computer.

I hope this helps. It frustrated the living daylights out of me at the time.

Monday, April 28, 2008

Fixing the Search Settings Forbidden (403) Error

Last week I installed hotfix 941653 and hotfix 950292 (post SP1) to a client site to fix the dreaded Error: 'length' is null or not an object that occurs with Office 2003 Standard edition and MOSS Content Types. Unfortunately, not only did the problem remain (i.e. the hotfix fixed nothing), but I started to get 403 (Forbidden) errors when I tried to navigate to Search Settings page.
To fix this problem, I had to do the following:
From the index server (I've got a front-end web server and a backend index server, both 64 bit):
stsadm -o search -action stop -f
then I did
stsadm -o search -action start -role indexquery
then I did a:
stsadm -o execadmsvcjobs
Then I went back to the front end web server, navigated to the Shared Services Admin page, selected the SSP site, then from its context menu selected 'Edit Properties'. Then from the screen I reselected what the Index server was. After this, on the front end server I did a stsadm -o execadmsvcjobs. Then search started working again (but as the index was blown away, I had to do a full reindex).

Friday, April 04, 2008

Fiddler2 and Pipeboost are your friend!

To my surprise this week, one of the sites that I am helping with went live (deployed by the customer). One of the comments from the customer was 'it is quite slow'. Well to help identify what was going on, I brought out my trusty friends - Fiddler2 and Pipeboost.

Fiddler2
Basically, Fiddler is an IE add-on that monitors what comes down the wire to the browser whenever you request a page. In includes all the details about what types of files are downloaded (jpg, swf, css, js etc) and how long it takes. It even provides a pie chart to show what file types are causing the biggest payload. My first test on the site was with all of my cache cleared (so that I measure the performance of the first time visitor to the site). Yes it was definitely slow. My second request was done without clearing the cache. In this report however, it showed that although the flash files were being cached, All of the images stored in the SiteCollectionImages library were not.

So Fiddler helped me to identify that the BlobCache had not been configured on the server. This is a setting in the Web.Config file. It helps IIS to store images that are stored in SharePoint (and therefore in the backend database) to the local file system. Thus making subsequent requests for those resources a whole lot quicker (because a SharePoint database request is not required). The syntax for BlobCache is as follows:


Pipeboost (www.pipeboost.com)
Pipeboost helped me to identify whether or not IIS Compression had been configured on the production server. As most of you would know, browsers such as IE can handle compression. There is a handshake that goes on between the server and the browser to see whether the browser supports compression. If it does, then IIS compresses the contents (thus reducing the payload) and sends it to the browser, where it is decompressed and displayed to the user. There are two types of content that can be compressed - Static (like images) and Dynamic (like ASPX pages). Static compressioncan compress the file as well as stores it in the Temporary Internet Files directory, so that it can be served up quicker next time. Dynamic waits for the ASPX to return its content, then it just sends that page compressed back to the browser (i.e. it doesn't store it in the Temporary Internet Files location).

There is a great article at http://www.dotnetjunkies.com/Article/16267D49-4C6E-4063-AB12-853761D31E66.dcik that explains how to setup IIS Compression. At the end of this article, it talks about Pipeboost, which can tell you whether or not the payload returned from the web server is compressed (i.e. via IIS Compression).

Strange Behaviour when Editing a SharePoint Search Resuls Page

As part of the the work that I do with my own company (MS-Advantage), I get to work on a lot of interesting projects, as well as work with a lot of interesting partner/development companies.
For example, currently I am doing some work on the side with a Graphic Design company who have been charged with developing the branding for a global web site. I basically provide them with guidance on how to best use and develop with SharePoint, while they do the leg work of developing the master pages and page layouts.

While I was working on the project yesterday, the customer indicated that the Search results page was returning sites and list information that they did not want to appear. To resolve the issue, I went into the search results page, edited the core results web part to add an additional query to the results (Query2 and isdocument:1, which basically says 'only show pages or documents').

Well I checked in a draft version of the search results page and started to test that it worked. As the results returned was exactly what I was after, I then published the page (so that it would get picked up in that night's content deployment job). After publishing the page however, every time I navigated to the search results page (even without providing a search keyword), the search results that I had previously used while testing were still being displayed. I tried to roll back to previous versions, but that didn't help. In the end I had to open up the page in SharePoint Designer, AND TO MY HORROR SharePoint had injected the results HTML into my web page. Once I deleted this and saved it, I was then able to re-publish the page.

SharePoint Deployment Guide and Checklist

While I was at the SharePoint Conference in Seattle, I attended a session on 10 Steps to Governance (presented by Brian Cook and Joel Olesen). Just before the session started, Microsoft were handing out a little pocket guide called the SharePoint Deployment Guide and Checklist. It contained lots of useful information about governance plans, deployment checklists and deployment team roles.

When I showed it to a few guys I work with, they thought 'hey, where can I get a copy'. Well, I found it online at http://office.microsoft.com/download/afile.aspx?AssetID=AM102552101033.

So enjoy!

Sunday, March 09, 2008

SharePoint Conference catchup with Heather Solomon

While I was at the SharePoint Conference in Seattle, I caught up with Heather Solomon (SharePoint branding MVP) from SharePointExperts.com.

Below are some of the tips and tricks that we discussed (and some of my own tips):
  1. Explore using CSS to customize the OOTB navigation controls before you go out venturing on creating your own.
  2. Incorporate the @import to include your CSS in your Master Pages. Heather's opinion is that you should only use the alternate CSS option to tweak particular areas.
  3. Store your CSS and branding images on the web server. Images go in their own directory under 'Template\Images'. The CSS file should be stored inside a directory under 'Styles' (under the 12 hive).
  4. Package your branding in Solution Package/Feature. Check out
    http://codeplex.com/stsdev for a Visual Studio Project Template for this (developed by Ted Patterson and Andrew Connel)
  5. On the development machine, turn off custom errors in the web.config (
    set Callstack = False. Set CustomErrors=Off)
  6. Apart from using Alternate Stylesheets, Themes can also be used to help brand the Application.master template (remember you can't actually change the HTML structure though)
  7. Meeting Workspaces do not pick up your custom master page. There is some special code in the meeting workspace master page that renders the multiple meeting navigation that you normally see on the left hand side. You need to create a separate masterpage for the meeting workspace, then create a feature stapling to the meeting workspace to change its default master page.
  8. Blogs and Wikis use different styles, so be careful
  9. Take advantage of contextual selectors (e.g. div#mydiv ms-SPLink {...} )
  10. The word specificity (which I can never pronounce in meetings) basically means that a number is derived from the way in which an element is styled. Sometimes you see styles overriding others when you see things like class names sitting right next to the element. Think of the number as A-B-C. For each ID that you use, you add 1 to A. For every class you use, you add 1 to B. Then for a base class definintion, you add 1 to C. So p#largetext ul.mylist li has a specificity of 1-1-1 (or 111). If I just set a style on li (corresponding to a specificity of 1), the specificity with the highest number would be applied to the element.
  11. Don't go crazy with classes. Use IDs more often and classes sparingly. That way in your CSS, you can use contextual selectors to define a style. E.g. div#mydiv table tr td a { font-family: Verdana }. In this example I haven't used classes at all. I am basically finding the element by starting at the ID level first.
  12. Heather mentioned that in the past, she has seen SharePoint Designer take grouped styles (e.g. h1, h2, h3 ....) and separate them to h1 {} h2 {} etc (so adding more lines than what is necessary). Heather uses 'Top Style Pro 3.5' to author her CSS, but she hasn't tested opening up a CSS stored in the 'Style Library' areas (remember that she prefers to have the CSS stored on the web server).

Wednesday, March 05, 2008

Fab 40 Application Templates and Role-based My Site Templates Author

Tonight's SharePoint Conference's social evening was at the Museum of Flight in Seattle. During the night, I managed to catchup with Bob Sutton, Senior Product Manager within the SharePoint product group. After having a couple of drinks together (part of it on me unfortunately), we started to discuss the Application templates, and in particular the role-based My Site templates. How stupid did I feel when he said 'oh yeah, I wrote all of that!'. So now when I have questions (particularly about the My Site templates) I can go directly to the source. Thanks Bob!

I also got to meet Dave Page from Redmond Technology Partners, whose company was engaged by Microsoft to build the GearUp site, which is a site dedicated to providing IT professionals and business managers with timely resources and guidance through the SharePoint deployment cycle. It even includes an Internal Buzz Kit, which includes sample promotional emails, posters and PowerPoint slides - all vital pieces in the Communications Plan that all SharePoint projects should have (if you don't have one - get one. Otherwise your SharePoint project is likely to fail due to poor user adoption).

Is that you Mike Fitzmaurice?

I nearly fell over tonight when I saw Mike Fitzmaurice (Microsoft Evangelist) for the first time in 12 months. He has lost about 40Kg and is shadow of the man he was before. Well done Mike!

A Possible Workaround with Content Types incorporating BDC lookups

I attended the session 'Creating Solutions with the Business Data Catalog' today at the SharePoint Conference, presented by Todd Baginski. At the end of the session, I had an idea on how to get around this limitation with Content Types (i.e. that you can add a BDC column to a Content Type). When question time came, I stood up and asked Todd whether my theory might work. He thought it was a very good idea.
So what is the idea? Well, basically it is quite a simple process to query the values in the BDC. You just need to know the the SSP name (e.g. SharedServices1), the LobSystemInstanceName (which appears in the Application Definition XML file) and the Entity that you want to query (e.g. Customers). Todd said that he will soon upload this sample code to his blog (I'm not much of a developer any more). You then take this sample code and wrap it in a custom Field Control. The User Experience will be that when you select that you want to create a field of type BDC, you select your custom type, then provide the 3 parameters required (or even a 4th to provide filtering). At runtime, the field control queries the BDC and returns the values in a drop down list. Under the covers, you could even store the associated ID of the selected BDC item. This could (potentially) be used for communicating with other BDC web parts (e.g. BDC Item web part), or could be consumed by other field controls that provide filtering capability (say to a duplicate field control that perhaps takes a 4th parameter to filter the BDC results). If you are a brave enough developer, give it a go and let me know how you go (I wouldn't mind a copy of the code).

Monday, March 03, 2008

I'm here at the MS SharePoint Conference in Seattle

As there wasn't going to be a SharePoint Conference in Australia this year, I decided to go this conference in Seattle, which focuses on Real-World SharePoint solutions. Apart from getting some war stories from other SharePoint Specialists, I'm looking forward to catching up with some world renowned MVP's and Arpan Shah from the Microsoft Product Team. I'm scheduled to catch up with him at the Ask the Experts Lunch on Wednesday.