1

我有一个事件接收器,它应该将元数据添加到 SharePoint 库中的文档中。事件接收器在 ItemUpdated 上触发,并且应该将 URL 添加到字段。

以下代码完美运行,除了一个小问题,在替换文档时它仍处于签出状态。

因此,当我向库中添加新文档时,事件接收器会添加元数据并签入该文档。但是,当我上传具有相同名称的新文档并替换它时,该文档没有任何元数据并已签出。然后当我手动签入文档时,会添加元数据。

这是我的代码。

SPField projectNameDocField = Methods.GetField(web, sharedDocumentList, Field.projectURLInternal);

SPListItem projectSiteItem = GetProjectSiteItem(web);

SPField projectNameSiteField = Methods.GetField(web.ParentWeb, projectSiteItem.ParentList, Field.projectURLInternal);

if (listItem.File.CheckOutType == SPFile.SPCheckOutType.None)
{
    listItem.File.CheckOut();

    if (projectSiteItem[projectNameSiteField.Id] != null)
    {
        SPFieldUrlValue projectNameUrlField = new SPFieldUrlValue();
        projectNameUrlField.Description = web.Title;
        projectNameUrlField.Url = web.Url;

        listItem[projectNameDocField.Id] = projectNameUrlField;
        listItem.Update();

        SPListItem updatedListItem = sharedDocumentList.GetItemById(listItem.ID);

        if (updatedListItem.File.CheckOutType != SPFile.SPCheckOutType.None)
        {
            updatedListItem.File.CheckIn("Automatisk uppdatering av metataggar", SPCheckinType.MinorCheckIn);
        }
    }
}

感谢您的帮助。

4

1 回答 1

0

您的事件接收器仅在项目更新后触发。当您上传文档以替换现有文档时,在签入更改之前不会触发该事件。

尽管我没有测试过ItemUpdating 事件,但您可能会更幸运。这可能会在登记入住前触发。

您可以在此处查看完整的活动列表,以供其他人尝试。

于 2013-03-02T00:05:14.933 回答