对sharepoint 的form library的事件进行处理(二)开发事件处理程序

原创 2006年05月17日 18:12:00

对sharepoint 的form library的事件进行处理(二)开发事件处理程序

一、代码
事件处理程序需要实现IListEventSink接口。这个接口只有一个必须实现的方法public void  OnEvent(SPListEvent listEvent)。所有的处理都在这里完成。
public void  OnEvent(SPListEvent listEvent)
{

}

1。如何访问library的field
SharePointWeb  = listEvent.Site.OpenWeb();
if (listEvent.UrlAfter != null)
{
  SharePointEventItem = SharePointWeb.GetFile(listEvent.UrlAfter);
  oItem = SharePointEventItem.Item;
}
else
{
  return;
}
int ProjectID= System.Convert.ToInt32(oItem["ProjectID"].ToString());

2。delete事件的特殊性
不是所有的事件中都可以取到field的值。sharepoint的delete事件是在list中的文档被删除后才被触发的,因为这时实际数据已经被删除了,所以此时对oItem["ProjectID"]访问会议发异常。
不过,天无绝人之路,Delete事件中还有可以利用的信息。就是listEvent.ListID和istEvent.UrlBefore。(ListID是library的唯一标示,而UrlBefore是被删除文档的路径名。)

在Insert事件中,记录下listEvent.ListID和listEvent.UrlAfter和Event的对应关系
   Barsvr.UpdateEventLink(listEvent.ListID.ToString() ,listEvent.UrlAfter ,ProjectID);
在delete事件中,根据listEvent.ListID和listEvent.UrlBefore找到对应的Event,并删除。
   Barsvr.DeleteEvent(listEvent.ListID.ToString(),listEvent.UrlBefore);  

3. 对sharepoint数据的访问需要身份验证。
事件处理程序是在sharepoint的appicaition pool下运行。一般情况下,sharepoint的appicaition pool运行的账号没有权限访问library的数据。所以需要模拟用户身份来访问。
WindowsImpersonationContext wip=null;
try
{
 wip = null;
 //Impersonate the appropriate user
 WindowsIdentity id = CreateIdentity("username","domain","passsword");
 if (id != null)
 {
  wip = id.Impersonate();
  。。。。开始访问sharepoint数据
 }
}
catch(Exception ex)
{
 System.Diagnostics.EventLog.WriteEntry("Event Log Test Error3", ex.Message , System.Diagnostics.EventLogEntryType.Information, 0 );
}
finally
{
 //Cleanup
 if (wip != null)
  wip.Undo();
}

4 对WEB SERVICE调用需要数字证书
BarServices.Service  Barsvr = new BarServices.Service();
System.Net.CredentialCache cache = new System.Net.CredentialCache();
cache.Add(new Uri(Barsvr.Url), "Negotiate", new System.Net.NetworkCredential("username","password","domain"));
Barsvr.Credentials = cache;
Barsvr.DeleteEvent(listEvent.ListID.ToString(),listEvent.UrlBefore);  


二、GUID,strong name和版本号
这里是AssemblyInfo.cs的有关内容,
[assembly: Guid("F4E70578-3443-4ff3-98F2-6A69147BB687")]
[assembly: AssemblyVersion("1.0.0.48")]
[assembly: AssemblyFileVersion("1.0.0.48")]
[assembly: AssemblyKeyFile(@"D:/ctc/Ops/EWS/Bar/WSS/BarEventSink/reference/BarEventSink.snk")]

1 生成GUID, 在Visual Studio, Tools->Create GUID. 选registry format. 选new GUID.
2 生成strong name, 用sn工具生成strong name
3 为了系统维护,一定要管理好版本号。

 

跨浏览器事件处理程序

  • 2015年05月24日 17:52
  • 2KB
  • 下载

【Android 开发入门】为按钮添加Click单击事件处理程序,显示/隐藏另一个按钮

在上篇“走进Android开发的世界,HelloWorld”,我们创建了一个Android 项目 HelloWorld,并演示了如何通过USB连接手机查看运行效果;这里讲一下如何为应用添加一个按钮,并...

声明第0级事件处理程序

  • 2016年06月12日 10:56
  • 2KB
  • 下载

Ajax 设置事件处理程序

  • 2012年01月08日 12:31
  • 32KB
  • 下载

Javascript事件处理程序的3种方式

既然产生了事件,我们就要去处理它,据我了解Javascript事件处理程序主要有3种方式: 1、HTML事件处理程序 即我们直接在HTML代码中添加事件处理程序,如下面这段代码:      ...
  • thqy39
  • thqy39
  • 2017年06月20日 20:01
  • 143

C#自定义事件处理程序

  • 2010年04月21日 10:28
  • 33KB
  • 下载

DOM事件处理程序学习随笔1(IMOOC)

使用事件处理程序1. HTML事件处理程序2. DOM0级事件处理程序较传统的方式:把一个函数赋值给一个事件的处理程序属性。 用的比较多的方法,简单,跨浏览器的优势 事件流...

事件处理程序WinProc

事件处理函数是一个回调函数,Windows在窗口中发生需要处理的事件时,在主时间循环中调用该函数。时间处理函数可处理任何想处理的事件,其他的事件传递给Windows进行处理。 在用户和Windows...

javascript事件处理程序

事件处理程序有两种方式: 1.html时间处理:如 这种方式把js代码写在html里面 2.js封装处理如: function showmessage() { alert("33"); }...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对sharepoint 的form library的事件进行处理(二)开发事件处理程序
举报原因:
原因补充:

(最多只允许输入30个字)