2010-11-22 6 views
0

J'ai créé une fonctionnalité personnalisée pour sharepoint 2007 en utilisant Visual Studio 2010. Lorsque j'active la fonctionnalité, elle se déclenche bien sûr sur toutes les bibliothèques de documents de la collection de sites. Quelqu'un peut-il me donner un exemple de comment faire fonctionner la fonction sur une bibliothèque/instance de liste de documents spécifique.Comment activer une fonctionnalité sharepoint 2007 sur une bibliothèque de documents spécifique

Répondre

0

D'abord, vous devrez ajouter un EventReceiver à votre fonction, puis dans votre xml Feature ajouter un ReceiverClass, comme ceci:

<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 étant le EventReceiver lorsque vous êtes fonction est activée.

Mon exemple
D'abord, mon 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); 
     } 

    } 

Dans l'exemple ci-dessus, je veux ajouter quelques autorisations aux éléments MyList. Comme vous pouvez le voir, je fais 2 variables qui est le typeof (PermissionHandler), qui est une classe publique que j'ai créée pour faire le travail.
J'ai ajouté 5 éléments à la liste avant d'activer cette fonctionnalité. Je souhaite donc que les éléments déjà existants obtiennent également les autorisations que je définis pour les nouveaux éléments.

Voici comment je le fais:

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(); 
    } 



J'espère que cela vous a aidé :)

Questions connexes