Creare la cartella in una raccolta documenti di SharePoint utilizzando il modello a oggetti client

Voglio creare la cartella in una raccolta documenti di SharePoint utilizzando il modello a oggetti client (C#). Di seguito è il codice che lo fa.

 ContentTypeCollection listContentTypes = list.ContentTypes;
 clientContext.Load(listContentTypes, types => types.Include
                                     (type => type.Id, type => type.Name,
                                     type => type.Parent));

 var result = clientContext.LoadQuery(listContentTypes.Where(c => c.Name == "Folder"));

clientContext.ExecuteQuery();

ContentType folderContentType = result.FirstOrDefault();

ListItemCreationInformation newItemInfo = new ListItemCreationInformation();
newItemInfo.UnderlyingObjectType = FileSystemObjectType.Folder;
newItemInfo.LeafName = Foldername;
ListItem newListItem = list.AddItem(newItemInfo);

newListItem["ContentTypeId"] = folderContentType.Id.ToString();
newListItem["Title"] = Foldername;
ewListItem.Update();

clientContext.Load(list);
clientContext.ExecuteQuery();

Ora ho migliaia di di creare cartelle nella libreria.
C’è qualche altro modo posso farlo usando l’operazione di Massa, in modo da client a server di connessione potrà essere chiamato solo una volta.

Problema è che si sta prendendo troppo tempo per creare la cartella, perché per ogni cartella sarà chiamata a oggetti di SharePoint.

InformationsquelleAutor User5590 | 2015-07-02

 

2 Replies
  1. 6

    È facile. Basta aggiungere tutte le cartelle che si desidera creare un elenco e quindi scorrere l’elenco e creare tutti gli elementi di una lista prima di eseguire il ExecuteQuery funzione:

            List<string> folderNames = new List<string>();
            folderNames.Add("Folder 1");
            folderNames.Add("Folder 2");
            folderNames.Add("Folder 3");
    
            ClientContext context = new ClientContext("https://sharepoint.Site/Test");
            List list = context.Web.Lists.GetByTitle("Documents");
            var folder = list.RootFolder;
            context.Load(folder);
            context.ExecuteQuery();
    
            foreach (string folderName in folderNames)
            {
                ListItemCreationInformation newItemInfo = new ListItemCreationInformation();
                newItemInfo.UnderlyingObjectType = FileSystemObjectType.Folder;
                newItemInfo.LeafName = folderName;
                ListItem newListItem = list.AddItem(newItemInfo);
                newListItem["Title"] = folderName;
                newListItem.Update();
            }
            context.ExecuteQuery();

    Funziona come un fascino. Hai solo bisogno di palco tutti i vostri percorsi di cartelle e/o i nomi prima di eseguire qualsiasi CSOM codice.

    • Grazie Arcan. Mi ha aiutato molto.
    • Grazie per questo frammento di codice, funziona perfettamente. Mi ha fatto uscire da una salamoia. La leggenda!
  2. 7

    Alcune raccomandazioni basate sul tuo esempio:

    • Dal tipo di contenuto proprietà non è necessaria, la prima richiesta per
      ottenere il tipo di contenuto Cartella possono essere omessi.
    • in questo esempio non c’è bisogno di caricare tipi di contenuto di elenco e elenco oggetti.

    Detto questo, di seguito viene fornita la modifica dell’esempio per la creazione di una cartella:

    public static class ListExtensions
    {
        public static void CreateFolder(this List list, string name)
        {
            var info = new ListItemCreationInformation
            {
                UnderlyingObjectType = FileSystemObjectType.Folder,
                LeafName = name
            };
            var newItem = list.AddItem(info);
            newItem["Title"] = name;
            newItem.Update();
        }
    }

    Utilizzo

    using (var ctx = new ClientContext(webUri))
    {
        var list = ctx.Web.Lists.GetByTitle(listTitle);
        list.CreateFolder(folderName);
        ctx.ExecuteQuery();
    }

    In materia di operazioni di massa, poiché SharePoint CSOM supporta Richiesta Di Dosaggio, più cartelle può essere creata come illustrato di seguito:

    using (var ctx = new ClientContext(webUri))
    {
        var list = ctx.Web.Lists.GetByTitle(listTitle);
        for (var year = 2000; year <= 2015; year++)
        {
           list.CreateFolder(year.ToString());
        }
        ctx.ExecuteQuery();
    }

    In questo caso una sola richiesta, verrà inviato al server.

    • Grazie Vadim. E ‘ stato davvero utile

Lascia un commento