溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MOSS2007對(duì)列表開(kāi)發(fā)EventHandler

發(fā)布時(shí)間:2020-07-05 06:03:08 來(lái)源:網(wǎng)絡(luò) 閱讀:900 作者:雙魚(yú)水瓶 欄目:編程語(yǔ)言

1、首先打開(kāi)Microsoft Visual Studio 2005,創(chuàng)建一個(gè)Class Library的項(xiàng)目,取名為EventHandler

MOSS2007對(duì)列表開(kāi)發(fā)EventHandler

2、創(chuàng)建項(xiàng)目成功后,將默認(rèn)的Class1.cs改名為EventHandlerTest.cs,并添加Microsoft.SharePoint.dll的引用,該DLL的具體位置在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI。

3、在EventHandlerTest.cs里添加如下代碼


using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace EventHandler
{
    public class EventHandlerTest:SPItemEventReceiver
    {
        public override void ItemAdded(SPItemEventProperties properties)
        {
            DisableEventFiring();
            SPListItem item = properties.ListItem;
            string name = item["入職者"].ToString();
            string date = Convert.ToDateTime(item["入職時(shí)間"]).ToShortDateString();
            item["標(biāo)題"] = name + "("+date+")";
            item.Update();
        }
        public override void ItemUpdated(SPItemEventProperties properties)
        {
            SPListItem item = properties.ListItem;
            string name = item["入職者"].ToString();
            string date = Convert.ToDateTime(item["入職時(shí)間"]).ToShortDateString();
            item["標(biāo)題"] = "更新"+name + "(" + date + ")";
            this.DisableEventFiring();
            item.Update();
            this.EnableEventFiring();
        }
        public override void ItemDeleting(SPItemEventProperties properties)
        {
            properties.ErrorMessage = "不能刪除入職列表中的條目";
            properties.Cancel = true;
        }
    }
}

上面的"入職者"、"標(biāo)題"、"入職時(shí)間"是指的列表中的標(biāo)題項(xiàng)目MOSS2007對(duì)列表開(kāi)發(fā)EventHandler

這里邊繼承了SPItemEventReceiver類(lèi)。 重寫(xiě)了3個(gè)事件,分別實(shí)現(xiàn)的功能是,當(dāng)添加后、修改后觸發(fā)的事件\當(dāng)刪除前觸發(fā)的事件.MOSS2007 支持同步和異步事件,也就是ItemDeleted(刪除后)、ItemDeleting(刪除前)

DisableEventFiring();  這句話的意思是 ,禁止觸發(fā)其他事件.因?yàn)槊看卧黾佣紩?huì)去觸發(fā)UPDATE事件,所以就會(huì)更新兩次,看一段網(wǎng)上的原話。

  1. 問(wèn)題:

  2. 最近在開(kāi)發(fā)Eventhandler的時(shí)候發(fā)現(xiàn)ItemAdded這個(gè)方法中如果有對(duì)列表項(xiàng)進(jìn)行更新操作,即執(zhí)行了item.Update() ,那么就會(huì)觸發(fā)ItemUpdated這個(gè)eventhandler事件,我們的本意是編輯,修改的時(shí)候

  3. 去觸發(fā)ItemUpdated這個(gè)eventhandler

  4. publicoverridevoid ItemAdded(SPItemEventProperties properties)

  5. {     …

  6. properties.ListItem.Update();

  7. }

  8. publicoverridevoid ItemUpdated(SPItemEventProperties properties)

  9. {

  10. //update code here

  11. }

  12. 解決辦法:

  13. 添加DisableEventFiring() 這個(gè)方法,阻止其他事件被調(diào)用

  14. publicoverridevoid ItemAdded(SPItemEventProperties properties)

  15. {

  16.     DisableEventFiring(); //Prevents events from being raised.

  17.     …

  18. properties.ListItem.Update();

  19. }

  20. 或者不使用properties.ListItem.Update();

  21. 改為properties.ListItem.SystemUpdate();

4、為項(xiàng)目創(chuàng)建一個(gè)強(qiáng)名稱(chēng)。點(diǎn)項(xiàng)目名,右鍵-屬性,出來(lái)下面界面。

MOSS2007對(duì)列表開(kāi)發(fā)EventHandler

然后點(diǎn)[生成],我的是中文版vs2005。然后將C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\EventHandler\EventHandler\bin\Debug編譯出來(lái)的EventHandler.dll拖到放到GAC目錄中(C:/WINDOWS/assembly)里。

-----------------------------------------------------------------------------------------

下面說(shuō)下部署EventHandler吧,還有就是用代碼,我們新建個(gè)控制臺(tái)程序,在program.cs里的代碼為,這里同樣也要加載上面的Microsoft.SharePoint.dll.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace EventHandlerConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            SPSite collection = new SPSite("http://moss2007/");
            SPWeb site = collection.OpenWeb();
            SPList hrlist = site.Lists["入職表"];
            string assName = "EventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dce19f87c0661759";
            string className = "EventHandler.EventHandlerTest";
            hrlist.EventReceivers.Add(SPEventReceiverType.ItemAdded,assName,className);
            hrlist.EventReceivers.Add(SPEventReceiverType.ItemUpdated,assName,className);
            hrlist.EventReceivers.Add(SPEventReceiverType.ItemDeleting,assName,className);
            //這段是執(zhí)行刪除那些事件
            //for (int i = hrlist.EventReceivers.Count - 1; i >= 0;i-- )
            //{
            //    hrlist.EventReceivers[i].Delete();
            //}
            Console.WriteLine("It's OK");
            Console.ReadLine();
        }
    }
}

這段代碼"EventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dce19f87c0661759"是使用Reflector工具找出EventHandler.dll的Assembly信息

SPSite collection = newSPSite("http://moss2007/");
SPWeb site = collection.OpenWeb();
SPList hrlist = site.Lists["入職表"];

這些代碼的意思是,打開(kāi)MOSS2007對(duì)列表開(kāi)發(fā)EventHandler,然后打開(kāi)列表MOSS2007對(duì)列表開(kāi)發(fā)EventHandler

最后重啟iisreset


借鑒的提示網(wǎng)址:http://tech.ddvip.com/2008-10/122535924187275.html

http://blog.csdn.net/wuhongyao3/article/details/2968309

http://down.51cto.com/data/487359



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI