我已经为ItemAdded创建了一个事件处理程序,以便在网站上添加项目时,我的代码会检查它是否是一个文件夹。如果是,则应将该文件夹的内容类型更改为自定义内容类型。
事件没有解雇,所以我想知道我是在正确的方式和/或在正确的地方做的。这是我的代码:
public class ItemAddedHandler : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPListItem listItem = properties.ListItem;
SPList list = properties.ListItem.ParentList;
SPContentType contentType;
if (listItem.FileSystemObjectType == SPFileSystemObjectType.Folder &&
(list.Title == "Apps" || list.Title == "Data" || list.Title == "Public"))
{
contentType = list.ContentTypes["Custom Folder"];
listItem["Content Type"] = contentType.Name;
listItem["Content Type ID"] = contentType.Id.ToString();
listItem.SystemUpdate();
}
}
}
如果我做错了什么来完成这项任务,请告诉我。非常感谢提前。
根据要求,该功能使用以下方法添加:
创建的文件夹:C:\ Program Files \ Common Files \ Microsoft Shared \ web server extensions \ 12 \ TEMPLATE \ FEATURES \ SPEventHandler 4.使用使用Visual Studio生成的GUID处理Feature.xml:
<?xml version="1.0" encoding="utf-8" ?>
<Feature Scope="Web"
Title="Added Event Handler"
Id="{27C2FDFF-ADA0-4984-955C-6448E182FA88}"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="Elements.xml"/>
</ElementManifests>
</Feature>
5.Created Elements.xml使用GAC中DLL的PublicKeyToken和ListTemplateID来处理文档库(101):
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="101">
<Receiver>
<Name>AddedEventHandler</Name>
<Type>ItemAdded</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>SPEventHandler, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=f2e7de6c4a924a03</Assembly>
<Class>SPEventHandler.ItemAddedHandler</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</Receivers>
</Elements>
stsadm -o installfeature -filename SPEventHandler \ Feature.xml
完成这些步骤后,在这个站点的列表中创建一个新项似乎没有做任何事情,包括写入事件日志,所以我想知道它是否甚至可以运行。
由于
答案 0 :(得分:2)
我明白了。在为项目提供内容类型之前,需要为文档库启用我的自定义内容类型。感谢大家的回复。