0

Je crée les dossiers imbriqués dynamiquement pour une bibliothèque de documents et le chargement de fichiers. Le code ci-dessous fonctionne bien. mais les problèmes sont lorsque je télécharge le fichier dans le dossier d'existence, l'ID du document pour les documents téléchargés n'est pas en séquence. Supposons que si je télécharge un fichier sur les projets de chemin d'accès \ PRJ1 \ Assignment, il créait les dossiers et le fichier avec les ID (1 \ 2 \ 3 \ 4) respectivement. Si je télécharge un autre document dans le même dossier, l'identifiant des dossiers ne change pas mais l'identifiant du fichier est 8. Je ne suis pas incapable de trouver l'identifiant 5,6,7 dans la bibliothèque de documents.La création dynamique de dossiers à l'aide de CSOM dans sharepoint provoque des problèmes d'ID pour le document

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

Le problème a été résolu après redéfinie les méthodes CreateFolder et CreateFolderInternal comme ci-dessous – TARUN

Répondre

1

Le problème a été résolu après redéfinie les méthodes CreateFolder et CreateFolderInternal comme ci-dessous

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