2010-11-22 10 views

risposta

5

È possibile utilizzare il metodo del servizio di elenchi web GetListAndView per ottenere gli schemi per la lista e una vista.

Dalla documentazione, se si lascia vuoto il parametro viewName, verrà restituita la vista predefinita. Quindi, è possibile leggere il nodo <ViewFields></ViewFields> per l'elenco di campi.

* Edit *

Risulta utilizzando XPath per interrogare il XML restituito è stato più difficile di quanto pensassi ... qui è quello che mi si avvicinò con:

XmlNode result = webService.GetListAndView("My Pictures", string.Empty); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(result.OwnerDocument.NameTable); 
nsmgr.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/"); 

string xpathQuery = "sp:View/sp:ViewFields/sp:FieldRef"; 
XmlNodeList nodes = result.SelectNodes(xpathQuery, nsmgr); 

for (int i = 0; i < nodes.Count; i++) 
{ 
    Console.WriteLine(nodes[i].Attributes["Name"].Value); 
} 

assomiglia devi avere un XmlNamespaceManager altrimenti la query non restituisce mai alcun valore. Qualcosa su come specificare lo spazio dei nomi ... Ecco a good reference.

+0

sembra interessante, lo proverò ASAP e pubblicherò i risultati –

+0

ViewFields Restituisce i nomi dei campi, quindi ho dovuto ri-featch ogni campo con il suo nome per ottenere il suo nome di visualizzazione, e il secondo problema che ViewFields non vengono visualizzati tutti i campi visualizzati nella vista predefinita del punto di condivisione per quell'elenco (se l'elenco è un elenco di immagini)! qualche idea? –

+0

Ho provato questo per ottenere Fields, System.Xml.XmlNode list = SPListWebService.GetListAndView (xmlnode.Attributes ["Title"]. Value, string.Empty); System.Xml.XmlNodeList visibleColumns = list.SelectNodes ("View/ViewFields/FieldRef"); .... dove ho sbagliato? –

1

Il metodo GetList() restituisce un frammento CAML che include le definizioni del campo (colonna) dell'elenco. Si potrebbe desiderare di provare un XPath expression:

XmlNode list = yourListService.GetList("yourListName"); 
XmlNodeList visibleColumns 
    = list.SelectNodes("Fields/Field[not(@Hidden) or @Hidden='FALSE']"); 
+0

Sono stato a guardare 'Lista' InnerXml ed io Ho appena notato che non esiste un attributo Nascosto = "VERO": S riformulerò la mia domanda: come posso leggere tutte le colonne che appaiono all'utente nella lista quando lui/lei apre la lista attraverso il sito sharePoint? –

+0

@Rami Shareef: vuoi dire nella visualizzazione predefinita dell'elenco? –

+0

@Kit: esattamente, la vista predefinita nel sito sharePoint. –

1

Ho utilizzato il codice precedente ma, dopo una lunga ricerca, ho trovato la soluzione per ottenere tutte le colonne personalizzate o personalizzate dall'elenco dei punti di condivisione. Il codice per che è condivisa sul ..

Custom Columns or ALL Columns

+1

Lone link è [considerato una risposta scarsa] (http://stackoverflow.com/faq#deletion) in quanto non ha senso da solo e la risorsa target non è garantita per essere viva in futuro. [Sarebbe preferibile] (http://meta.stackexchange.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. – j0k

0

soluzione è abbastanza semplice. Utilizzare GetList() o funzioni simili è la strada sbagliata.

Invece utilizzare GetListContentTypesAsync() per ottenere Content ID e quindi ottenere la specifica ContentType utilizzando GetListContentTypeAsync(), restituisce XML che include tutte le colonne visibili in elenco SharePoint:

var Contents = await soapListClient.GetListContentTypesAsync(list.Title, "0x01"); // 0x01 is kind of a root element for sharepoint. 
String ContentID = Contents.Body.GetListContentTypesResult.Descendants().FirstOrDefault().Attribute("ID").Value.ToString(); 
var ContentType = await soapListClient.GetListContentTypeAsync(list.Title, ContentID); 
XElement xmll = XElement.Parse(ContentType.Body.GetListContentTypeResult.ToString()); 
Problemi correlati