【发布时间】:2011-01-05 20:14:01
【问题描述】:
我使用 Visual Studio 2010 为 sharepoint 2007 创建了一个自定义功能。当我激活该功能时,它当然会在网站集中的所有文档库上触发。谁能给我一个示例,说明如何在特定文档库/列表实例上触发该功能。
【问题讨论】:
标签: sharepoint-2007
我使用 Visual Studio 2010 为 sharepoint 2007 创建了一个自定义功能。当我激活该功能时,它当然会在网站集中的所有文档库上触发。谁能给我一个示例,说明如何在特定文档库/列表实例上触发该功能。
【问题讨论】:
标签: sharepoint-2007
首先,您必须将 EventReceiver 添加到您的功能中,然后在功能的 xml 中添加一个 ReceiverClass,如下所示:
<Feature Id="f68efad8-ea0a-42a2-9994-db3b74aa67f8"
Title="My features title"
Description="Blah blah blah"
Version="12.0.0.0"
Hidden="FALSE"
Scope="Web"
DefaultResourceFile="core"
ReceiverAssembly="MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c4f34f956cd0552b"
ReceiverClass="MyProject.FeatureCode.EventHandler" <!-- This is where you set the EventReceiver -->
xmlns="http://schemas.microsoft.com/sharepoint/">
EventHandler 是您激活该功能时的 EventReceiver。
我的例子
首先,我的事件接收者:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
var assembly = typeof(PermissionHandler).Assembly.ToString();
var classList = typeof(PermissionHandler).FullName;
var web = SPContext.Current.Web;
web.AllowUnsafeUpdates = true;
try
{
var list = web.Lists["MyList"];
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, assembly, classList);
list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, assembly, classList);
}
catch (Exception ex)
{
EventLogger.LogError("Sample feature failed to run.", this, ex);
}
}
在上面的示例中,我想为 MyList 中的元素添加一些权限。
如您所见,我创建了 2 个变量,即 typeof(PermissionHandler),这是我为完成这项工作而创建的公共类。
在激活此功能之前,我已将 5 个项目添加到列表中,因此我希望已经存在的项目也能够获得我为新项目设置的权限。
我就是这样做的:
private void updateItemPermissions(SPItemEventProperties properties)
{
DisableEventFiring();
SPListItem listItem = properties.ListItem;
SPSecurity.RunWithElevatedPrivileges(() =>
{
SPSite site = new SPSite(listItem.ParentList.ParentWeb.Site.ID);
SPWeb web = site.OpenWeb(listItem.ParentList.ParentWeb.ID);
SPList list = web.Lists[listItem.ParentList.ID];
SPListItem item = list.Items.GetItemById(properties.ListItem.ID);
item.BreakRoleInheritance(true);
if (item.RoleAssignments.Count > 0)
{
for (var i = item.RoleAssignments.Count - 1; i >= 0; i--)
item.RoleAssignments.Remove(i);
}
var group = item.Web.Site.RootWeb.Groups["Visitors"];
AddPermissions(item, web, SPRoleType.Reader, group);
});
EnableEventFiring();
}
private static void AddPermissions(SPListItem curItem, SPWeb web, SPRoleType roleType, SPPrincipal principal)
{
SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);
SPRoleAssignment roleAssignment = new SPRoleAssignment(principal);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
curItem.RoleAssignments.Add(roleAssignment);
curItem.Update();
}
希望对你有所帮助:)
【讨论】: