SharePoint的EventHandler主要有Web Level,List Level,List Item Level,Email几种。SharePoint的event handler主要是继承SPWebEventReceiver, SPEmailEventReceiver, SPListEventReceiver和SPItemEventReceiver类去实现其中相应的方法来完成我们的需求。
ModifiedPermissions:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.IO;
namespace Anson.EventReceiver
{
public class ModifiedPermission:SPItemEventReceiver
{
string strGroupName = "Home Owners";
public override void ItemAdded(SPItemEventProperties properties)
{
SPWeb myWeb = null;
SPSite mySite = null;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
mySite = new SPSite(properties.ListItem.Web.Site.ID);
myWeb = mySite.AllWebs[properties.ListItem.Web.ID];
string currentUser = properties.ListItem.Web.CurrentUser.LoginName;
SPListItem myListItem = myWeb.Lists[properties.ListId].GetItemById(properties.ListItemId);
myWeb.AllowUnsafeUpdates = true;
myListItem.BreakRoleInheritance(true);
//Clear new listItem all the RoleAssignment
while (myListItem.RoleAssignments.Count>0)
{
myListItem.RoleAssignments.Remove(0);
}
//Add Home Owner Group RoleAssignment
SPGroup oOwnerGroup=myWeb.SiteGroups[strGroupName];
if (oOwnerGroup!=null)
{
SPRoleAssignment oRoleGroup = new SPRoleAssignment(oOwnerGroup);
oRoleGroup.RoleDefinitionBindings.Add(myWeb.RoleDefinitions["Full Control"]);
myListItem.RoleAssignments.Add(oRoleGroup);
}
//Add Author RoleAssignment
SPRoleAssignment authorRoleAssignment = new SPRoleAssignment(myWeb.SiteUsers[currentUser]);
authorRoleAssignment.RoleDefinitionBindings.Add(myWeb.RoleDefinitions["Full Control"]);
myListItem.RoleAssignments.Add(authorRoleAssignment);
myWeb.Update();
myWeb.AllowUnsafeUpdates = false;
});
}
catch (Exception ex)
{
log(ex.Message);
}
}
public override void ItemDeleting(SPItemEventProperties properties)
{
try
{
string oCurrentUser = properties.ListItem.Web.CurrentUser.Name;
string authorName = properties.ListItem["Created By"].ToString();
authorName = authorName.Substring(authorName.IndexOf(";#") + 2);
if (oCurrentUser != authorName)
{
properties.Cancel = true;
properties.ErrorMessage = "You have not enough permission to delete!";
}
}
catch (Exception ex)
{
log("ItemDeleting Method Error Message:"+ex.Message+DateTime.Now.ToString());
}
}
private void log(string ErrorMessage)
{
FileStream FS = null;
StreamWriter SW = null;
try
{
SPSecurity.RunWithElevatedPrivileges
(
delegate
{
FS = File.Open("c:\\Error.txt", FileMode.Append);
SW = new StreamWriter(FS);
SW.Write(ErrorMessage+"\r\n");
SW.Close();
SW.Dispose();
FS.Close();
FS.Dispose();
}
);
}
catch
{
}
finally
{
SW = null;
FS = null;
}
}
}
}
EventReceiveManger.cs ---这个是添加移动EventReceiver的管理类
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.IO;
namespace Anson.EventReceiver
{
class EventReceiverManager
{
public static bool SetEventReceiver(SPList list,Type t,params SPEventReceiverType[] eventType)
{
try
{
string assembly = t.Assembly.FullName;
string className = t.FullName;
SPEventReceiverDefinitionCollection ERCollection = list.EventReceivers;
SPEventReceiverDefinition def = null;
for (int i = 0; i < ERCollection.Count; i++)
{
def = ERCollection[i];
if (def.Class==className)
{
def.Delete();
}
}
foreach (SPEventReceiverType ET in eventType)
{
list.EventReceivers.Add(ET, assembly, className);
}
list.Update();
return true;
}
catch (Exception ex)
{
log("SetEventReceiverError:" + ex.Message + "\r\n");
return false;
}
}
public static bool RemoveEventReceivers(SPList list ,Type t)
{
try
{
string assembly = t.Assembly.FullName;
string className = t.FullName;
SPEventReceiverDefinitionCollection ERCollection = list.EventReceivers;
SPEventReceiverDefinition def = null;
for (int i = 0; i < ERCollection.Count; i++)
{
def = ERCollection[i];
if (def.Class==className)
{
def.Delete();
}
}
list.Update();
return true;
}
catch (Exception ex)
{
log("RemoveEventReceivrs Method Error:"+ex.Message+"\r\n");
return false;
}
}
#region Log Method
public static void log(string ErrorMessage)
{
FileStream FS = null;
StreamWriter SW = null;
try
{
SPSecurity.RunWithElevatedPrivileges
(
delegate
{
FS = File.Open("c:\\Error.txt", FileMode.Append);
SW = new StreamWriter(FS);
SW.Write(ErrorMessage + "\r\n");
SW.Close();
SW.Dispose();
FS.Close();
FS.Dispose();
}
);
}
catch
{
}
finally
{
SW = null;
FS = null;
}
}
#endregion
}
}
EventReceiverInstall.cs --这个是安装Feature的类
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace Anson.EventReceiver
{
class EventReceiverInstall:SPFeatureReceiver
{
string CustomListName = "AnsonList";
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite mySite = properties.Feature.Parent as SPSite;
SPList myList = mySite.RootWeb.Lists[CustomListName];
SPEventReceiverType[] types={SPEventReceiverType.ItemDeleting,SPEventReceiverType.ItemAdded};
if (myList!=null)
{
EventReceiverManager.SetEventReceiver(myList,
typeof(ModifiedPermission), types);
}
else
{
return;
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite mySite = properties.Feature.Parent as SPSite;
SPList myList = mySite.RootWeb.Lists[CustomListName];
if (myList != null)
{
EventReceiverManager.RemoveEventReceivers(myList, typeof(ModifiedPermission));
}
else
{
return;
}
}
public override void FeatureInstalled(SPFeatureReceiverProperties properties)
{
}
public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
}
}
}
Feature.xml -- 这个是Feature类似的结构,也有其他的结构写法,我习惯用这种
<?xml version="1.0" encoding="utf-8"?> <Feature Scope="Site" Title="Anson.EventReceiver ModifedPermission" Id="615208F2-85DD-42c5-9590-1F9B0BC725B0" Description="It is Created by Ansom ,Use in the list of AnsonList" xmlns="http://schemas.microsoft.com/sharepoint/" Hidden="FALSE" Version="1.0.0.0" ReceiverAssembly="Anson.EventReceiver, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5abfd538ff01cc7c" ReceiverClass="Anson.EventReceiver.EventReceiverInstall"> </Feature>
部署:
1. 强命名。
2. DLL文件放到GAC
3.重启IIS, command: iisreset
3. 把含 Feature.xml文件的文件夹DistributePermission放到 12\TEMPLATE\FEATURES文件件里
4.安装Feature, Stsadm Command: stsadm -o installfeature -name DistributePermission
5.激活Feature
浙公网安备 33010602011771号