2010-11-22 15 views

Répondre

5

Vous pouvez utiliser la méthode GetListAndView des listes de service Web pour obtenir les schémas de la liste et une vue. Dans la documentation, si vous laissez le paramètre viewName vide, la vue par défaut sera renvoyée. Ensuite, vous pouvez lire le nœud <ViewFields></ViewFields> pour la liste des champs.

* Modifier *

Active l'aide XPath pour interroger le retour XML a été plus difficile que ce que je pensais ... voici ce que je suis venu avec:

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

On dirait que vous devez avoir un XmlNamespaceManager sinon votre requête renvoie toujours aucune valeur. Quelque chose sur la spécification de l'espace de noms ... Voici a good reference.

+0

semble intéressant, je vais essayer dès que possible et afficher les résultats –

+0

ViewFields Renvoie les noms des champs, donc j'ai dû re-featch chaque champ par son nom pour obtenir son nom d'affichage, et le second problème que les ViewFields pas affiché tous les champs affichés dans la vue par défaut de sharepoint pour cette liste (si la liste est une liste d'images)! des idées? –

+0

J'ai essayé cela pour obtenir Fields, System.Xml.XmlNode list = SPListWebService.GetListAndView (xmlnode.Attributes ["Title"]. Value, string.Empty); System.Xml.XmlNodeList visibleColumns = list.SelectNodes ("View/ViewFields/FieldRef"); .... où est-ce que je me suis trompé? –

1

La méthode GetList() renvoie un fragment CAML qui inclut les définitions de champ (colonne) de la liste. Vous voudrez peut-être essayer un XPath expression:

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

J'ai regardé « Liste » InnerXml et je juste remarqué qu'il n'y a pas d'attribut Hidden = "TRUE": S Je vais reformuler ma question: comment puis-je lire toutes les colonnes qui apparaissent à l'utilisateur dans la liste quand il/elle ouvre la liste via le site sharePoint? –

+0

@Rami Shareef: Vous voulez dire dans la vue par défaut de la liste? –

+0

@Kit: exactement, l'affichage par défaut dans le site sharePoint. –

1

J'ai utilisé le code ci-dessus mais, après une longue recherche, j'ai trouvé la solution pour obtenir toutes les colonnes ou personnalisées de la liste des points de partage. Le code qui est partagé sur ..

Custom Columns or ALL Columns

+1

Lone link est [considéré comme une mauvaise réponse] (http://stackoverflow.com/faq#deletion) car il n'a aucune signification en lui-même et la ressource cible n'est pas garantie d'être vivante dans le futur. [Il serait préférable] (http://meta.stackexchange.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. – j0k

0

La solution est assez simple. L'utilisation de GetList() ou de fonctions similaires est la mauvaise façon de procéder.

utiliser au lieu GetListContentTypesAsync() pour obtenir ID de contenu puis obtenir le ContentType spécifique en utilisant GetListContentTypeAsync(), il retourne XML qui inclut toutes les colonnes visibles dans la liste des 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());