I have a 2 custom Lists “Projects” and “Project Folders Type”
Projects have the following columns: Project Name, Project Description
Project Folders Type has the following columns: Title
I have a document library called “Project Details” with a column “Name”
Problem: The moment I add new project to Projects List, I need to create a folder with name of the projects and sub folders (from Project Folders Type List) in Project Details.
Solution: Create an Item Added event and attach it to Projects List
First:
Create a class Library, Add reference to Microsoft.Sharepoint.dll, and Inherit from SPEventItemReceiver
namespace EventRecieverDemo
{
public class DemoListEvents : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
string toolTipFieldInternalName = "";
using (SPWeb web = properties.OpenWeb())//Open the web you want to use
{
//Get a reference to the "Project Name" Column in "Projects" List
toolTipFieldInternalName = web.Lists[properties.ListId].Fields["Project Name"].InternalName;
//Get the projectTitle just Added
string projectTitle = properties.AfterProperties[toolTipFieldInternalName].ToString();
//Get the "Project Details" document Library where you want to add the folders
SPList myList = web.Lists["Project Details"];
//Create a folder in "Project Details" document library with the name of the project
SPFolderCollection projectFolder = web.GetFolder("Project Details").SubFolders;
projectFolder.Add(projectTitle);
//Get a refernce where you want to add subfolders
SPFolderCollection subfolders = web.GetFolder("Project Details/" + projectTitle).SubFolders;
//Get a reference to "Project Folders Type" where the names of the folders exist
SPList folderNames = web.Lists["Project Folders Type"];
//Loop through "Project Folders List"
foreach (SPListItem folderType in folderNames.Items)
{
//Add Sub Folders
subfolders.Add(folderType["Title"].ToString());
}
}
}
}
}
Build your solution and throw the dll in GAC (c:\windows\assembly), to get the publictoken key right click your dll in the GAC and hit properties
Second: Add another class to the class library and inherit from SPFeatureReceiver
namespace EventRecieverDemo
{
class FeatureReciever :SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb;
try
{
SPList list = web.Lists["Projects"];
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, "EventRecieverDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1942c85f62a2b8d", "EventRecieverDemo.DemoListEvents");
list.Update();
}
finally
{
web.Dispose();
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb;
try
{
SPList list = web.Lists["Projects"];
list.EventReceivers[0].Delete();
list.Update();
}
finally
{
web.Dispose();
}
}
}
}
Build your solution again and throw the dll in GAC
Third:
Add an XML file to the class library named Feature.XML, click on the properties tab/Schemas and press ADD and browse to C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML and select wss.xsd, now you can have intellisense in your XML File
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="0491ECA8-2ED8-4e9c-B5CF-8E8FCDFFBF16"
Title="Projects Feature"
Description="Create Folders and sub folders for the project"
ReceiverAssembly="EventRecieverDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1942c85f62a2b8d"
ReceiverClass="EventRecieverDemo.FeatureReciever"
Scope="Web"/>
The Id of the feature is GUID, you can get it from the Create GUID tool in visual studio
Forth:
Browse to “C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES” and create a folder “ProjectsFeature” and throw feature.XML inside it
Fifth:
Now we need to install the feature
Open command prompt and browse to:” C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN”
stsadm –o installfeature –name ProjectsFeature
Reset your IIS
Open you portal go to Site settings/Site Features and activate ProjectsFeature.
Test it :)
Tuesday, April 22, 2008
Attaching Event to Custom List
Subscribe to:
Post Comments (Atom)
2 comments:
Thanks for your "Attaching Event to Custom List"
Your welcomed my friend, hope it helped you
Post a Comment