Continuo a incontrando questo problema e Google non sembra mai capire che cosa voglio fare, così ho pensato che questo scriverebbe.
Ho fatto un sacco di ricezione di eventi di debug nell'ultima settimana o due. L'ER è definito contro una raccolta documenti. I singoli elementi nella raccolta documenti sono strettamente legati alla loro cartelle padre. Così, Ricevo sempre la cartella dell'elemento per varie manipolazioni. Durante il debug, Avevo bisogno di aggiornare i metadati di una cartella per un elemento specifico cui ID so.
Qui è una piccola applicazione console (progettato per essere eseguito sul server della farm) che accetta due argomenti: l'ID di un elemento e un valore da assegnare a un campo, "Stato di approvazione". E ' difficile codici un sacco di roba e nessun controllo di errore.
Il codice sembra un luogo duro codificato, Ottiene una raccolta di documenti hardcoded e poi trova l'elemento indicato. Poi trova la cartella padre di tale elemento e assegna il valore di stato.
La lezione fondamentale qui per me è che SPItem non consente di accedere alla cartella. È necessario utilizzare SPListItem.File.
Se qualcuno si preoccupa di offrire una critica o suggerire un modo migliore per ottenere la cartella di un elemento, si prega di lasciare un commento.
<codice>
utilizzando Sistema; utilizzando System.Collections.Generic; utilizzando System. Text; utilizzando Microsoft. SharePoint; utilizzando System. Collections; spazio dei nomi Conchango { /// <Riassunto> /// </Riassunto> classe ManualFolderUpdate { statico void Main(stringa[] args) { stringa MSH = "ManualFolderUpdate (v 1.0): "; // MSH = "intestazione del messaggio" Console.WriteLine(MSH + "Avviamento. Stavo ultima modifica 04/08/08."); stringa URL = http://localhost/xyzzy; utilizzando (SPSite oSPSite = Nuovo SPSite(URL)) { utilizzando (SPWeb oSPWeb = oSPSite.OpenWeb()) { SPList docLib = oSPWeb.Lists["Documenti"]; Console.WriteLine(MSH + "Ha ottenuto la raccolta documenti."); Console.WriteLine(MSH + "Doc lib conteggio: [" + docLib.ItemCount + "]."); int FolderID = 0; stringa NewStatus = "xyzzy"; FolderID = sistema.Convertire.ToInt32(args[0].ToString()); Console.WriteLine("Cerca cartella per elemento: [" + FolderID + "]."); SPListItem li = docLib.GetItemById(FolderID); SPFolder thisItemFolder = li.File.ParentFolder; Console.WriteLine(MSH + "Ha ottenuto la cartella padre."); NewStatus = args[1].ToString(); Console.WriteLine("Stato di impostazione per [" + NewStatus + "]."); Console.WriteLine("Premere ritorno a commettere l'aggiornamento o CTRL-C per interrompere l'operazione."); Console.ReadLine(); thisItemFolder.Item["Lo stato di approvazione"] = NewStatus; thisItemFolder.Item.Update(); Console.WriteLine(MSH + "Finito l'aggiornamento della cartella. Uscendo."); } // utilizzando SPWeb } // utilizzando SPSite Console.WriteLine(MSH + "Finito."); } // Main } // classe foldersync } // spazio dei nomi
</codice>
</fine>