Office 2007 文档中 Sharepoint 中的 ItemUpdate 后数据消失
-
03-07-2019 - |
题
我有一个简单的事件处理程序,其中包含 ItemAdding 事件,该事件可更改 ItemUpdated 方法中所需的列值。上传 Word 2007 文档(*.docx、*.pptx 或 xlsx)后,该列的值发生更改,但是当我保护该文档时,该列的值在 ItemUpdated 方法中消失。这只发生在 Office 2007 文档中,其他文件不会清除该值。
事件处理程序在 MOSS 2007 的文档库中运行。
谢谢
解决方案
我们有同样的问题。列表中的属性似乎已添加到 Office 2007 文档中,但仅使用上传/创建时字段的默认值。编辑项目后,我们会发现 Office 文档值会覆盖事件处理程序中设置的值。
当使用异步事件处理程序时,我们不会遇到这种情况,但异步事件处理程序与具有某些类型更新的其他线程上的更新发生冲突。
我们正在与 Microsoft 就这个问题进行支持通话。他们承认事实并非如此 暂无结果。
尝试使用异步事件处理程序(它的运行时间比从 Office 文档更新的代码晚一点),但要小心。
更新:
解决方法是设置 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 来解决此问题,但我尚未完全测试这是否可以解决所有问题...