对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 为了系统维护,一定要管理好版本号。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

跨浏览器事件处理程序

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

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

Ajax 设置事件处理程序

  • 2012-01-08 12:31
  • 32KB
  • 下载

javascript事件处理程序

事件处理程序有两种方式: 1.html时间处理:如 这种方式把js代码写在html里面 2.js封装处理如: function showmessage() { alert("33"); }

C#自定义事件处理程序

  • 2010-04-21 10:28
  • 33KB
  • 下载

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

文章来源:http://www.mahaixiang.cn/js/694.html 最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比...

DOM事件处理程序

事件就是用户或浏览器自身执行的某种动作。比如“click”,“load”,“mouseover”等都是事件的名字。响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以“on”开头...

事件处理程序

事件就是用户或浏览器自身只i系那个的某种动作,诸如click、mouseover和mouseout等,都是事件的名称。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以“on...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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