【发布时间】:2012-06-12 04:41:30
【问题描述】:
我正在尝试在 SharePoint 2010 中实现自定义,以便在将文档上载到库时,更改文件名以在名称中包含文档 ID。 (我知道人们不应该再担心文件名了,但是我们有很多已经命名的遗留文件和喜欢拥有本地副本的用户)。
我能够在 ItemAdded 事件上实现自定义事件接收器,通过在文件名前添加文档 ID 来重命名文件。这可以通过网络上传正常工作。
问题出在资源管理器视图上。当我尝试在资源管理器视图中使用 WebDAV 添加文件时,我得到了该文件的两个副本。似乎当文件通过网络上传时,触发的事件是
- 项目添加
- 项目已添加
但是当我将文件复制/粘贴到资源管理器视图中时,我会看到以下事件:
- 项目添加
- 项目已添加
- 项目添加
- 项目已添加
- 项目更新
- 项目已更新
结果是我有两个名称不同的文件(因为文档 ID 不同)。
我发现很多人在网上讨论这个问题(this 是我找到的最好的文章)。有人有其他想法吗?在工作流而不是事件接收器中执行此操作是否更有意义?我可以改用计划作业,但如果文档名称在几分钟后更改,用户可能会感到困惑。
这是我的代码,在使用网络上传时效果很好,但在使用资源管理器视图时效果不佳:
public override void ItemAdded(SPItemEventProperties properties)
{
try
{
SPListItem currentItem = properties.ListItem;
if (currentItem["_dlc_DocId"] != null)
{
string docId = currentItem["_dlc_DocId"].ToString();
if (!currentItem["BaseName"].ToString().StartsWith(docId))
{
EventFiringEnabled = false;
currentItem["BaseName"] = docId + currentItem["BaseName"];
currentItem.SystemUpdate();
EventFiringEnabled = true;
}
}
}
catch (Exception ex)
{
//Probably should log an error here
}
base.ItemAdded(properties);
}
【问题讨论】:
标签: sharepoint-2010