Why does Microsoft treat bookmarks so badly?

I hate bookmarks in Word documents. Word links headings and the table of contents nicely, so you can click from the table of contents to a section easily. Still, Word supports them, so some folks use them, which I guess proves that “if you build it they will come” really is true irrespective of how dull the activity is.

My problems with bookmarks in Word is that they are invisible and inflexible. You can’t see them initially – and to show them requires a trip to The Office button > Word Options > Advanced > Show Document Content section > Show Bookmarks. Finding that took a fair bit of work for me – how well is someone less computer literate going to do?

Secondly, bookmarks are difficult to move. The easiest way is simply to redefine them. This is a bit sad – I’m pretty sure that back in the 1980’s I remember using a Mac word processor, which displayed a little ‘Anchor’ icon for bookmarks, and it could be dragged around. Why can’t we have that? I mean, yes, we can bookmark actual bits of text – but really, having something that applies at the line level is just as useful.

Bookmarks in SharePoint are somewhat similar, but worse. You can create bookmarks in the content editor web part – just click the ‘create hyperlink’ icon, and in the dialog supply a bookmark name. If you’d some text highlighted in the editor, well, it’ll now appear as a link (which is hardly ideal) – and if not, well, you’ve now got a bookmark you can’t see, unless you go into the HTML. Worse, though, is that Bookmarks are actually much more useful in the context of a web page, to allow you to direct users to a certain part of the page.

So here’s my request – Microsoft, if you’re going to have bookmarks, make them visible, make them easy to create, delete, move and link to.

I guess I’ll have to look into other content editor parts, just on the off-chance….

Why does Microsoft treat bookmarks so badly?

What version of SharePoint do I have?

A surprisingly tricky thing to find out. Penny Coventry has details on how. Another alternative is to go to the Add-Remove programs window, and click for more information – that’ll give you the exact version number.

Of course, a page showing ‘SharePoint 2007 SP1’ would be really nice, but this will do.

What version of SharePoint do I have?

Problems with the extensibility.dll in Outlook add-ins

On and off I’ve been writing an Office add-in for Outlook. We’ve reached the point of testing, but when we installed it on a clean machine, it wouldn’t run. There was an error message complaining about not having the Extensibility.dll installed. “Odd” we thought. We’d been careful to install the Outlook PIAs (Primary Interop Assemblies), and no-one had heard of this assembly before.

Well, it appears that this assembly is installed with Visual Studio, but it isn’t installed with the PIAs. Nice. Fortunately Gunnar Peipman has an extremely timely post on this – I’d been looking at the Extensibility.dll in the GAC, but apparently there is one under Common Files too. I’m not sure where is has to go though – the GAC, the application folder, or into the common files directory. I’ll report back when I figure this out…

What I’d really like to know, though, is why this file isn’t part of the PIAs? I mean, what are you going to do with them if you aren’t writing an add-in?

Problems with the extensibility.dll in Outlook add-ins

Why don't ListView Web Parts have a 'View' menu?

This was a question that came up – why can’t ListView web parts that you put on a page through the browser have a View menu? There’s no view menu, and they can’t have one. However, if you go to a List, such as a Document Library, they do have view menus.

Web Part put on Page:

View Menu - Webpart

Document Libary:

View Menu - Library

The interesting thing is, though, that the page you see in the Library uses exactly the same web part as the one you can add to a page. Therefore there is clearly some way of making the web part show that menu, but that you can’t configure that. Why not, what gives?

Well, it suddenly hit me – the views that you create for a list or library actually create new pages. They’ve their own URLs, and are actually their own pages. You can see this through SharePoint Designer. Anyway, all the View menu really does is navigate you between pages. Thus, in a Listview web part that you create on a page this menu would, instead of just changing the view in that web part, take you to another entirely different page. That’s probably not what users would expect! Consequently, the view menu is unavailable in the ListView web parts that you create!

Why don't ListView Web Parts have a 'View' menu?

Using the ASP.NET Web Site Administration Tool to test SQL connections

I’ve been setting up forms based authentication for SharePoint. This is pretty much a normal ASP.NET authentication set up, but I’ve been following the instructions from Andrew Connell, and the excellent instructions from Dan Attis.

In these instructions, we set up the ASP.NET database using aspnet_regsql and then use the Web Site Administration tool to check the connections and create users (if you want to know more, check out the articles). However, here I had a bit of a quirky problem. Both sets of instructions say to, in the Web Site Administration tool, select the Provider tab and then select Select a Different Provider For Each Feature (Advanced). Then click Test by each provider. The problem – no Test link beside either provider.

As I was having some problems, I decided to dig into this. I tracked through the code that makes up the Web Site Administration tool, and found that this link is only shown if your provider contains the text ‘Sql’. I kid you not…

Using the ASP.NET Web Site Administration Tool to test SQL connections

Setting the default path in Windows Explorer

A note for myself, ‘cos I get really annoyed about Explorer opening at the ‘My Documents’ folder – you can set the default path to the machines root by changing Explorer’s menu shortcut to:

%SystemRoot%explorer.exe /n, /e, /select, C:

I found this advice here. And if you’re wondering why I’d want this – I have a laptop for business stuff, and a desktop for Virtual Machines only. Now I just have to figure out how to work across the two machines…

Setting the default path in Windows Explorer

Page Layouts, Breadcrumbs, and the space above the main content area of a page.

Previously, I’ve blogged about some of my investigations into how breadcrumbs work in SharePoint – and how sometimes they’re shown in the ‘Page Title Area’, and sometimes they’re put into the ‘Main Content Area’.

One of our customers was building a page layout, and wanted the breadcrumbs inside the Main content area. They put the following content controls into the page layout file:

<%-- This content tag blanks the 'title' placeholder, which is above the white 'main content area' of a page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" />

<%-- This content tag blanks the 'title breadcrumbs' placeholder, which is above the white 'main content area' of a page --%>
<asp:Content ContentPlaceHolderId="PlaceHolderTitleBreadcrumb" runat="server"/>

<%-- This is the main content for a page. This content tag is an example only.
Usually there is more formatting and web part zones, other controls, etc.--%>

<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">

<!-- This tag defines the breadcrumb to display. On a normal page (such as defaultlayout.aspx) it is a contained within a table -->
<asp:SiteMapPath ID="ContentMap" Runat="server" SiteMapProvider="CurrentNavSiteMapProviderNoEncode" RenderCurrentNodeAsLink="false" SkipLinkText="" NodeStyle-CssClass="ms-sitemapdirectional"/>

<!-- This tag displays the text of the page's 'Title' that is given when it is created. -->
<SharePoint:FieldValue id="PageTitle" FieldName="Title" runat="server"/>

</asp:Content>

Unfortunately, this resulted in a gap between the top of the page content area, and the bottom of the top navigation:

Page Layout Gap

So, what was missing?

Well, it turns out that another couple of content controls are relevant:

<asp:Content ContentPlaceHolderId="PlaceHolderPageImage" runat="server"><IMG src="/_layouts/images/blank.gif" width=1 height=1 alt=""></asp:Content>

<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server">
<style>
TD.ms-titleareaframe, .ms-pagetitleareaframe {
height: 10px;
}
Div.ms-titleareaframe {
height: 100%;
}
.ms-pagetitleareaframe table {
background: none;
height: 10px;
}
</style>
</asp:Content>

The first content tag blanks the ‘page icon’ placeholder, which is above and to the left the white ‘main content area’ of a page. It is set to show a 1 pixel transparent image, and it appears that this is to maintain page structure, where setting the content to nothing might allow the table cell to collapse. And I thought that 1 pixel transparent gifs were so 1992.

The second content tag reduces the space available for the ‘page title area’ through CSS. It overrides some of the styles to do this. Of course, this relies on your master page using those styles, or having that structure – so if you’re planning on creating a custom master page, you’d better think of all custom page layouts too. I’m not really convinced about that as design – it seems to me that this makes creating a new, radically different master page even harder, as the page layouts must be rebuilt too.

Page Layouts, Breadcrumbs, and the space above the main content area of a page.

Filtering ListView Web Parts and Spurious Error Messages

I was working with a customer on building a glossary in SharePoint. We had a list of terms, containing things link ‘Term’, ‘Description’ and ‘First Letter’. They wanted, on a page for the site, to show the terms, and allow filtering based on the first letter.

I set up a page with a ListView web part and a filter web part. The filter web part would supply the letter we wanted to filter by to the ListView, which would then filter on the first letter column. As a side note, I started by using the Choice Filter web part, which isn’t just a drop-down list but is rather uglier – so in the end I just used a QueryString Filter web part and built my own navigation for the filter. This was why I ended up looking at how to show query string parameters within a page.

Anyway, this worked nicely – except that the ‘First Letter’ column on a web part is a little redundant if you are filtering by that letter already. Thus, we tried removing that column from the list view web part, and got the spurious message:

This page has exceeded its data fetch limit for connected Web Parts. Try disconnecting one or more Web Parts to correct the problem

Initially I thought that this was because we had 700 items in the actual glossary I was now building against (previously I’d just prototyped it with a half dozen items) – but to not be able to filter over that is pretty rubbish. However, when I put the ‘First Letter’ column back into the ListView, the error went away. So, if you get this error, make sure the thing you are filtering by is visible as a column in the ListView.

Filtering ListView Web Parts and Spurious Error Messages

Good quick guide on "Showing list items from another site"

As usual, a good article from U2U on “Showing list items from another site“. This is very useful with the DataView web part, though as noted at the bottom there are some limitations – particularly the lack of views, and editing. It’s worth reading the article, but in short (for my own memory), in SharePoint Designer:

  1. Manage data sources
  2. Connect to another Library (by which they really mean ‘Site’ – use the site url, not the library url)
  3. Drag data in as DataView web part
  4. Use smart tags to set up columns, filters, grouping, pagination, etc..
Good quick guide on "Showing list items from another site"

KPI Icons neatly designed for colour blindness

I was talking with one of our customers about SharePoint branding the other day. They’ve got some neat icons for displaying the status of things. However, the guy I was talking to wasn’t keen on them as they were the same colour (although their shape differs). This sort of led around to a discussion of the use of colour (or ‘color’) in web development.

One of my ‘neat tools to have around’ is the Color Contrast Analyzer (which I think you can get here -I must confess, I’m not sure who exactly wrote it or where exactly you’re supposed to get it from). This little tool lets you check the contrast of colour schemes so that your users will be able to use the site, even if they’re colour blind. Fair enough. The really exciting bit, though, is the ability to take screenshots and then simulate the different types of colour blindness.

I used this to look at the SharePoint KPI icons. Similar icons to this are available in Excel 2007 for conditional formatting. I thought this was pretty interesting. For a start, it turns out that colour blindness is more complicated that just “red-green-blue” colour blindness, not least because the photoreceptors for the different colours overlap in their response to different frequencies of light. Still, this tool give a good view of the effects of the main conditions. For a full description, read this article at Wikipedia.

KPI - Normal
Normal
KPI - Greyscale
GreyScale
KPI - Deuteranopia (Red-Green Colour Blindness)
Deuteranopia (Red-Green Colour Blindness)
KPI - Protanopia (Different Form of Red-Green Colour Blindness)
Protanopia (Different Form of Red-Green Colour Blindness)
KPI - Tritanopia (Blue-Yellow Colour Blindness)
Tritanopia (Blue-Yellow Colour Blindness)

What this shows is pretty obvious – that the icons from red and green are pretty similar for red-green types of colour blindness (what a surprise), but that the shape of the icons still gives a good visual cue to the state of the KPI. Given that (according to Wikipedia) 7-10% of men are Red-green colour blind, this is important. It’s worth noting that women are very rarely colour blind, and that this probably explains my Dad’s dress sense and my Mum’s opinions on it…

KPI Icons neatly designed for colour blindness