【问题标题】:Information Management Policy in SharePointSharePoint 中的信息管理策略
【发布时间】:2008-11-01 05:08:17
【问题描述】:

一个不起眼的谜题,但它让我绝对发疯:

我正在 MOSS 中创建自定义信息管理策略。我已经实现了 IPolicyFeature,并且我的策略功能通过配置一个新的 SPItemEventReceiver 很高兴地注册了自己。我的图书馆中的所有新项目都会按应有的方式触发事件,并且一切正常。

IPolicyFeature 也有一个 ProcessListItem 方法,它应该将策略追溯应用到库中已经存在的项目(至少,只要它不断返回 true,它就应该这样做)。除非它没有。它只将该策略应用于库中的第一个项,我完全不知道为什么。

它似乎没有抛出异常,它确实从处理第一个项目返回 true,我想不出还有什么可以看的。有人吗?

编辑:下面科里的回答让我走上了正确的道路。其他东西确实失败了——我没有发现是什么,因为我的 windbg-fu 不是它应该是的,但我怀疑它类似于“在迭代时修改集合”。我的代码正在修改传递给 ProcessListItem 的 SPListItem,然后对其调用 SystemUpdate;一旦我更改了代码以便它创建自己的变量(指向完全相同的 SPListItem)并使用它,问题就消失了......

【问题讨论】:

    标签: sharepoint moss information-management


    【解决方案1】:

    我能想到的只有几件事可以尝试。首先,您是否在可以使用 Visual Studio 进行调试的机器上进行开发?因此,只需逐步完成它。

    假设情况并非如此 - 我要做的是在我注册策略之前启动 WinDBG 并将其附加到进程中。打开第一次机会异常,以便在它们发生时中断。你可以在它被破解后发出命令“sxe clr”来做到这一点。这里有一些关于 WinDBG 的更多信息:

    http://blogs.msdn.com/tess/archive/2008/06/05/setting-net-breakpoints-in-windbg-for-applications-that-crash-on-startup.aspx

    然后我要做的是观察抛出的 First Chance 异常,并执行 !PrintException 以查看发生了什么。我的猜测是某处引发了异常,导致应用程序停止处理其他项目。

    您的 ProcessListItem 的逻辑是什么样的?你有没有试过只做一个 return true 来确保它有效?

    【讨论】:

      【解决方案2】:

      那里有一些好主意,谢谢。 Visual Studio 调试器没有显示异常(为了以防万一,我将所有内容都包装在 try/catch 块中),但我没想过尝试 Windbg...

      【讨论】:

        最近更新 更多