将文档添加到非默认文档库时,ItemUpdated 不会触发
-
10-12-2019 - |
题
我有一个实现的项目接收器 ItemUpdated()
在项目上传到文档库后对其进行处理。如果我将文档添加到默认的“共享文档”库,一切都会正常 - 添加新文档时, ItemUpdated()
可以正常触发。但是,如果我创建一个 新文档库 在同一网站集中, ItemUpdated()
当我向其上传新文档时不会触发。但是当我上传另一个版本,或者重命名文档等时, ItemUpdated()
正常触发 - 只是在项目上传时未触发。典型例子:
- 我将“doc1”上传到文档库 -
ItemUpdated()
不执行(但是如果文档库为“共享文档”,则确实执行); - 我上传了“doc1”的另一个版本 -
ItemUpdated()
按预期执行; - 我重命名“doc1”-
ItemUpdated()
按预期执行。
我被引导相信添加文档时的事件顺序通常是:
添加 - 添加 - 更新 - 更新
那么为什么是我的 ItemUpdated()
除了“共享文档”之外的库没有被触发?是否有某些设置可能导致此问题?
注意,由于种种原因,我无法进行里面的处理 ItemAdded()
.
元素.xml:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="101">
<Receiver>
<Name>MyEventReceiverItemUpdated</Name>
<Type>ItemUpdated</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>MyProject.MyEventReceiver.MyEventReceiver</Class>
<SequenceNumber>1000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
代码:
public class MyEventReceiver : SPItemEventReceiver
{
// On document upload, this method is only entered if I upload to "Shared Documents"
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties); // doesn't get called either
MyMethod(properties);
}
}
解决方案 2
看来我找到了解决办法。我实施了 ItemAdded()
除了原来的 ItemUpdated()
在事件接收器中。在里面,我强制随后调用 ItemUpdated()
像这样:
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
properties.ListItem.UpdateOverwriteVersion();
}
注意 UpdateOverwriteVersion
“更新项目而不创建该项目的另一个版本”(MSDN)。这会导致调用 ItemUpdated()
添加新项目时;此外,它不会创建该项目的新版本(即当您第一次添加新项目时,您不会最终得到 2 个版本)。到目前为止,这对于所有文档库(无论有没有版本控制)都按预期工作。
其他提示
您在一个图书馆或另一个图书馆中是否有额外的专栏?似乎这对于上传时是否触发 ItemUpdating() 有所不同。看一下 这个帖子. 。其中关键的一句话是,
“在文档库中添加文档期间触发的事件可能包括itemuppating和itemupted。但是,只有该过程中还包括其他字段。”
因此,您可能希望在您的环境中尝试不同的库配置,以便更好地了解 SharePoint 的这一“功能”如何影响您的系统。
另外,我可以理解可能有理由避免使用 ItemAdded。如果 ItemUpdated 仍然是您的一个问题,并且您愿意分享一些有关为什么 ItemAdded 在您的环境中不受欢迎的详细信息,请考虑在此处提出一个有关如何使 ItemAdded 在您的系统中工作的单独问题。
祝你好运!