![]() |
Enterprise Systems »
SharePoint Server »
General
Intermediate
License: The Code Project Open License (CPOL)
SharePoint Workflows for Folder Content TypeBy Calin TatarThis article demonstrates how to start a Workflow from a custom Folder Content Type. |
C#, Windows, .NET 3.0, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
A few months ago, I had to implement a MOSS 2007 (SharePoint) feature to start Workflows from a Folder Content Type. The problem was, you cannot attach SP Workflows to a Content Type that was derived from Folder. My solution for this problem was to implement an Event Handler feature which calls the SP Workflow when a folder item was added to my Custom List.
In a few words, there is no option to manually start a Workflow from a Folder item.


To create a new Document Library, go under "All Site Content" and select "Document Library".
To create a new Content Type, go to "Site Settings"; under "Galleries", select "Site content types". In this page, click "Create" and fill the required values like in the following image:

In order to use custom Content Types in the newly created Document Library, you need to enable this option. To set the option, you need to navigate to "Document Library Settings", and under the "General Settings" group, select "Advanced Settings". See the image below:

Also, you need to add the new "FolderContentType" to the "Folders" document library. Under the "Content Types" group, select "Add from existing site content types" and search for "FolderContentType" having "Custom Content Types" selected in the dropdown. Click "Add" and then "OK". In the "Folders" document library, expand the "New" menu and see the "FolderContentType" menu item, for creating a new FolderContentType item.
The Event Handler which will be called when a new "FolderContentType" is created in the "Folders" document library is based on the SPItemEventReceiver class from the Microsoft.SharePoint namespace. We need to override the ItemAdded method as follows:
public class FolderContentTypeWorkflowStarter : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPWeb web = properties.OpenWeb();
SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists[properties.ListId];
if (properties.ListItem.ContentType.Name == "FolderContentType" &&
properties.ListItem.Folder.ParentFolder.ToString() ==
docLib.RootFolder.ToString())
{
SPSite site = web.Site;
SPWorkflowAssociation workflowAssoc = null;
workflowAssoc = docLib.WorkflowAssociations.GetAssociationByName(
"FolderContentWorkflow",
System.Threading.Thread.CurrentThread.CurrentCulture);
if (workflowAssoc != null)
site.WorkflowManager.StartWorkflow(properties.ListItem,
workflowAssoc, workflowAssoc.AssociationData);
}
}
}
The above code will start the FolderContentWorkflow (which will be detailed in the next section). The WF will start when a new FolderContentType is added. The steps used to start the Workflow can be summarized as:
ItemAdded event.To start the WF when a FolderContentType is edited (updated), you need to change the type of the event, by overriding a different method in FolderContentTypeWorkflowStarter. This method is called "ItemUpdated".
In order to have this feature in your SharePoint site, you need to create a Class Library project which will contain FolderContentTypeWorkflowStarter, and after that, deploy the assembly. To accomplish this, you need to register the assembly into the GAC, and use the steps described in this article, or manually using the Microsoft.Sharepoint API using the EventReceivers property of SPList, something like:
docLib.EventReceivers.Add(SPEventReceiverType.ItemAdded, assemblyName, className);
To create a new Workflow, we can use either Visual Studio or the SharePoint Designer. It is important to fill the name of the WF as "FolderContentWorkflow". This name is referenced in the starter class. It is out of the scope of this article to describe in details how to create WFs.
We need to create a new FolderContentType:

The screenshot below shows the Workflow which was started from ContentTypeFolder (please note the "Completed" status in the FolderContentWorkflow column:
| You must Sign In to use this message board. | |||||
|
|||||
|
|||||
|
|||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 3 Feb 2009 Editor: Smitha Vijayan |
Copyright 2009 by Calin Tatar Everything else Copyright © CodeProject, 1999-2009 Web21 | Advertise on the Code Project |