2010-11-22 10 views

答えて

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ています。

私の例
私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); 
     } 

    } 

私は、マイリストの要素にいくつかの権限を追加します。 私は仕事をするために作成したパブリッククラスであるtypeof(PermissionHandler)である2つの変数を作成します。
この機能を有効にする前にリストに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(); 
    } 
私はこれが助けを願ってい



ます:)

関連する問題