2010-11-22 10 views

Respuesta

5

Usted puede utilizar el método del servicio web Listas GetListAndView para obtener los esquemas para la lista y una vista.

De la documentación, si deja el parámetro viewName vacío, se devolverá la vista predeterminada. Luego, puede leer el nodo <ViewFields></ViewFields> para la lista de campos.

* Editar *

Resulta que el uso de XPath para consultar el XML devuelto fue más difícil de lo que pensaba ... Esto es lo que ocurrió:

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

parece que tiene que tener una XmlNamespaceManager de lo contrario su consulta siempre devuelve ningún valor. Algo sobre especificar el espacio de nombres ... Aquí está a good reference.

+0

parece interesante, lo intentaré lo antes posible y publicaré los resultados –

+0

ViewFields Devuelva los nombres de los campos, así que tuve que volver a marcar cada campo por su nombre para obtener su nombre de visualización, y el segundo problema que los ViewFields no se muestran todos los campos que se muestran en la vista predeterminada de SharePoint para esa lista (¡Si la lista es una lista de imágenes)! ¿algunas ideas? –

+0

Intenté esto para obtener Fields, System.Xml.XmlNode list = SPListWebService.GetListAndView (xmlnode.Attributes ["Title"]. Value, string.Empty); System.Xml.XmlNodeList visibleColumns = list.SelectNodes ("View/ViewFields/FieldRef"); .... ¿dónde me equivoqué? –

1

El método GetList() devuelve un fragmento CAML que incluye las definiciones de campo (columna) de la lista. Es posible que desee probar un XPath expression:

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

He estado buscando en InnerXml 'Lista' y yo Recién noté que no hay ningún atributo Oculto = "VERDADERO": S Volveré a formular mi pregunta: ¿cómo puedo leer todas las columnas que aparecen para el usuario en la lista cuando él/ella abre la lista a través del sitio de sharePoint? –

+0

@Rami Shareef: ¿Te refieres a la vista por defecto de la lista? –

+0

@Kit: exactamente, la vista predeterminada en el sitio de sharePoint. –

1

Utilicé el código anterior pero, después de una larga búsqueda, encontré la solución para obtener todas las columnas personalizadas de la lista de sharepoints. El código para que se comparte en ..

Custom Columns or ALL Columns

+1

El enlace solitario es [considerado como una respuesta deficiente] (http://stackoverflow.com/faq#deletion) ya que no tiene sentido por sí mismo y no se garantiza que el recurso objetivo esté activo en el futuro. [Sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. – j0k

0

solución es bastante simple. Usar GetList() o funciones similares es el camino equivocado.

usar en su lugar GetListContentTypesAsync() para obtener la identificación de contenido y luego obtener el ContentType específica utilizando GetListContentTypeAsync(), devuelve XML que incluye todas las columnas visibles en la lista de 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()); 
Cuestiones relacionadas