2012-10-01 81 views
3

我正在使用以下代碼在我的文檔庫中創建一個文件夾。事件被觸發並執行,直到我的代碼的最後一行沒有任何問題。但是該文件夾沒有被創建或列在我的文檔庫中。使用Sharepoint事件接收器在文檔庫中創建文件夾

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    base.ItemAdded(properties);   

    string strDashListRoot = "http://win-hmpjltdbh5q:37642"; 
    using (SPSite site = new SPSite(strDashListRoot)) 
    { 
     using (SPWeb web = site.OpenWeb()) 
     { 
      web.AllowUnsafeUpdates = true;      

      SPList spl = web.Lists["client_documents"]; 
      spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld"); 
      spl.Update(); 
      web.AllowUnsafeUpdates = false; 
     } 
    }   
} 
+0

你或許可以使用當前的背景下,而不是新的-ING一個網站/網頁(可能不是你的問題雖然)。你是否有任何例外,還是隻是沒有創建?您確定該帳戶有足夠的權限來創建文件夾嗎? – Servy

回答

5

你需要

var i = spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld"); 
i.Update(); 

,而不是

spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld"); 
spl.Update(); 

(假設你的Add電話是好的 - 它看起來OK我)

(另外,你確定你需要AllowUnsafeUpdates處理?當你在時,我不會期望它是必要的。處理器)

+0

似乎很奇怪..所有目錄都已創建,但無法在列表視圖中看到。我可以通過URL的名稱訪問目錄。即文件夾「Helllworld」存在,但在我的列表中不可見。當我執行http:// win-hmpjltdbh5q:37642/client_documents/HelloWorld時,我怎麼能看到它:( – aarpey

+0

+1)在'AllowUnsafeUpdates'上 - 如果使用'SPContext.Current.Web',則不需要OP新聞SPWeb它需要被設置(例如,如果在GET期間通過在另一處理程序中設置「AllowUnsafeUpdates」進行原始呼叫)缺乏處理使用足夠強大的帳戶來更新另一個網絡的代碼是可疑的,但是不太可能是問題 –

+0

使用'AddItem'代替'Items.Add'的性能會更好,請看這裏:http://sharepoint.stackexchange.com/a/54989/17191 –

0

我開發了一個基於Rawling的回答下面的代碼:

private static void CreateFolder(SPWeb web, SPList spList, SPListItem currentItem, string folderName) 
{ 
    if (currentItem.FileSystemObjectType != SPFileSystemObjectType.Folder) 
    { 
     string itemUrl = web.Url + "/" + currentItem.Url.Substring(0, currentItem.Url.LastIndexOf('/')); 

     var folder = spList.Items.Add(itemUrl, SPFileSystemObjectType.Folder, folderName); 
     string folderUrl = itemUrl + "/" + folder.Name; 

     if (!FolderExists(folderUrl, web)) 
     { 
      try 
      { 
       folder.Update(); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 
    } 
} 


public static bool FolderExists(string url, SPWeb web) 
{ 
    if (url.Equals(string.Empty)) 
    { 
     return false; 
    } 

    try 
    { 
     return web.GetFolder(url).Exists; 
    } 
    catch (ArgumentException) 
    { 
     throw; 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 
相關問題