【问题标题】:How do I activate a sharepoint 2007 feature on a specific document library如何在特定文档库上激活 sharepoint 2007 功能
【发布时间】:2011-01-05 20:14:01
【问题描述】:

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

【问题讨论】:

    标签: sharepoint-2007


    【解决方案1】:

    首先,您必须将 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();
        }
    



    希望对你有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多