3. 创建Feature——Event Handler
接下来的例子用于说明如何创建一个Event Handler。在Site或是Site collection注册Event Handlers,可以使你很容易的执行有选择的(筛选)回应list item事件。如当某个用户要删除List中的某一个Item,你想在执行删除之前,执行一些进行验证或是其他动作,那么就可以采用Event Handler Feature。其创建过程如下:
Step 1:打开Visual Studio,创建一个工程类型为Class Library的c#工程,名字暂为
DeletingEventHandler。
Step 2:在工程中添加引用:
Microsoft.SharePoint。并添加命名空间:
using Microsoft.SharePoint;
Step 3:修改类名为
DeletingAction,并使它继承自SPItemEventReceiver。添加一个重载方法ItemDeleting。如下所示:
public class DeletingAction : SPItemEventReceiver
{
public override void ItemDeleting(SPItemEventProperties properties)
{
properties.Cancel = true;
properties.ErrorMessage = "Deleting items from " + properties.RelativeWebUrl + " is not supported.";
}
}
Step 4:生成强名称。
在工程 Properties对话框中, 点击 Signing 标签, 选择 Sign the asembly, 然后选择 Choose a strong name key file, 点击 <New…>.
Step 5:Build工程。将生成的Dll放到Local_Drive:/WINDOWS/assembly中。
Step 6:接下来就要设置Feature了,如前面一节所示,在FEATURES目录下创建一个文件夹
DeletingEventHandler。并在这个文件夹下创建一个Feature.xml文件,将Scope设置为
Web site。如下所示,不要忘记的是创建一个GUID(如何创建GUID?请看前一节),并取代下面示例中的Id。
<Feature Scope="Web"
Title="Deleting Event Handler"
Id="GUID"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="Elements.xml"/>
</ElementManifests>
</Feature>
Step 7:在DeletingEventHandler目录下,再创建一个
Elements.xml文件,如下所示,其中<Receivers ListTemplateId="104">表示该Event Handler应用到所有的Web site的announcements list。PublicKeyToken可以在GAC中查看DeletingEventHandler.dll的属性。
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="104">
<Receiver>
<Name>DeletingEventHandler</Name>
<Type>ItemDeleting</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>DeletingEventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a26b5449ac4a4cf3</Assembly>
<Class>DeletingEventHandler.DeletingAction</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</Receivers>
</Elements>
Step 8:最后就是安装、激活Feature了
stsadm -o installfeature -filename DeletingEventHandler/feature.xml
stsadm -o activatefeature -filename DeletingEventHandler /feature.xml -url http://Server/Site/Subsite
iisreset
现在再去删除http://Server/Site/Subsite中 announcements list中的Item,你会发现,已经不能删除,取而代之的是一句错误提示。