Using the PortalSiteMapProvider

I recently had a customer who wanted a simple web part that just listed the subsites of a site – something like what you see in SharePoint’s “View All Site Content” page, but for a couple of levels, rather than just one. Obviously, this would be quite simple to do directly by traversing the SPWeb object and it’s children, but it struck me that there must be a better, standard way – ideally one that uses a bit of caching or optimisation.

I found myself looking at the PortalSiteMapProvider for the first time. I’ve written my own NavigationProviders before now, and I’ve used some of the out of the box ones, but the PortalSiteMapProvider is an object I’ve never really used, or become familiar with. Here’s what I found… Read more »

System.Web.UI.WebControls.WebParts in ONET.xml

Came a cropper on this one today – using web parts based on System.Web.UI.WebControls.WebParts.WebPart in a Site Definition. Unlike the Microsoft.SharePoint.WebPartPages base web part, ASP.NET 2.0 ones need a <webParts /> tag around your <webPart> tag – other wise you get the error:

Cannot recognize the xml namespace of this web part

Joris Poelmans has a good description of the problem, and that was where I read the solution – it saved me a tonne of time.

Weird toolbar on Custom Document Library

I’ve been writing a custom document Library Definition. Well, I say I was writing – I actually created it in SharePoint, and used the Solution Generator in the Visual Studio Extensions for WSS3 to produce the CAML and .aspx files.

Having done this, however, one of the views in  my document library was a bit strange. Somehow, for this one view, the ‘New’ and ‘Upload’ menus were missing:

Weird View (BaseType 3)

They were there for other views, just not this one. After examining the CAML (which sounds like some sort of euphemism) I found that the problem seemed to relate to the BaseViewID for the view. Read more »

C# Code to send an email

I’ve been doing some testing of email enabled lists, and I needed to send quite a lot of emails, so I wrote a little console app to do it. Here’s the core of the code I used, in case I need it again, or it’s useful to someone. It uses System.Net.Mail:

SmtpClient smtp = new SmtpClient(@"vm-moss2007.virtual.local");
for (int i = 1; i <= 100; i++)
{
    MailMessage message = new MailMessage("administrator@virtual.local", <a href="mailto:testlist@sharepoint.virtual.local">testlist@sharepoint.virtual.local</a>);
    message.Subject = string.Format("Message {0}", i);
    message.Body = string.Format("This is message '{0}'", i);
    Console.WriteLine("Sending {0}", i);
    smtp.Send(message);
}

Having many content types on a list

The question came up the other day – what happens if you have a lot of content types attached to a SharePoint list. Say, for example, a hundred? The ‘New’ menu might get a little, um, large. Well, I used the code for programmatically creating a content type from the other day to create and attach lot of content types. Read more »

Programmatically Create Content Types

This is an example of programmatically creating a content type (based on the Document content type) and adding it to a list. I’ve not added any extra columns or anything – but we could have.

string name = ...
SPList list = ...
SPContentType baseContentType = web.ContentTypes[SPBuiltInContentTypeId.Document];
SPContentType type = new SPContentType(baseContentType,web.ContentTypes,name);
list.ContentTypes.Add(type);
list.Update();

Programmatically create documents in Libraries

One thing that it can be useful to do sometimes is create documents in a library, possibly with some metadata. I find that I sometimes end up doing this from a console app, just to put in some example information:

string filePath = ...
string newName = ...
SPList library = ...
using (FileStream fs = new FileStream(filePath,FileMode.Open)){
SPFile file = library.RootFolder.Files.Add( newName ,fs, true );
SPListItem item = file.Item;
item["SomeField"] = "SomeValue";
item.Update();
}

Observations on SharePoint 2007’s irritating Audit

Auditing with SharePoint 2007 is something that I’ve managed to avoid playing with until our current project. Frankly, this has mainly been because the user interface for audit details is inadequate out of the box. Most other systems, you just go to a page, and see what happened to that item.

Anyway now that I’ve started to take a look at it in more detail, I notice a few other minor problems with it… Read more »

Installing SharePoint on a K2 Server

Okay, so I’ve not been blogging much recently as I have been sidetracked onto exciting deployment tests for the system we’ve been working on. However, I did come across this interesting issue…

Normally, if I were having K2 BlackPearl on the same box as SharePoint, I would install SharePoint first, then K2. This seems to work without much fuss, and is the right way of doing it.

However, this time I had installed K2, and was now trying to install SharePoint (long story). However, SharePoint’s installer kept failing (using the SP2 with cumumlative updates to April, in a slipstream installer). It simply would not complete successfully.

Eventually, we tracked this down to the SQL 2005 Report Viewer. We uninstalled (via ‘Add an Remove Progams’) the ‘Microsoft Report Viewer Redistributable 2005′ program, stopped the K2 BlackPearl service, and tried installing SharePoint again. It worked.

Of course, the idea would be, don’t have the two on the same box. But just in case someone else tries the same thing.

And I hope I’ll get back to development soon.

How I simplified the Users and Group UI – Conclusion

So, I thought a little wrap up of what we’ve seen and how I figured all this out. Much of what we’ve looked it is just a simplified version of the standard ‘People and Groups’ pages, and a lot of digging around with reflector was involved!

We’ve seen:

  • That listing users is fairly simple using some ‘magic values’, but that supporting the ‘View Selector’ is a bit more complex!
  • That resolving the MembershipGroupId GET parameter is important, but pretty simple, and that there are many ways you could choose to do this.
  • That adding users is pretty simple too – it’s just the sort of SharePoint API code you’d get asked about in the WSS3 App Dev exam.
  • That removing users is a bit yucky – JavaScript to get the IDs of selected users – but again, the code itself is pretty straightforward.

Now the moment you’ve been waiting for – the code for the 3 pages we’ve used itself. Note that I’ve also used a custom Master page for my sites – you’ll want to build your own, with your own navigation, etc..

  • Introduction
  • How to Display a list of users
  • How to Find the MembershipGroupId
  • How to Add Users
  • How to Remove Users
  • Conclusion
  • « Previous PageNext Page »

     Subscribe in a reader