我有一个带有 ItemAdding 事件的简单事件处理程序,该事件更改了我在 ItemUpdated 方法中需要的列值。上传 word 2007 文档(*.docx、*.pptx 或 xlsx)后,列的值发生了变化,但是当我保护文档时,列的值在 ItemUpdated 方法中消失了。这仅适用于 office 2007 文档,其他文件不会清除该值。
事件处理程序在 MOSS 2007 的文档库中运行。
谢谢
我有一个带有 ItemAdding 事件的简单事件处理程序,该事件更改了我在 ItemUpdated 方法中需要的列值。上传 word 2007 文档(*.docx、*.pptx 或 xlsx)后,列的值发生了变化,但是当我保护文档时,列的值在 ItemUpdated 方法中消失了。这仅适用于 office 2007 文档,其他文件不会清除该值。
事件处理程序在 MOSS 2007 的文档库中运行。
谢谢
我们有同样的问题。列表中的属性似乎已添加到 office 2007 文档中,但仅使用上传/创建字段的默认值。一旦项目被编辑,我们就会发现办公室文档的值会覆盖我们在事件处理程序中设置的值。
我们在使用异步事件处理程序时不会遇到这种情况,但是异步事件处理程序与具有某些类型更新的其他线程上的更新发生冲突。
我们正在与 Microsoft 就这个问题进行支持通话。他们承认这还不是没有结果。
尝试使用异步事件处理程序(它比从办公室文档更新的代码运行稍晚一点),但要小心。
更新:
一种解决方法是将SPWeb.ParserEnabled设置为 FALSE 将删除与将停止上述行为的文档属性的连接。它可以防止将列表属性添加到 office 文档中。
当您将 Office 文档上传到 SharePoint 时,它会尝试从文档中提取列并将它们提升到列表中。
请检查您的文档是否设置了任何属性。如果是这种情况,它可以解释你所看到的。
注意:打开高级文档属性并删除所有自定义属性以确保
我解决了将 SPWeb.ParserEnabled = false 放入 ItemUpdating 方法的问题。
代码:
properties.ListItem.Web.ParserEnabled = false;
谢谢大家的帮助
设置 SPWeb.ParserEnabled = false 确实有效,但有效果!一个非常明显的问题是它会破坏站点和列表模板。如果 SPWeb.ParserEnabled = false,并且您保存了列表或站点模板,则它的元数据未设置(功能 ID、产品版本等),并且它不会在可供选择的模板列表中使用。您可以通过在 itemUpdated 事件期间重置 SPWeb.ParserEnabled=true 来解决此问题,但我尚未完全测试这是否会解决所有问题......