【问题标题】:How to detect the item restore on a ItemAdded() event on SharePoint如何在 SharePoint 上的 ItemAdded() 事件上检测项目还原
【发布时间】:2009-01-26 13:37:02
【问题描述】:

我知道,当从回收站恢复项目时,会触发 ItemAdded 事件。 但是,如何检测添加的项目是来自回收站还是新文件。

【问题讨论】:

    标签: events sharepoint recycle-bin


    【解决方案1】:

    这是一个非常古老的话题,但它出现在有关该主题的搜索结果中。

    从我对 SP2010 的实验来看,当项目来自回收站时,properties.AfterProperties 看起来是空的,而实际的新项目则完全填充了它。

    所以,这样一个简单的块就可以了:

    if (!properties.AfterProperties.Cast<DictionaryEntry>().Any())
    {
        // From Recycle Bin!
    }
    else
    {
        // This item is really new.
    }
    

    我还没有测试过 MOSS 或 SP2013。

    【讨论】:

    • 它对我有用。我要补充一点,它在 ItemAdded 事件中。我的解决方案是: public override void ItemAdded(SPItemEventProperties properties) { if (!properties.AfterProperties.GetEnumerator().MoveNext()) { //From recycle bin } }
    【解决方案2】:

    您可以检查项目的创建日期。回收站中的项目应该有一个以前的创建日期。

    【讨论】:

    • 这是一个实用的解决方案(如果将它们转换为毫秒,则几乎不会出错),但依赖 DateTime 比较似乎很笨拙(您需要涉及 CultureInfo 和字符串到日期的转换)。请参阅下面的答案
    【解决方案3】:

    回收站中的项目有一个 DeletedDate,它可能在 properties.BeforeProperties 中可用

    【讨论】:

      【解决方案4】:

      如果您想手动检测它,请检查文档的属性:创建的数据不同。对于一个文档,即使它被扔进回收站,创建的数据也是一样的。 如果您想通过某种工作流程来做到这一点,那么您可以将属性设置为基准。更多细节请自行查找。

      【讨论】:

        【解决方案5】:

        检查 SPItemEventProperties.ListItemId 属性的值:

        • 如果为0,则为新项;
        • 如果不为0,则为项 从回收站中恢复。

        【讨论】:

        • ItemAdded 事件发生在 列表项创建之后,并且在这两种情况下都将具有 ListItemId。您的答案仅对 ItemAdding 事件是正确的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多