zoukankan      html  css  js  c++  java
  • 记录:MOSS:EventHandler部署和使用


     

    1.利用 Feature 来实现 EventHandler SPList 的绑定:

     

    public class FeatureReceiver : SPFeatureReceiver {

     

        public override void FeatureActivated(SPFeatureReceiverProperties properties)

        {

            try

            {

                using (SPSite site = new SPSite(((SPSite)properties.Feature.Parent).Url))

                {

                    SPList list = site.RootWeb.Lists[TestListName.TestA];

     

    // 将 list.EventReceiver.Class==ListEventHandler的事件删除

                    DeleteEventHandler(list, typeof(ListEventHandler));

     

    // 重新添加:事件类型、事件程序集名、事件程序集下的事件类名

                    list.EventReceivers.Add(SPEventReceiverType.ItemAdded, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);

                    list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);

                    list.EventReceivers.Add(SPEventReceiverType.ItemDeleting, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);

     

                }

            }

            catch (Exception ex)

            {

            }

     

        }

     

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties) {

            /* no op */

        }

     

        public override void FeatureInstalled(SPFeatureReceiverProperties properties) {

            /* no op */

        }

        public override void FeatureUninstalling(SPFeatureReceiverProperties properties) {

            /* no op */

        }

     

        /// <summary>

        /// 删除指定SPList的事件句柄

        /// </summary>

        /// <param name="list">列表</param>

        /// <param name="type">事件类的类型</param>

        private void DeleteEventHandler(SPList list, Type type)

        {

            try

            {

                for (int i = list.EventReceivers.Count; i > 0; i--)

                {

                    SPEventReceiverDefinition receiver = list.EventReceivers[i - 1];

                    if (receiver.Class.ToLower().Equals(type.FullName.ToLower()))

                    {

                        receiver.Delete();

                    }

                }

            }

            catch (Exception ex)

            {

            }

        }

     

     }

     

    2.事件操作:

    public class ListEventHandler:SPItemEventReceiver

        {

            private static readonly string testA = TestListName.TestA;

            private static readonly string testB = TestListName.TestB;

     

            public override void ItemAdded(SPItemEventProperties properties)

            {

                base.ItemAdded(properties);

            }

            public override void ItemDeleting(SPItemEventProperties properties)

            {

              // Prevents events from being raised:阻止其他事件被调用

              // 对应的是:EnableEventFiring()

                this.DisableEventFiring();

     

                int id = properties.ListItemId;

     

                try

                {

                    using (SPSite site = new SPSite(properties.SiteId))

                    {

                        using (SPWeb web = site.OpenWeb())

                        {

                            SPListCollection lists = web.Lists;

     

                            bool flag = web.AllowUnsafeUpdates;

     

                            web.AllowUnsafeUpdates = true;

     

                            for (int i = 0; i < lists.Count; i++)

                            {

                                if (lists[i].Title.Equals(testB))

                                {

                                    SPList tempList = lists[i];

                                    for (int j = 0; j < tempList.ItemCount; j++)

                                    {

                                        if (tempList.Items[j].ID.Equals(id))

                                        {

                                            tempList.Items[j].Delete();

                                            tempList.Update();

                                        }

                                    }

                                }

                            }

     

                            web.AllowUnsafeUpdates = flag;

                        }

                    }

                }

                catch (Exception ex)

                {

                }

                finally

                {

                }

     

            }

            public override void ItemUpdated(SPItemEventProperties properties)

            {

                base.ItemUpdated(properties);

            }

    }

     

    常用的EventHandler事件有:

    ItemAdding:添加前;

    ItemAdded:添加后;

    ItemUpdating:更新前;

    ItemUpdated:更新后;

    ItemDeleting:删除前;

    ItemDeleted:删除后;

     

    最常用的是:ItemAdded、ItemUpdating、ItemDeleting;

     

    this.DisableEventFiring();是为了避免调用ItemEventReceiver事件。

     

    可以参照以下资料:http://www.nanmu.net/keli/blog/Lists/Posts/Post.aspx?ID=38

    (1).在开发SharePoint的EventHandler也许你会有这样的需求:在ItemUpdated事件中修改当前记录的某个字段的值,这样在修改的时候又会触发ItemUpdated事件,为了避免在此触发ItemUpdated事件,可以用this.DisableEventFiring()方法;

     

    try

    {

        this.DisableEventFiring();

        

        ...

        ...

        Item.Update();

    }

    finally

    {

         this.EnableEventFiring();

    }

     

    注:

    也可以使用 SPItem.SystemUpdate()方法来更改,这样也不会触发ItemUpdated事件;

     

     

    (2).在 SPItemEventReceiver.ItemUpdating, ItemAdding events:

    properties.AfterProperties["Title"] = "the Title changed at " + DateTime.Now.ToString();

     

    这样就可以更改SPItem.Title的内容,且不会触发任何的 ItemEventReceiver事件。

  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1530337.html
Copyright © 2011-2022 走看看