更新: 這工作,但有很大的局限性,介紹了在評論中. 這可能仍然是有用的一些基本狀況.
更新 2: 我當前的專案中, 使用者始終上載檔. 作為一個結果, 不會遇到一個問題 MS Word 正在運行,並且認為它重命名該檔. 我也遇到一個問題, "修改該檔的其他人" 並解決了這個問題通過一個簡單的信號類型標誌. 使用者需要從其預設值的元資料欄位更改為別的東西. Itemupdated() 在實際執行重命名之前,自那時以來,接收器看上去為一個有效的值, 我沒有任何問題. 您的里程可能會發生變化.
我有一個用戶端要求更改上載到以符合特定的命名約定的特定文件庫的檔案名稱. 該 API 並不提供"重命名()" 方法. 相反, 我們使用 "MoveTo(…)". 這裡是代碼的最少來完成這位:
公眾 重寫 無效 ItemAdded(SPItemEventProperties 屬性) { SPFile f = 屬性。ListItem.File; f.MoveTo(屬性。ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
唯一麻煩的地方是"屬性。"ListItem.ParentList.RootFolder.Url. MoveTo() 方法需要一個 URL. 那搗碎的字串點我到我當前的文件庫的根資料夾中. 這讓我們避免任何硬編碼在我事件接收器.
這是一個更有用的版本,做同樣的事, 但將該檔的名稱分配給"標題":
公眾 重寫 無效 ItemAdded(SPItemEventProperties 屬性) { DisableEventFiring(); // 將此專案的標題分配給檔本身的名稱. // 請注意: 此項工作分配必須發生之前我們修改檔本身. // 調用 update() SPFile 似乎無效中的屬性 // 某種意義上. "標題的更新" 失敗之前,更改 (和更新() 調用) // 在更改前遷往該檔案名稱. 屬性。ListItem["標題"] = 屬性。ListItem.File.Name; 屬性。ListItem.Update(); SPFile f = 屬性。ListItem.File; // 獲取檔的副檔名. 我們稍後需要,. 字串 spfileExt = 新增功能 FileInfo(f.Name).擴展; // 重命名的檔的清單項的 id,並使用檔副檔名來保持 // 它不變的部分. f.MoveTo(屬性。ListItem.ParentList.RootFolder.Url + "/" + 屬性。ListItem["ID"] + spfileExt); // 犯下移動. f.Update(); EnableEventFiring(); } |