在sharepoint中,禁用单个列表项的更新

在sharepoint中,禁用单个列表项的更新,sharepoint,Sharepoint,我想知道的是,当有人编辑一个列表项时,它会通过我的事件代码,当进行更改并点击save时,它会被触发。我不希望任何人能够在列表项仍在处理该请求时编辑该列表项本身。因此,我想知道,在这种情况下,我是否可以禁止其他人编辑单个项目,直到它完成正在执行的操作。不确定我是否完全理解您想要的内容 尝试向列表或内容类型中添加一个字段(如果愿意,可以隐藏),以用作标志。当您输入事件代码时,请确保首先检查标志,如果未设置,请设置标志并执行操作。完成你的任务后,把旗子解开 下面是一些代码来说明。注意,我使用了一个名为

我想知道的是,当有人编辑一个列表项时,它会通过我的事件代码,当进行更改并点击save时,它会被触发。我不希望任何人能够在列表项仍在处理该请求时编辑该列表项本身。因此,我想知道,在这种情况下,我是否可以禁止其他人编辑单个项目,直到它完成正在执行的操作。

不确定我是否完全理解您想要的内容

尝试向列表或内容类型中添加一个字段(如果愿意,可以隐藏),以用作标志。当您输入事件代码时,请确保首先检查标志,如果未设置,请设置标志并执行操作。完成你的任务后,把旗子解开

下面是一些代码来说明。注意,我使用了一个名为“更新”的列。如果不想添加列,也可以使用SPListItem的属性

哦,别忘了在调用SPListItem.Update之前调用DisableEventFireing,然后再调用EnableEventFireing()。为了得到这个,你的手上会有一个非常讨厌的无限循环

.b


我毫不怀疑比约恩斯的解决方案会奏效,但在实施时必须非常小心。 请。请记住,在您的更新方法中,应该包含一个“finally”来重置标志,无论抛出哪个异常,否则您的列表将永远被锁定:-(

    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();
        }
    }