An important part of design and usability is building UI prototypes so that you can explore different visual models and test the designs with real users. Sometimes the simple process of clicking through screens in a prototype can reveal inefficient visual models or difficult tasks that can be made easier.
For my prototypes, I like to use Visio. Visio makes it easy to rearrange a layout, create a click-through, and the professional version comes with the Windows XP User Interface template which has pre-built shapes for windows, text boxes, scroll bars, buttons, radio buttons, and check boxes.
Here's some quick steps to get you started making UI prototypes in Visio.
Create a new Visio document
If you have Visio Professional, I like to start with the Windows XP User interface template. Otherwise, you can start with Basic Flowchart.
Set the Page Orientation and Title
If the default page size is not already in landscape, you can fix this by Creating a new page from Insert > New Page ... and from the Print Setup tab, select landscape. This will make the page resemble the format of a computer screen.
You will also want to rename the page from "Page-1" to something more descriptive like "Home". If you keep the number, Visio will automatically renumber pages when earlier pages are deleted, which can mess up the click through later on.
Create the Containing Window
If you are building a client application and are using the Windows XP User interface template, you can drag the Blank form shape (Windows and Dialogs group) onto the page. You can then size it, change the title, and change properties like the background color:
If you are creating a web application, you'll need to do a little more work. You'll start with a screen shot and edit it to look like a blank window. For example, if you want the window to be Internet Explorer, open IE to the desired size on a blank page such as about:Blank. Then, select the window and press alt-PrtSc (the print screen button is usually next to the Pause button on your keyboard in the upper right). Now, open up Paint and ctrl-v to paste the screen shot.
Now you'll want to tidy up the image by deleting the url from the address bar and clearing the text on the tabs. As you'll notice, the tabs have a gradient. An easy way to clear over this is to highlight a part of the gradient with no text, and then drag the handle bars:
Once your image is ready, select it, copy it, and paste it into Visio.
Add shapes
Now you can start your design. In the early stages, you can use simple rectangles to represent the design elements. Once you're more confident about the design, you can use the technique above to reuse elements from screenshots.
Rearrange shapes
Now you can really start to have fun. drag the items around, try switching vertical elements to horizontal elements, change the order of elements.
If you're having trouble selecting the right elements, try clicking in an area where there are no shapes and drag onto the main area.
Create a new Page
When creating a prototype, we'll need a separate page for each step in the click through, such as opening a menu or browsing to another page.
Create a new page from the Insert > New Page menu, and give it a new name.
Copy shapes from the first page into the new page
Visio will always paste shapes into the center of the screen, so you'll need to make sure that your page is centered before pasting. You can do this from the Zoom menu, or directly add the "Whole Page" button to your toolbar:
Now, ctrl-a, ctrl-c on the first page, and on the second page, zoom to Page, and then ctrl-v.
Now you have two duplicate pages, and you can edit the second page to make the changes for the next step.
Add Clickable areas
Now we can make different shapes clickable by adding hyperlinks. Select the shape and press ctrl-k, or choose Insert > Hyperlink.
In the Sub-address box, type the name of the page that you want to link to, or click on Browse... to choose the page from a list.

The hyperlinks won't work in normal editing mode, but when you go into full screen mode by pressing F5, you can use the hyperlinks.
Save and Export
A lot of the time you'll want to share these prototypes. A good way to do this is to save as a web page:

Happy Prototyping!
A pretty common request is the ability to display content from one site on another site. For example, you might have a blog sub site, and want to show those posts on the home page of the parent site.
In WSS V3, this is easy to do with SharePoint Designer.
First, we'll open the site and page we where we want to display the list in SharePoint Designer. One way to do this is to open SharePoint Designer and choose "Open Site..." from the File menu. Another way is to browse to the page and then click the "Edit with Microsoft Office SharePoint Designer" option in Internet Explorer:
Inside SharePoint Designer, in the design view of the page, click where you want the list to go, and then select "Insert Data View" from the Data View menu:

In the Data Source Library Task Pane, select "Connect to another library...", since we want to display a list that is not in this site:
Click Add, then choose a display name, and type in the URL to the site where the list is:
Click OK in both dialogs, and then expand the new Library until you find the list you want:
Next, click on the list and select "Show Data":
Now the task pane shows the columns from the list:
You can now insert the items by selecting "Multiple Item View" from the insert menu:
Let's start by changing the layout:
The Repeating Form layout is close to the blog layout:
Text fields are HTML encoded by default. To fix this, click on the arrow near the body field, and change the Format as: to Rich Text:

You can now remove column headers and edit any styles that you like:
To make a field into a link, set the format to be Hyperlink. In the popup box, you can set the URL, and you can include values from the item by clicking the "fx" button:
When you're done, save the page, and view it in the browser:

SharePoint Wikis combine the easy editing and linking capabilities of a wiki with the power of SharePoint metadata, web parts, and views. This makes it seamless to find the right balance of structured and freeform information.
Here's what the out-of-the-box (OOB) Wiki looks like:
Here's what a wiki with additional columns looks like:
Here's what the editing experience looks like:
Here is a wiki page with a dynamic table:
Sound interesting? Let me show you how to do it yourself:
Get to the Wiki Pages library by clicking on "Wiki Pages" in the breadcrumb or on the Quick Launch. Then create a new column by selecting "Create Column" from the Settings menu.

Choose the settings for the new column, and repeat for each additional column.
To add the dynamic table to the page, first put the page in edit mode by selecting "Edit Page" from the Site Actions menu. This is different than editing the page by clicking the "Edit" link in the toolbar above the Wiki content.
Now you can click on "Add a Web Part", and then select the library with the wiki pages:
This will place a default view on the page. To edit the view, select "Modify Shared Web Part" from the web part edit menu, and then click on Edit the current view.
I hope this has been helpful!
In WSS V3, we added categories to the site definitions so that it would be easier to find the site template you're looking for. By default, the first tab is selected when the page loads. However, you can change the default tab by appending the query string parameter: DisplayCategory=CategoryName to make that category be the default.
For Example:
http://server/_layouts/newsbweb.aspx?DisplayCategory=Meetings
I was looking around and realized that I couldn't find an easy set of instructions to set up Content Deployment in Microsoft Office SharePoint Server.
In this post, I'll show you how to set up content deployment from a staging site collection to a production site collection. For simplicity, I will host both site collections on the same server.
For a background on content deployment, see: http://blogs.msdn.com/sharepoint/archive/2006/05/02/588140.aspx
Create Production Site Collection
When setting up a content deployment path, the site collections must be in separate content databases so that the unique identifiers (GUIDs) do not conflict. The easiest way to ensure that the production site collection is in a different content database is to create it in a new web application.
Open Central Administration:
Under Application Management:
Select Create or extend Web application:
Select Create a new Web Application:
Choose an easy to remember port number, such as 12345:
Type in a user name and credentials to create a new app pool:
Type in a descriptive database name such as MOSS_PRODUCTION:
Leave all other settings at the default and click OK, then wait for the Web application to be created:
Click Create Site Collection:
Ensure that your new Web Application is selected:
Type in any name for the Title (it will be overwritten later):
Select "Blank Site" as the template. This step is IMPORTANT, because Blank Site is the only template that you can import any other template into:
Type in the names for the site collection owners:
Click OK.
Allow Incoming Content Deployment Jobs on the Production Site
Select Operation:
Select Content deployment settings:
Select Accept incoming content deployment jobs:
Select Do not require encryption and click OK:
Create Content Deployment Path from Staging to Production
Select Content deployment paths and jobs:
Click New Path:
Type a descriptive name for the path. Select the web application and site collection for the staging site. Then type in the URL of the Central Administration web site of the production site. Since we are putting both of our sites on the same server farm, the URL is the farm that we are on now.
Click Connect:
Once you see "Connection succeeded", select the web application and site collection that you created for production. You can also choose to deploy user names and security if you want the new site to have the same users and permissions.
Click OK.
Create Content Deployment Job
Click New Job:
Type a name, and then select the path you created:
Keep all other default values, and click OK.
Run Content Deployment Job
From the context menu on the job, select Run Now:
Refresh the page, and then click on the text Running:
Watch the status of the job:
When the status changes to Succeeded, you can click on the URL to the production site to verify that the content was deployed.
Run Quick Deploy Job
Select Quick Deploy Settings from the Quick Deploy context menu:
Select Allow Quick Deploy jobs along this path, and set the schedule to check every 10 minutes, then click OK:
Visit the staging site and edit a page:
Make some changes:
Publish the page:
Show the page editing toolbar:
From the Tools menu, select Quick Deploy:
The changes will be picked up and deployed to production within 10 minute:
References
Content Deployment Post by Tyler Butler:
http://blogs.msdn.com/sharepoint/archive/2006/05/02/588140.aspx
MOSS SDK on Content Deployment:
http://msdn2.microsoft.com/en-us/library/ms549024.aspx
TechNet on Plan Content Deployment:
http://technet2.microsoft.com/Office/f/?en-us/library/edcdacca-8013-460e-95a0-d2b83b6cc7ef1033.mspx
TechNet on Design Content Deployment Topology:
http://technet2.microsoft.com/Office/f/?en-us/library/1d6d6040-6cbb-4685-a40e-1e9086d426831033.mspx
When we were designing blogs in SharePoint, we didn't just want to build a great blog, we wanted to build a great blog using the platform capabilities the SharePoint provides.
One of the new platform features we built to support blogs is the Lookup (Count Related) Column type. A lookup count column is a special type of computed field that computes the number of items in the target list that point to the current item.
Here's how it works for blogs:
The Comments list has a column called "Post Title" which is a Lookup to the Posts list.

The Posts list has a column called "# Comments" which is a Lookup to the Comments list. SharePoint knows that Post Title is a lookup to the current list, and so it displays the option to make this a Count Related column.

You can use this functionality in your sites anywhere you want to count up the number of items that lookup to the current item.
A great place this would be useful is if you wanted to create a podcast or screencast blog. The default SharePoint blog does not support enclosures in the RSS feed, but SharePoint document libraries do support enclosures. You could create a document library for your posts, where the document is the sound or video file. You could then enable comments by creating a comment list that looks up to the library, and a lookup count column that points back to the comments list.

The other interesting RSS setting for document libraries is "Link RSS items directly to their files". When this is set to No, the link will go to the display form for the document library item. When it is set to Yes, the link will go to the document.
The SharePoint Content Migration APIs, previously known as the PRIME APIs, are an incredibly powerful tool, not just for content migration and content deployment, but also for:
Creating reusable templates
Changing the site definition of an existing site
Creating replication solutions
Modifying properties that are not exposed through the object model
Creating SharePoint sites programmatically for distribution
At its simplest, content migration exports a site or part of a site into a file known as a content migration package. The content migration package is actually a cab file that contains several xml files and dat files. Then, the package can be moved and imported into a new site.
The power of the content migration packages is that the amount of information exported can be modified for different purposes, and then the xml files in the resulting package can be edited. This gives you supported ways to view and edit the structure and properties of your site in a format that is both human and machine readable.
Copying or Moving a Site
The easiest content migration task is creating a copy of a site using the stsadm utility. This method can also be used to move a site, or to move a sub site into its own site collection.
Note: The new site will not be an exact copy of the original. If a user was subscribed to an alert on the original site, they will not be subscribed to an alert on the new site. If items were in the recycle bin on the original site, they will not exist in the new site. For more information, see: Content Migration Overview.
Steps:
- Export the Site
- Create the new Site Collection, if necessary
- Import the Site
Export the Site
To view the options for exporting a site:
C:\>stsadm -help export
stsadm.exe -o export
-url <URL to be exported>
-filename <export file name>
[-overwrite]
[-includeusersecurity]
[-haltonwarning]
[-haltonfatalerror]
[-nologfile]
[-versions <1-4>
1 - Last major version for files and list items (default)
2 - The current version, either the last major or the last minor
3 - Last major and last minor version for files and list items
4 - All versions for files and list items]
[-cabsize <integer from 1-1024 megabytes> (default: 25)]
[-nofilecompression]
[-quiet]
To run the export:
C:\>stsadm –o export –url http://url/to/site -filename c:\exportfile.cmp
–includeusersecurity –versions 4
This will export the site specified at the url, and the sub sites beneath it. The includeusersecurity switch causes the new site to have the same permissions as the original site. The versions switch set to 4 specifies that all versions should be included.
Pay special attention to the nofilecompression switch. It will cause the content migration package to be output to an uncompressed folder instead of a single cab file. This makes it harder to move to a different machine, but makes it much easier to edit the files.
Create New Site Collection
Content Migration will export Sites, but not Site Collection. If you want to copy the site into another site in the same site collection, or into another site in an existing site collection, you can skip this step.
New Site Collections can be created through the Central Administration UI, or through the stsadm utility.
C:\>stsadm -help createsite
stsadm.exe -o createsite
-url <url>
-owneremail <someone@example.com>
[-ownerlogin <DOMAIN\name>]
[-ownername <display name>]
[-secondaryemail <someone@example.com>]
[-secondarylogin <DOMAIN\name>]
[-secondaryname <display name>]
[-lcid <language>]
[-sitetemplate <site template>]
[-title <site title>]
[-description <site description>]
[-hostheaderwebapplicationurl <web application url>]
[-quota <quota template>]
When creating a new site collection, be sure that the top level site either does not have a site template (omit the –sitetemplate switch), uses the blank site template, or uses the same site template as the exported site.
Import the Site
The content migration package can be imported to the same site collection as the original site, a new site collection, or even a new farm.
To view the options for importing a site:
C:\>stsadm -help import
stsadm.exe -o import
-url <URL to import to>
-filename <import file name>
[-includeusersecurity]
[-haltonwarning]
[-haltonfatalerror]
[-nologfile]
[-updateversions <1-3>
1 - Add new versions to the current file (default)
2 - Overwrite the file and all its versions (delete then insert)
3 - Ignore the file if it exists on the destination]
[-nofilecompression]
[-quiet]
To run the import:
C:\>stsadm –o import –url http://url/to/new/site -filename c:\exportfile.cmp
–includeusersecurity
Congratulations, you have now created a copy of your site.
To move a site, you can now delete the original site, and be sure to let all site members know the new url.
Creating a Reusable Template
An easy way to create a reusable template is to choose "Save site as template" from the Site Settings page. If the save site as template method meets your needs, you should use it, since it is simple and doesn't require box admin privileges to create or use the template.
In some cases, the save site as template method will not meet your needs. For example, site templates have a maximum file size (10 MB by default, increasable to 500 MB) and cannot be created from publishing sites, such as the Publishing Portal. In these cases, you can use content migration to achieve similar functionality.
Steps:
- Create the template site and make all desired changes
- Export the site as described above, but without the includeusersecurity switch
- To create a site from the template, Import the site as described above
Changing the Site Definition of an Existing Site
As you might know, it is not possible to change the site definition of a site after it is created. In many cases this is not a problem, because you can often activate feature to give a site functionality that is usually found on a different site definition.
However, there are times when you may want to change the site definition, such as to enable functionality that is hard coded to a site definition (such as the metaweblog APIs on the BLOG definition), or to move a site from a custom site definition to an OOB definition.
With content migration you can export a site, edit the package to change the site definition, and then import the package into a new site with that definition.
Steps:
- Export the site with the nofilecompression switch, so that the package will be easy to modify
Edit the content migration package
- Change the WebTemplate property of the web to indicate the new site definition
- Update the SetupPath properties of any files that came from the old site definition
- Delete the old site
- Import the package into a new site at the same url as the old site
Export the Site
Export the site as described above, but include the nofilecompression switch so that the site will be exported to a folder. This enables you to avoid the steps of decompressing the cab file and recreating the cab file.
To run the export:
C:\>stsadm –o export –url http://url/to/site -filename c:\exportfolder –includeusersecurity –versions 4 -nofilecompression
Edit the Content Migration Package
Browse to the folder specified above. The folder will have many dat files which represent the files from the site including views, forms, pages, and documents.
The file Manifest.xml stores all of the properties and metadata about the site, lists, and items. Open it using Notepad or Visual Studio.
For more information, see: Working with a content migration package.
Change the WebTemplate property
Find the WebTemplate attribute of the Web element for the site you want to change and change it to the name of the new Site Definition. Repeat this for any other sites that you would like to change to a new definition.
<Web Id="bef0732d-8270-4029-bc19-02908c8334fe" Name="" Description=""
Locale="English (United States)" CurrencyLocaleId="1033" Language="1033"
TimeZoneId="78" Time24="false" CalendarType="1" AdjustHijriDays="0"
Collation="25" RegionalSettingsLocaleId="1033" AlternateCalendarType="0"
ShowWeeks="false" FirstWeekOfYear="0" WorkDays="62" WorkDayStartHour="480"
WorkDayEndHour="1020" FirstDayOfWeek="0" Configuration="0" PresenceEnabled="true"
SyndicationEnabled="true" QuickLaunchEnabled="true" TreeViewEnabled="false"
ParserEnabled="true" Provisioned="true" ParentId="00000000-0000-0000-0000-000000000000"
IsRootWeb="true" Title="test" ServerRelativeUrl="/sites/test" WebTemplate="BLOG"
AlternateCssUrl="" CustomizedCssFiles="" CustomJSUrl="" IncludeSupportingFolders="false"
RootFolderId="fe983ea4-f376-4b86-bc64-f6f9875dbd68" SystemCatalogsIncluded="true"
SecurityProvider="00000000-0000-0000-0000-000000000000"
MasterUrl="/sites/test/_catalogs/masterpage/default.master"
CustomMasterUrl="/sites/test/_catalogs/masterpage/default.master"
Created="2007-02-21T22:20:32Z" Author="1" SiteLogoDescription=""
HasUniqueRoleDefinitions="true" HasUniqueRoleAssignments="true"
RequestAccessEmail="administrator@litwareinc.com">
Change the SetupPath properties.
The SetupPath is the location on the file system where the original file lives, for files that were created from a site definition. This location is important because if a file has not been unghosted, meaning that it has not been modified in SharePoint Designer (or other similar application), the actual file from the file system is displayed (for improved performance).
Also, if a file has been modified, when the user selects "reset to site definition", it resets the file to the one found at the setup path.
If you are changing a site from one default template to another, you may not want to modify the setup paths.
If you are changing a site from a custom site definition to a default template, you may want to update the setup paths so that the pages will point to the files from the default definition and not the custom definition.
If you have upgraded a V2 custom site definition and want to move to V3 default definition, you can use the mappings in 12\config\upgrade\wssupgrade.xml to help you determine the correct new setup paths. Also, be sure to update the SetupPathVersion attribute.
<SPObject Id="6752a91b-811f-49eb-8dbd-38479ba21b23" ObjectType="SPFile"
ParentId="1e992cab-0a5e-46ba-bcda-95144d66cd78"
ParentWebId="bef0732d-8270-4029-bc19-02908c8334fe" ParentWebUrl="/sites/test"
Url="/sites/test/_catalogs/lt/Forms/AllItems.aspx">
<File Url="_catalogs/lt/Forms/AllItems.aspx" Id="6752a91b-811f-49eb-8dbd-38479ba21b23"
ParentWebId="bef0732d-8270-4029-bc19-02908c8334fe" ParentWebUrl="/sites/test"
Name="AllItems.aspx" ListId="7ac7eef1-ca61-4ec3-9d16-146b2ba02892"
ParentId="1e992cab-0a5e-46ba-bcda-95144d66cd78"
TimeCreated="2007-02-21T14:20:37" TimeLastModified="2007-02-21T14:20:37"
Version="1.0" IsGhosted="true"
SetupPath="pages\viewpage.aspx" SetupPathVersion="3"
SetupPathUser="1073741823" FileValue="00000000.dat">
<WebParts>
<WebPart Name="44a44ab9-1680-4d1f-912d-ae6036c4637f" Flags="1"
Hidden="false" Threaded="false" ReadOnly="false"
RecurrenceRowset="false" FPModified="false" ModerationType=""
Personal="false" OrderedView="false"
ListId="7ac7eef1-ca61-4ec3-9d16-146b2ba02892" Version="1"
DisplayName="All Templates" BaseViewID="1" Level="major"
WebPartZoneID="Main"
WebPartTypeId="2242cce6-491a-657a-c8ee-b10a2a993eda"
IsIncluded="true" WebPartOrder="1" Type="0" FrameState="0" />
</WebParts>
</File>
</SPObject>
Delete the Old Site
If you want the new site to have the same URL, you will have to delete the existing site.
First, make a backup of the site using SQL or SharePoint:
C:\>stsadm -help backup
For site collection backup:
stsadm.exe -o backup
-url <url>
-filename <filename>
[-overwrite]
For catastrophic backup:
stsadm.exe -o backup
-directory <UNC path>
-backupmethod <full | differential>
[-item <created path from tree>]
[-percentage <integer between 1 and 100>]
[-backupthreads <integer between 1 and 10>]
[-showtree]
[-quiet]
Next, if the site is the top level site, record the site collection level settings such as the quota and site collection administrators.
Next, delete the site.
C:\>stsadm -help deleteweb
stsadm.exe -o deleteweb
-url <url>
Finally, if the site was a top level site, create a new site collection and apply the settings, being sure to omit the sitetemplate switch.
C:\>stsadm -help createsite
stsadm.exe -o createsite
-url <url>
-owneremail <someone@example.com>
[-ownerlogin <DOMAIN\name>]
[-ownername <display name>]
[-secondaryemail <someone@example.com>]
[-secondarylogin <DOMAIN\name>]
[-secondaryname <display name>]
[-lcid <language>]
[-sitetemplate <site template>]
[-title <site title>]
[-description <site description>]
[-hostheaderwebapplicationurl <web application url>]
[-quota <quota template>]
Import the Site
Import the site as described above, but include the nofilecompression switch so that the site will be imported from the folder. This enables you to avoid the steps of decompressing the cab file and recreating the cab file.
To run the import:
C:\>stsadm –o import –url http://url/to/new/site -filename c:\exportfolder
–includeusersecurity
Summary
Hopefully this has provided you with helpful information, and a sense of how powerful the content migration APIs are. Please let me know any feedback or questions you have.
Jackie
Good Morning World!
My name is Jackie Bodine, and I'm a consultant at Microsoft. I've been working with SharePoint since 2002 when I was a program manager intern with Windows SharePoint Services. After I graduated from Cornell, I joined the WSS program manager team full time.
As a program manager, I was responsible for a lot of the fun new collaboration features such as Wikis and Blogs, and also for some important infrastructure pieces such as Navigation (how to get around and between sites), and the Alerts infrastructure that sends out emails when something on the site changes. Finally, I also was able to help out a lot with the new visual User Interface, making decisions around how to best use screen real estate, improve usability, and ensure a professional level of consistency.
Those features areas gave me a lot of opportunity to work with all of the teams that make up the Microsoft Office SharePoint Server family, and last March I was fortunate enought to present on the Web Content Management capabilities of MOSS at Mix06.
In April I decided to move back to New York, but I just couldn't bear to leave SharePoint, so I stayed with Microsoft and moved to the consulting side. Now I get to visit customers and help them experience the joys of SharePoint! I've tackled lots of interesting requirements, and learned a lot of useful techniques for getting the most out of SharePoint.
In this blog, I'll share the tips, tricks, and techniques that I've learned along the way.
Here are some of the topics I'd like to cover:
- Writing a Site Definition for a B2TR Publishing Site with custom page layouts, master pages, xslt, etc.
- Provision Styles for CBQ
- Reusing Blog Functionality and customizing
- Reusing Wiki Functionality and customizing
- Building a master page
- Customizing alerts
- Customizing navigation
- Displaying Flyouts
- Using ViewStyles
- Group By Views
- Lookup (Count Related)
- Putting the Blog on a parent site
- SPJobDefinition
- PRIME
- Control Templates
Jackie's Blog RSS