快速 & 容易: 重命名已上載的檔,使用事件接收器通過 SharePoint 物件模型

更新: 這工作,但有很大的局限性,介紹了在評論中. 這可能仍然是有用的一些基本狀況.

更新 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();
        }

4 上“的想法快速 & 容易: 重命名已上載的檔,使用事件接收器通過 SharePoint 物件模型

  1. 沒有名稱
    還, 如果你從這個詞內, 它將返回一個錯誤,並說該檔不存在. 它是不是在講新的 URL. 我尚未找到解決的辦法.
    答覆
  2. 保羅 · 高爾文
    謝謝你指出來. 我也不知道那個答案 … 將非常有意思,請參閱如何管理它.
    RE: 非同步 & 重定向
    我想知道是否將其移動到 ItemAdding 將解決它. 這就是一個大洞.
    謝謝!
    –保羅 ·
    答覆
  3. 兇犯米塔
    因為該檔獲取非同步移動, 有的被重定向到 EditForm.aspx 提交移動之前的可能性 (這是壞). 你會看到這發生是否你睡前 MoveTo 行的代碼. 還沒發現是關於這一問題除了使用自訂的編輯表單可以做什麼.
    答覆

離開一個答覆 兇犯米塔 取消回复

您的電子郵件地址不會被公開. 必需的地方已做標記 *