2016-02-08 16 views
0

Я динамически создаю вложенные папки для библиотеки документов и загружая файлы. Приведенный ниже код работает нормально. но проблемы возникают, когда я загружаю файл в папку существования, идентификатор документа для загруженных документов не находится в последовательности. Предположим, что если я загружаю файл в проекты путей \ PRJ1 \ Assignment, то в первый раз он создавал папки и файл с идентификаторами (1 \ 2 \ 3 \ 4) соответственно. Если я загружаю другой документ в ту же папку, то идентификатор папок не изменяется, а идентификатор файла - 8. Я не могу найти идентификатор 5,6,7 в библиотеке документов.Создание папок динамически с использованием CSOM в sharepoint вызывает проблемы с идентификаторами для документа

using (CSOM.ClientContext clientContext = new CSOM.ClientContext(SPserverUrl)) 
       { 
     clientContext.Credentials = new System.Net.NetworkCredential(Username, Password, Domain); 
        CSOM.Web _Site = clientContext.Web; 
        // string listrootfolder = "Testlist"; 
        CSOM.List _List = _Site.Lists.GetByTitle("Testlist"); 
        clientContext.Load(_List.RootFolder); 
        clientContext.ExecuteQuery(); 
        string listrootfolder = _List.RootFolder.Name.ToString(); 
    var folder = CreateFolder(clientContext.Web, "Testlist", folderpath); 

         // uploading the document 
         CSOM.FileCreationInformation newFile = new CSOM.FileCreationInformation(); 
         // newFile.Content = System.IO.File.ReadAllBytes(@"D:\Testupload.docx"); 
         byte[] bytes = Convert.FromBase64String(objReqDocumentDetials.FileData.ToString()); 
         newFile.Content = bytes; 
         // newFile.Url = objDocumentDetials.AttachmentName.ToString() + DateTime.Now.ToString("ddMMyyyyHHmmsss") + "." +   objDocumentDetials.FileType.ToString(); 
         newFile.Url = objReqDocumentDetials.FileName.ToString() + "." + objReqDocumentDetials.FileType.ToString(); 
         newFile.Overwrite = true; 
         Microsoft.SharePoint.Client.File _UploadingFile = folder.Files.Add(newFile); 

         var item = _UploadingFile.ListItemAllFields; 
         // var folder = item.GetFolder("account/" + folderName); 
         // item["Year"] = DateTime.Now.Year.ToString(); 
        // item.Update(); 

         clientContext.Load(_UploadingFile, f => f.ListItemAllFields); 
         clientContext.ExecuteQuery(); 
    } 

    public CSOM.Folder CreateFolder(CSOM.Web web, string listTitle, string fullFolderPath) 
    { 
     if (string.IsNullOrEmpty(fullFolderPath)) 
      throw new ArgumentNullException("fullFolderPath"); 
     CSOM.List list = web.Lists.GetByTitle(listTitle); 
     return CreateFolderInternal(web, list.RootFolder, fullFolderPath); 
    } 

    public CSOM.Folder CreateFolderInternal(CSOM.Web web, CSOM.Folder parentFolder, string fullFolderPath) 
    { 
     var folderUrls = fullFolderPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 
     string folderUrl = folderUrls[0]; 
     var curFolder = parentFolder.Folders.Add(folderUrl); 
     web.Context.Load(curFolder); 
     web.Context.ExecuteQuery(); 

     if (folderUrls.Length > 1) 
     { 
      var folderPath = string.Join("/", folderUrls, 1, folderUrls.Length - 1); 
      return CreateFolderInternal(web, curFolder, folderPath); 
     } 
     return curFolder; 
    } 
+0

Проблема была зафиксирована после того, как переопределил CreateFolder и CreateFolderInternal методы, как показано ниже – TARUN

ответ

1

Проблема была зафиксирована после того, как переопределил CreateFolder и CreateFolderInternal методы, как показано ниже

public CSOM.Folder CreateFolder(CSOM.Web web, string listTitle, string fullFolderPath) 
    { 

     var folderUrls = fullFolderPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 

     CSOM.List _List = web.Lists.GetByTitle(listTitle); 
     web.Context.Load(_List.RootFolder); 
     web.Context.ExecuteQuery(); 
     string listrootfolder = _List.RootFolder.Name.ToString(); 
     web.Context.Load(web, w => w.ServerRelativeUrl); 
     web.Context.ExecuteQuery(); 
     string root = ""; 
     for (int i = 0; i < folderUrls.Length; i++) 
     { 
      root = folderUrls[i].ToString(); 
      string targetFolderUrl = "/" + listrootfolder + "/" + string.Join("/", folderUrls, 0, i + 1); 
      var folder1 = web.GetFolderByServerRelativeUrl(targetFolderUrl); 
      web.Context.Load(folder1); 
      bool exists = false; 
      try 
      { 
       web.Context.ExecuteQuery(); 
       exists = true; 
      } 
      catch (Exception ex) 
      { 
      } 
      if (!exists) 
      { 
       if (i == 0) 
       { 
        CreateFolderInternal(web, _List.RootFolder, root); 
       } 
       else 
       { 
        web.Context.Load(web, w => w.ServerRelativeUrl); 
        web.Context.ExecuteQuery(); 
        var targetfolderUrls = targetFolderUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 
        string jj = string.Join("/", targetfolderUrls, 0, targetfolderUrls.Length - 1); 
        CSOM.Folder folder = web.GetFolderByServerRelativeUrl(web.ServerRelativeUrl + jj); 
        web.Context.Load(folder); 
        web.Context.ExecuteQuery(); 
        SPCreateFolderInternal(web, folder, root); 
       } 
      } 
      else 
      { 
       //already folder exists 
      } 
     } 
     CSOM.Folder finalfolder = web.GetFolderByServerRelativeUrl(web.ServerRelativeUrl + listrootfolder + "/" + fullFolderPath); 
     web.Context.Load(finalfolder); 
     web.Context.ExecuteQuery(); 
     return finalfolder; 
    } 
    private void CreateFolderInternal(CSOM.Web web, CSOM.Folder parentFolder, string fullFolderPath) 
    { 
     try 
     { 
      var curFolder = parentFolder.Folders.Add(fullFolderPath); 
      web.Context.Load(curFolder); 
      web.Context.ExecuteQuery(); 
     } 
     catch (System.Exception ex) 
     {    
     } 
    }