如何在特定文档库上激活sharepoint 2007功能

时间:2010-11-22 23:56:04

标签: sharepoint-2007

我使用visual studio 2010为sharepoint 2007创建了一个自定义功能。当我激活该功能时,它当然会触发网站集中的所有文档库。有人可以给我一个如何在特定文档库/列表实例上触发功能的示例。

1 个答案:

答案 0 :(得分:0)

首先,你必须为你的功能添加一个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中的元素添加一些权限。 正如您所看到的,我创建了两个变量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();
    }


我希望这能帮到你:)。