文档库事件 (IListEventSink)

一 参考

   1. MSDN官方参考 演练:处理文档库事件

   2. 经典的一步一步sharepoint2007 实现文档Event Handler

   3. 区分自定义“事件处理”功能的两种部署方式

二 步骤

    1. 编写事件处理程序 

     当SPFile CheckIn时,把Title修改成当前的时间    

事件处理程序
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  Microsoft.SharePoint;
using  System.Runtime.InteropServices;
using  System.Security.Principal;

namespace  Portal.Lib.EventHandlers
{
    
public   class  DocLibEventSink : IListEventSink
    {

        
public  DocLibEventSink()
        {
            
// TODO::Initialize yout params
        }


        
public   void  OnEvent(SPListEvent listEvent)
        {            
            
this .HandleEvent(listEvent);
        }

        
private   void  HandleEvent(SPListEvent listEvent)
        {
            SPSite site 
=   null ;
            SPWeb web 
=   null ;

            
try
            {
                SPUser user 
=  listEvent.Site.RootWeb.SiteUsers.GetByID(listEvent.UserID);
                site 
=   new  SPSite(listEvent.Site.ID, user.UserToken);

                
string  weburl  =  listEvent.WebUrl.Substring(site.RootWeb.Url.Length);
                web 
=  site.OpenWeb(weburl);


                SPFile file 
=  web.GetFile(listEvent.UrlAfter);
                SPList list 
=  web.Lists[listEvent.ListID];           


                
if  (listEvent.Type  ==  SPListEventType.CheckIn)
                {
                    
if  (file.Item  !=   null )
                    {
                        file.CheckOut();
                        
try
                        {
                            file.Item[SPBuiltInFieldId.Title] 
=  DateTime.Now.ToLongTimeString();
                            file.Item.Update();
                        }
                        
finally
                        {
                            file.CheckIn(
"" );
                        }
                    }
                }

            }
            
catch  (Exception ex)
            {
            }
            
finally
            {
                
if  (site  !=   null )
                {
                    site.Dispose();
                }
                
if  (web  !=   null )
                {
                    web.Dispose();
                }

            }
        }

    }
}

     2. 启用 向后兼容的事件处理程序

     管理中心-->应用程序管理-->[SharePoint Web 应用程序管理 ]Web 应用程序常规设置 -->向后兼容的事件处理程序

    3. 把事件处理程序注册到文档库

    设置-->文档库设置-->[常规设置]高级设置 -->容的事件处理程序

 

备注:(个人总结,如有错误,请指出)

1. 事件捕获在事件发生之后,

2. 事件本身不会触发本身,如上,File.CheckIn("")本身不会触发事件再次发生

3. 权限模拟,如果不进行权限模拟,即使你提升权限,迁入等操作还是会抛出异常

 

你可能感兴趣的:(event)