How to create a SharePoint slipstream using the latest updates(referred)

With the announcement of the December 2008 Cumulative Update and the changes in the software update model it brings, we felt it was a good time to revisit the topic of slipstreaming. This post provides the process for creating a slipstream installation source that uses the December 2008 CU as an example. You can simply replace the December 2008 CU with the February 2009 CU, April 2009 CU, and so on going forward because the process will be the same.

Here are the steps to create a slipstream to the latest bits:

1. Copy the RTM (release) media into a new local folder such as C:\SPSlipstream
2. Extract SP1 and copy the extracted contents into the C:\SPSlipstream\UPDATES folder that was copied when you performed step 1.
3. Extract the December 2008 CU and copy the contents into the C:\SPSlipstream\UPDATES folder.
4. If you are not using Windows SharePoint Services only, delete the wsssetup.dll file from C:\SPSlipstream\UPDATES folder.

A few notes:

1. Use the following command to extract a software package to a folder: /extract:C:\myfolder to extract to C:\myfolder. If you already agree to the EULA, use the /quiet switch to suppress the EULA.
2. If you have a Windows SharePoint Services-only deployment, SP1 above is defined as Windows SharePoint Services SP1 while December 2008 CU is defined as the December 2008 Windows SharePoint Services CU package.
3. If you have a Microsoft Office SharePoint Server 2007 deployment, SP1 above is defined as both Windows SharePoint Services SP1 and Microsoft Office SharePoint Server 2007 SP1 while December 2008 CU is defined as the December 2008 Windows SharePoint Services CU package and the December 2008 Microsoft Office SharePoint Server 2007 CU package.
4. If you have a Project Server deployment, first pick either A or B, and for SP1 add Project Server SP1 to the slipstream source. For the December 2008 CU you can simply install the Microsoft Office SharePoint Server 2007 CU package (even if Microsoft Office SharePoint Server 2007 is not deployed).
5. If you follow this process with the December 2008 CU and want to use it again for the next cumulative update, you can either
1. Choose to start over the process from scratch.
2. Repeat steps 3-4 and add the next CU to your existing slipstream.

FAQ [Updated on 01/13/09]:

Q1. What about Infrastructure Update? Is it included in December CU?
A: Yes, it is included.

Q2. How do you include language packs?
A: The original Language Packs included wsslpk.msi and wssmui.msi. These are in the specific locale of the language pack itself. We updated both of these at SP1. The WSSMUI package specifically has been updated through hotfixes (including the December Cumulative Update), and is commonly referred to as the "localized patch". As mentioned in the prior post at http://blogs.msdn.com/sharepoint/archive/2008/12/17/announcing-december-cumulative-update-for-office-sharepoint-server-2007-and-windows-sharepoint-services-3-0.aspx, the local patches are included in the December CU packages 960010 and 960011. Therefore, applying the December CU to Language Packs is as simple as ensuring the Language Pack is installed, as with the product we also suggest installing the SP1 version of the language pack, and then the latest Cumulative Update such as 960010 or 960011.

Q3. Thanks for nice post. i have a confusion with it. I already installed the Sp1 and infrastructure updates. So still i need to download and extract the sp1. I am using MOSS then you say no need of wss updates, what its mean?
A: For MOSS installation, WSS updates are recommended, but not a requirement.

Q4. If I'm starting with the single download of WSS 3.0 with SP1, do I just do note a and skip step 2?
A: Yes. To start with WSS 3.0 with SP1, you don't need to do step 2 since it is already included in the package.

Q5. Where is wsssetup.dll? I cannnot find it.
A: If you start with MOSS 2007 with SP1, step 4 is not necessary because the file wsssetup.dll is already removed. You won't find it in the directory.

Q6. Thanks for the info - v.useful. Just to be clear though, is the logic below right? "4. If you are not using Windows SharePoint Services only" If that is literally what is meant - perhaps it would be clearer to say "If you are using MOSS...."
A: Yes, if you are using MOSS RTM you should delete this file.

Q7. Do you confirm that you are talking about "svrsetup.dll" instead of "Servicessetup.dll" as mentionned?
A: This is a replacement mistake when do the posting, the correct one is "wsssetup.dll". It is corrected now.

Dan Winter

SharePoint Program Manager

Jie Li

SharePoint Technical Product Manager
referred from http://blogs.msdn.com/sharepoint/

SharePoint List Collection, smart tool to collect lists from different sites

SharePoint list collection is a SharePoint web part used to display items from different lists or sites. Meanwhile, the user can create different views as needed and edit items as in original lists or sites.

This list collection web part is developed by SharePointBoost. It greatly expands the default SharePoint list collection function, and adds some new features, such as enable users create different views and edit items in list collection view. It is indeed a great improvement on the function of list collection.

SharePoint list collection is a powerful web part for users to apply in practice. SharePoint list collection greatly expands the default function of SharePoint, thus makes it quite convenient for users to display items in one list. With SharePoint list collection, the user can consolidate various list items from different areas and web sites into a single grid view web part, and create public view or personal view for a SharePoint list collection to filter, sort or group information. Furthermore, the user can also create and manipulate items in SharePoint list collection as in default SharePoint list view. These three functions make SharePoint list collection the best choice for users.

SharePoint list collection can be widely applied by users from all kind of industries in practice. For instance, the accountant can view different items in financial statement by collecting them into one list, create different kinds of views as he/she is pleased to do, and avoid tedious operation to edit items in original lists or sites. SharePoint list collection can also be used by HR staff to view, edit information of different staffs in a list just as in original areas.

30 days free trial is now available at:
http://www.sharepointboost.com/listcollection.html

SharePoint conferences Best Practice Conferences, Connections, SPTechCon

SharePoint Conferences, Best Practice Conferences, Connections, SPTechCon and Tech Eds Oh My!

If you're looking at this next calendar year and trying to decide what conference to go to you've got a daunting task ahead of you. Sooo many good choices! I've had this post in draft and have been planning on putting out my calendar... Essentially after I saw Dave Pae put out conference list, I realized I had a lot of things on my calendar... Here's what I'm aware of, plus more.

I see the first official mention of a SharePoint Conference in 2009. I also see the link to sign up to find out about the SharePoint Conference 2009 is on the mssharepointconference.com site. I guess we can rule out that this conference will NOT be before Tech Ed. I can't speculate, but I do recommend getting on this email list.

image

SharePoint Related Conferences

SharePoint Technology Conference
January 27–29, 2009: Burlingame, CA
For three exciting days in January, you'll be eating, drinking, sleeping, talking and living Microsoft Office SharePoint Server and Windows SharePoint Services. The first day at SPTechCon is filled with intense full and half-day workshops, half in the morning, half in the afternoon. The next two days are filled with more than 50 break-out classes to choose from. Build your own custom program! This conference is hosted by BZ Media LLC. Line up includes Tom as keynote. Speakers include many MVPs and leaders including Shane Young, Todd Klindt, and Nicola Young, John Ross, and Mike Watson.

SharePoint Best Practices Conference
February 2–4, 2009: San Diego, CA
The SharePoint Best Practices Conference eliminates design, deploy, organization and administration confusion, replacing disorder with Clarity, Direction and Confidence. This conference is hosted by Mindsharp. Keynote, Joel Oleson. This line up is MOST impressive: Ben Curry, Mike Watson, Bill English, Bob Fox, Bob Mixon.... I already did a post on this best practices conference.

2009 SharePoint .Org Conference

March 22-24: Baltimore, MD

For Associations and Not for Profit Organizations, SharePoint Conference for networking and education networking

Sharepoint Connections -- Dev Connections Spring 2009

March 22-25, Orlando FL

Ritz Carlton & JW Marriott - Penton Media. 150+ Sessions from Microsoft, MVPs, and more. I'll be giving a couple sessions in the IT and Leadership track.

European SharePoint Best Practices Conference

April 6-8 2009:

London, UK. Hosted by Combined Knowledge. This is sure to be the best SharePoint related Conference in Europe, this year. It already has an amazing speaker line up. This conference was just announced this week, and hey, I am Keynote! Woohoo! Check out the killer line up of the SharePoint greats. Steve Smith MVP, Spence MVP, Mike Watson (X MSFT), Todd Bleeker MVP, Andrew Connell MVP, Penny Coventry MVP, Bob Fox MVP, Andrew Woodward MVP, Natalya Voskresenskaya MVP (Blogger think Squirrel)
Montreal SharePoint Summit

April 6-8: Montreal, Canada

Centre-Mont-Royal

Third annual SharePoint summit. Speakers include Errin O'Connor, Mike Fitzmaurice, and Bill English
Conferences that will have lots of SharePoint Sessions

Microsoft FASTforward '09 (SEARCH+)
February 9–11, 2009: Las Vegas, NV
3 days of compelling discussion on the evolving business environment and how search is enabling companies to succeed. This conference is hosted by Microsoft. (Text from SharePoint Team blog)

Microsoft MIX09 (WEB+)
March 18-20, 2009: Las Vegas, NV
Now in its fourth year, MIX is a unique technology conference that connects web professionals with industry thought leaders to explore the future of the Web together. This conference is hosted by Microsoft. There are usually a few SharePoint Conferences, but you'll see a lot of other .NET and Social Networking sites.

Microsoft Tech·Ed North America 2009

May 11-15: Los Angeles, Convention Center

"Seventeenth year as the best technical education and networking event in the industry."

Tech Ed Global

You can navigate to the other Teched's through the WW drop down in the corner. My favorites are South East Asia, NZ, and Australia.



More SharePoint Details Coming soon... TEC - The Experts Conference (Exchange, AD and Identity, Las Vegas - Spring, Berlin - Fall)
Free Conferences SharePoint Saturday and Code Camps:

Virginia Beach SharePoint Saturday

Jan 10: Joel Oleson, Michael Lotter, Paul Galvin, Mark Miller (Free community event) - Yep I'll be there.

NYC SharePoint in the Real World, Imagine Event (SharePoint Saturday)

Jan 21: NYC (Many partners)

Kansas City SharePoint Saturday

Feb 7 - Free event. Still in the planning stages

South Florida Code Camp

Code Camp is a FREE one day GEEK FEST held on Saturday February 7, 2009

Boise Code Camp

March 28th, 2009
Twin Cities Code Camp

April 4, 2009

SharePoint Cascaded Lookup, freely build cascaded lookup relationship between sites

SharePoint Cascaded Lookup is a quite useful to perform cross-site lookup and filtered information from different lists of other sites.

In daily work, cascaded lookup is quite helpful to IT staff; however, SharePoint does not support this feature by default. SharePoint Cascaded Lookup is a powerful cascaded lookup tool. It not only allows users to lookup other lists in different sites, but also can easily filter field. Furthermore, SharePoint Cascaded Lookup provides two-way conversion to SharePoint default lookup type or SharePoint cross-site lookup type.

SharePoint Cascaded Lookup introduces Filter Column and Parent Column to filter field values to narrow the range of choices. As a result, users can lookup field values more quickly and accurately. Filter Column is in the same list with the looked-up column. If users set a column as Filter column for the looked-up column, when edit/create an item, the choice of the cascaded lookup column will be filtered according to the value of the Filter Column. Parent Column, which is also used to filter looked-up values, is in the same list with the Cascaded Lookup column. When users set a column as Parent Column of a cascaded lookup column, in the edit/new form of an item, the choices of Cascaded lookup column in dropdown list will be different according to the value of Parent Column.

This new product is now available for 30 days free trial, you can download it from:
http://www.sharepointboost.com/cascaded-lookup.html

SharePoint Workflow Assocation Page base class

public enum AssociationType
{
List,
ContentType,
ContentTypeOnList,
}

public abstract class AssociationPageBase : LayoutsPageBase
{
protected string workflowAssociationName = string.Empty;
protected Guid workflowTemplateId;
protected SPWorkflowTemplate workflowTemplate;
protected bool workflowAssociationExists;
protected bool updateContentTypesOnLists;
protected AssociationType associationType;
protected Guid listId;
protected SPList list;
protected SPContentTypeId contentTypeId;
protected SPContentType contentType;
protected SPWorkflowAssociation workflowAssociation;
protected Guid workflowAssociationId;
protected bool newTaskListRequired = false;
protected string newTaskListName = string.Empty;
protected bool newHistoryListRequired = false;
protected string newHistoryListName = string.Empty;
protected SPList taskList;
protected SPList historyList;

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.workflowAssociationName = this.Request.Params["WorkflowName"];
this.workflowTemplateId = new Guid(this.Request.Params["WorkflowDefinition"]);
this.workflowTemplate = this.Web.WorkflowTemplates[this.workflowTemplateId];
if (!string.IsNullOrEmpty(this.Request.Params["GuidAssoc"]))
{
this.workflowAssociationExists = true;
this.workflowAssociationId = new Guid(this.Request.Params["GuidAssoc"]);
}
this.updateContentTypesOnLists = (this.Request.Params["UpdateLists"] == "TRUE");
if (!string.IsNullOrEmpty(this.Request.Params["List"]))
{
this.listId = new Guid(this.Request.Params["List"]);
this.list = Web.Lists[this.listId];
}
if (string.IsNullOrEmpty(this.Request.Params["ctype"]))
{
this.associationType = AssociationType.List;
if (this.workflowAssociationExists)
{
this.workflowAssociation = this.list.WorkflowAssociations[this.workflowAssociationId];
}
}
else
{
this.contentTypeId = new SPContentTypeId(this.Request.Params["ctype"]);
if (this.list == null)
{
this.associationType = AssociationType.ContentType;
this.contentType = this.Web.AvailableContentTypes[this.contentTypeId];
}
else
{
this.associationType = AssociationType.ContentTypeOnList;
this.contentType = this.list.ContentTypes[this.contentTypeId];
}
if (this.workflowAssociationExists)
{
this.workflowAssociation = this.contentType.WorkflowAssociations[this.workflowAssociationId];
}
}
string taskListId = this.Request.Params["TaskList"];
if (taskListId[0] == 'z')
{
this.newTaskListRequired = true;
this.newTaskListName = taskListId.Substring(1);
}
else
{
if (this.associationType == AssociationType.ContentType)
{
try
{
this.taskList = this.Web.Lists[taskListId];
}
catch (Exception)
{
this.newTaskListRequired = true;
this.newTaskListName = taskListId;
}
}
else
{
this.taskList = this.Web.Lists[new Guid(taskListId)];
}
}
string historyListId = this.Request.Params["HistoryList"];
if (historyListId[0] == 'z')
{
this.newHistoryListRequired = true;
this.newHistoryListName = historyListId.Substring(1);
}
else
{
if (this.associationType == AssociationType.ContentType)
{
try
{
this.historyList = this.Web.Lists[historyListId];
}
catch (Exception)
{
this.newHistoryListRequired = true;
this.newHistoryListName = historyListId;
}
}
else
{
this.historyList = this.Web.Lists[new Guid(historyListId)];
}
}
}

protected void Submit()
{
if (this.newTaskListRequired)
{
Guid taskListId = this.Web.Lists.Add(this.newTaskListName, this.newTaskListName, SPListTemplateType.Tasks);
this.taskList = this.Web.Lists[taskListId];
}
if (this.newHistoryListRequired)
{
Guid historyListId = this.Web.Lists.Add(this.newHistoryListName, this.newHistoryListName, SPListTemplateType.WorkflowHistory);
this.historyList = this.Web.Lists[historyListId];
}
switch (this.associationType)
{
case AssociationType.List:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.list.UpdateWorkflowAssociation(this.workflowAssociation);
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateListAssociation(
this.workflowTemplate, this.workflowAssociationName, this.taskList, this.historyList);
this.UpdateWorkflowAssociation();
this.list.AddWorkflowAssociation(this.workflowAssociation);
}
break;
case AssociationType.ContentType:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
if (this.updateContentTypesOnLists)
{
this.contentType.UpdateWorkflowAssociationsOnChildren(true, true, true);
}
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateSiteContentTypeAssociation(
this.workflowTemplate,
this.workflowAssociationName,
this.taskList.Title,
this.historyList.Title);
this.UpdateWorkflowAssociation();
this.contentType.AddWorkflowAssociation(this.workflowAssociation);
if (this.updateContentTypesOnLists)
{
this.contentType.UpdateWorkflowAssociationsOnChildren(true, true, true);
}
}
break;
case AssociationType.ContentTypeOnList:
if (this.workflowAssociationExists)
{
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
}
else
{
this.workflowAssociation = SPWorkflowAssociation.CreateListContentTypeAssociation(
this.workflowTemplate, this.workflowAssociationName, this.taskList, this.historyList);
this.UpdateWorkflowAssociation();
this.contentType.UpdateWorkflowAssociation(this.workflowAssociation);
}
break;
}
SPUtility.Redirect(this.GetRedirectUrl(), SPRedirectFlags.RelativeToLayoutsPage, HttpContext.Current);
}

protected abstract string CollectAssociationData();

protected void Cancel()
{
SPUtility.Redirect(this.GetRedirectUrl(), SPRedirectFlags.RelativeToLayoutsPage, HttpContext.Current);
}

private void UpdateWorkflowAssociation()
{
this.workflowAssociation.Name = this.workflowAssociationName;
this.workflowAssociation.AutoStartCreate = (this.Request["AutoStartCreate"] == "ON");
this.workflowAssociation.AutoStartChange = (this.Request["AutoStartChange"] == "ON");
this.workflowAssociation.AllowManual = (this.Request["AllowManual"] == "ON");
this.workflowAssociation.AssociationData = this.CollectAssociationData();
if (this.workflowAssociation.TaskListTitle != this.taskList.Title)
{
this.workflowAssociation.SetTaskList(this.taskList);
}
if (this.workflowAssociation.HistoryListTitle != this.historyList.Title)
{
this.workflowAssociation.SetHistoryList(this.historyList);
}
}

private string GetRedirectUrl()
{
string redirectUrl = string.Empty;
switch (this.associationType)
{
case AssociationType.List:
redirectUrl = string.Format("WrkSetng.aspx?List={0}", this.listId);
break;
case AssociationType.ContentType:
redirectUrl = string.Format("WrkSetng.aspx?ctype={0}", this.contentTypeId);
break;
case AssociationType.ContentTypeOnList:
redirectUrl = string.Format("WrkSetng.aspx?List={0}&ctype={1}", this.listId, this.contentTypeId);
break;
}
return redirectUrl;
}
}

How to use:
1. Use this class as the base class of your custom workflow assocation page;
2. Use the protected field member to get the related list, workflow template, content type etc;
3. Override CollectAssociationData to collect data from web form and get your custom assocation data(xml format etc.);
4. Invoke Submit when you click "OK" to commit your change, invoke Cancel when you click "Cancel".
Hope to help you, any question please add comments.

Customize WSS Alert template

Customize WSS Alert template

There are two way to customize wss alert template
(1) Modify the template file
the default template file is 12\TEMPLATE\XML\alerttemplates.xml. it's a CAML file. You can rewrite it and use stsadm to deploy it
STSADM -o updatealerttemplates -url -filename
(2) Using a class inherit for interface IAlertNotifyHandler. Put the implement of this class into custom alert template file, and then you can use stsadm to deploy it

The advantage of the first method is can to need deal with alert logic(it is implemented by SharePoint), but the CAML is very complex, and you can't edit complex logic.
The second method is very agility, but some feature of the alert template will lost(such as the email which alerts modified item can display which words were changed, which words were newly added.)

This paragraph written by WSS SDK group will give you a a minute description about this topic
http://blogs.msdn.com/sharepointdeveloperdocs/archive/2007/12/07/customizing-alert-notifications-and-alert-templates-in-windows-sharepoint-services-3-0.aspx



Instead of stsadm, you can also use code to deploy alert template, like this:

string templateName="customTemplate1";
// Get the template of the web server
SPAlertTemplateCollection ats = new SPAlertTemplateCollection((SPWebService)( base.GetCurrentSPSite().WebApplication.Parent));

//add or modify the template
SPAlertTemplate t = ats[templateName];

if( t == null )
t = ats.Add();

t.Name = templateName;
t.Xml = xmlDoc.InnerXml;

t.Update();

// Set the alert template for each list separately
SPList list = someList ;
list.AlertTemplate = ats[templateName];
list.ParentWeb.AllowUnsafeUpdates = true;
list.Update();

SharePoint password change web part

A corporation with hundreds of AD accounts, each one has its own password. After their passwords expired, when a domain policy applied, they need change passwords. Most of those users will access SharePoint Site from remote place, it is impossible for them to come to IT office to change passwords. How can they do this? Perhaps some guys will go to IIS to tinker with some setting. But it cannot be done.

SharePoint Password Change can easily solve this problem. After installing SharePoint password change, users can change password on the welcome menu or by adding a password change web part. It also allows users to be notified by an email before their password expires. With SharePoint Password Change, users can freely change their passwords without the intervention of administrator, thus the IT staff can avoid tedious task to change password for everyone.

An instruction to SharePoint list filter favorites

SharePointBoost has just released a list filter product called SharePoint List Filter Favorites. It is a small however useful tool for users to keep favorite filters in order to avoid creating filters every time when needed.
Its main features are as following:
Filter SharePoint columns as needed;
Add filter views to filter favorites menu;
Organize filters filters in the menu freely.
Have a quick look at video instruction:

a powerful SharePoint Alert tool--SharePoint Alert Reminder

SharePoint Alert provides Email-alert function but cannot fully meet users’ demands. SharePoint Alert Boost greatly extends default SharePoint Alert function and make the application of Alert more convenient. The new features are as follows:

1. Set alert conditions;
2. Customize email content;
3. Insert the columns into the alerts
4. Send email to non-SharePoint users or groups
5. Send email to the task-related users
6. Send item attachment as email attachment

Now, let’s turn to the following sample:
Director Henry assigned Tom a task for which the due date is 15th July. Meanwhile, a copy of description document is added to task item. When the task is completed, Henry would have a check. Email notification will be sent to task-related persons once meeting the following conditions:

Firstly, as long as Henry creates the task item, Email will be sent to Tom;
Secondly, send the item attachment as the email attachment
Thirdly, on the due date, a piece of Email will report to Henry;
Fourthly, Henry will receive a mail when the task is completed;

SharePoint Alert cannot achieve above requests, while SharePoint Alert Boost does work.

If the user wants to achieve the request as above referred, he can configure settings in sharepoint alert boost.
Add the requrired columns, such as director,assigned to, status, and so on. Then enter sharepoint alert workflow setting page, and create a new Alert Part. In the following steps, you can configure the main settings according to above request in releated area. For instance, customize Email subject and content, decide BCC to and Sent to, and set alert condition.

SharePoint Alert Reminder is now available for 30 days free trial, you can download it from:
http://www.sharepointboost.com/alertreminderboost.html

an application sample of SharePoint column/view permission

Several days ago, one friend of mine asked me how to set permissions to a column. He is the IT staff, and is required to set different permissions to different users. For instance, it is a typical scenario of the SharePoint. The company is a B2B type, the number of customer increases at a high rate. The management of contract is an important part of daily work of sales department. The detailed information of the company, such as the contract date, amount, price, and other privacy information are recorded in a SharePoint list. Some contracts contain sensitive information which is only accessible to limited people. For instance, the marketing department has the permission to view the contracts, while other departments such as R&D and support department cannot access to the contents of the contract. In a word, the item permission needs to be customized. But, with SharePoint 2007 the users are unable to set SharePoint item permissions. Then, what measures can be taken to solve this problem?

Actually, it is not so difficult a task. There is a third party SharePoint add-on which can customize column permissions: SharePoint column permission. SharePoint Column Permission is a great enhancement to SharePoint 2007 permission. SharePoint column permission allows users to define column permission as needed. For instance, in the above contract scenario, with SharePoint column permission, the IT staff can easily set different users with edit, view, or invisible permission. The marketing department can view all contents of the contract but without edit permission, and the SharePoint administrator can set column “view” permission to all the staff of the department as a member group. In the same way, the sales department can be set “edit” permission and other department with “invisible” permission. One SharePoint column, one user, one unique column permission, it is SharePoint column permission that successfully sets column permission.

SharePoint column permission is not limited to certain application; instead, it can be applied in various scenarios, such as staff information management, financial date management, and so on.

30 days free trial is now available, and you can download it from SharePoint web site:
http://www.sharepointboost.com/columnpermission.html