When using SPS 2003 some of the business coordinators requested a way to allow users to manage permissions whilst not being able to create a new sub-site. This was not possible out of the box as the administrator role allowed the user to create new sub-sites as well as manage permissions.

In MOSS 2007 this is now possible by ceating a new site permission.

1. Go to Site Action Menu.
2. On that menu, go to Site Settings.
3. Choose People and Groups
4. On the quick launch bar, there is a link to Site Permissions.
5. On the Settings menu, select Permission Levels.
6. On the Permission Level page, select new to create a new permission level.
7. Add the permission that you want (in this case, Manage Permissions but not Create Subsites).
8. Name it Permissions Manager
9. You can now assign users to that permission level

MOSS 2007 provides a mechanism to deploy content from one farm to another. This is most useful when you are using the publishing site template to produce Internet sites and allows you to set up deployment schedules for the content that web editors are producing.

First you need to set up a path that tells MOSS what to deploy and where to deploy it to. A job is then created that uses the path and allows you to select specific content and how often it should be deployed.

The first time I ran a job I got an error saying that some lists and libraries already existed and the job failed. This is because you have to deploy to a site collection that was created using the blank site template ie. it has no template at all.

After a site has been deployed for the first time if a site column is removed from a content type then the same column on the destination site collection will also need to be removed otherwise the following error is reported and the deployment fails:

Site columns which are included in content types or on lists cannot be deleted. Please remove all instances of this site column prior to deleting it.

I have a custom web part search box that has a button next to it that directs the user to the search results page for the query that has been entered. What I also want to do is have that same code fire when the user presses enter. With the asp:textbox control this didn't look as if it was going to be very simple as the text changed event does not fire on every key press. Instead it fires when the control loses focus.

Fortunately pressing enter causes the control to lose focus so it turns out that it is simple as calling the executequery method in the text changed event like this:

I need to copy some documents from a SharePoint 2003 server to a MOSS 2007 server to make them available on our Internet sites. This is quite easily achieved using the object model but what I also need is to move the metadata associated with the document so I can filter correctly on the Internet site.

To do this I have started by creating a couple of methods. One to download the document from SharePoint to a file system folder and create an xml document that contains the metadata in the same folder. The second method uploads the document with it the metadata to a destination SharePoint document library.

The second method then takes the downloaded files and uploads them to the Internet server document library. You may need to find a way to physically move the files across the network using FTP or something similar depending on where your Internet server is and what security surrounds it.

ASP.Net is great but many of the controls use table tags when they render. I am currently in the process of developing some Internet sites using MOSS 2007 which need to meet accessibility guidelines so these controls, in their out of the box state, are no use to me. We have tried applying the CSS adapters that get rid of the tables but this also had the effect of removing tables from the site settings screens making them difficult to use.

The solution we are going for is to create new controls that inherit from the base control. The new control then overrides the render event to remove the non-compliant tags and replaces them with compliant ones.

We are also using this method to add script to the master pages which removes table tags from web part zones etc.

DISCLAIMER - I have created a non-tabular control for the SPGridView. You could argue that the SPGridView presents tabular data so does not need any changes to the rendered HTML, you would probably be right but this example shows what can be done. :-)

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Web.UI;
using System.Text.RegularExpressions;
using System.IO;