tags:

views:

930

answers:

2

What im wondering how to do is when someone edits a list item and it goes through my event code that is fired when a change is made and save is hit, i dont want anyone to be able to edit that list item itself while its still processnig that request. So i was wondering if while in that event i can disable the individual item from being edited by someone else untill it is done doing what it is doing.

+2  A: 

Not sure if I understand exactly what you are want.

Try adding a field, hidden if you like, to the list or content type to use as a flag. When you enter your event code, make sure you check the flag first and if not set, set it and do your stuff. After you have done your stuff, unset the flag.

Here is some code to illustrate. Note that I have used a column named "updating". You can use the properties of the SPListItem as well if you do not care to add a column.

Oh, and don't forget to call DisableEventFiring before you to SPListItem.Update and then EnableEventFiring() afterwards. For get this and you will have a very nasty infinite loop on your hands.

.b

    public override void ItemAdding(SPItemEventProperties properties)
    {
        if (properties.ListItem["updating"].ToString() == "updating")
        {
            properties.Cancel = true;
            properties.ErrorMessage = "Item is currently updating, please try again later";
        }
        else
        {
            properties.ListItem["updating"] = "updating";
            this.DisableEventFiring();
            properties.ListItem.Update();
            this.EnableEventFiring();

            // do your stuff

            properties.ListItem["updating"] = "";
            this.DisableEventFiring();
            properties.ListItem.Update();
            this.EnableEventFiring();
        }
    }
Bjørn Furuknap
+1  A: 

I have no doubt that Bjørns solution will work but you have to be very carefull when implementing it. Pls. remember at your updating method should include a "finally" that resets the flag, no matter which exception gets thrown, other wise your list will be locked down for ever :-(

Kasper