2012-08-24 66 views
1

我有一個事件接收器應該將元數據添加到SharePoint庫中的文檔。事件接收器在ItemUpdated上觸發,應該向一個字段添加一個URL。使用事件接收器更新SharePoint庫中的文檔元數據

下面的代碼完美工作,除了一個小問題,當替換文檔仍然檢出。

因此,當我向庫中添加新文檔時,事件接收器會添加元數據並檢入文檔。 但是,當我上傳具有相同名稱的新文檔並替換它時,文檔會沒有任何元數據並被檢出。當我手動簽入文檔時,元數據會被添加。

這是我的代碼。

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); 
     } 
    } 
} 

感謝您的幫助。

+1

所以你問爲什麼當你替換文檔時你的文檔不會自動檢入?因爲您的代碼只能在未檢出文檔時才運行。如果替換文件,並且文件以檢出狀態結束,則跳過添加元數據並檢入文件的邏輯。 – CBono

回答

0

您的活動接收器僅在更新項目後觸發。當你上傳文件來替換現有的事件時,直到檢入更改纔會被觸發。

雖然我沒有測試過,但你可能會有更多的運氣與ItemUpdating event。這可能會在登記入住之前發生。

您可以查看full list of events here供他人試用。

相關問題