2009-08-21 10 views
5

Estoy utilizando el servicio web GetListItems y solo devuelve aproximadamente el 50% de los resultados almacenados. ¿Existe un límite en la cantidad de datos que se pueden devolver? ¿Hay de todos modos alrededor de esto?Sharepoint Web Service GetListItems no devuelve todas las filas

+1

Podría compartir el mecanismo (código, si es posible) que está utilizando para recuperar los datos. Además, ¿cuántos elementos está recuperando y cuántos totales hay en la lista? –

Respuesta

5

El método recupera solo el número de filas en la vista predeterminada de la lista. Para resolver este problema, simplemente puede aumentar el recuento de filas en su vista predeterminada, o mejor aún, usar consultas CAML. He aquí un artículo sobre el uso de CAML con los servicios web: http://dotnet.org.za/zlatan/archive/2007/08/01/collaborative-application-markup-language-caml-and-webservices-in-sharepoint-2007.aspx

+0

Ese enlace está roto. Gorrón. –

2

Consulte this el número de filas devueltas se basa en la Vista que ha utilizado, Cambie el límite de línea en la Vista.

4

Desde mi experiencia que usted tiene dos opciones: 1. Cambiar la vista que se utiliza cuando se llama al método GetListItems a la vista correcta que devuelve todas las filas 2. Compruebe y vea si colocó un límite de línea en su método getlistitems. Si desea devolver todo lo que tiene en la vista actual, puede usar "0", consulte el siguiente ejemplo: XmlNode doc = doclist.GetListItems ("Mi lista", "Mi vista", consulta, campos de visión, "0", queryOptions , nulo);

También puede intentar ir a su sitio de SharePoint, ir a la lista desde la que está seleccionando configuraciones y modificar la vista predeterminada/crear su propia vista y expandir el grupo de Totales. Debajo del grupo Totales, busque un identificador único para su lista (por ejemplo, ID) y luego, en el menú desplegable junto a él, seleccione COUNT y luego guarde su vista. Una vez que la lista vuelva a cargar, compare el número total que ahora se mostrará en esta vista con la cantidad de elementos devueltos por su consulta. Avíseme si todavía no son lo mismo. :)

1

GetListItems() limita los resultados en función del Límite de fila de la Vista que está utilizando como el segundo parámetro en la llamada al método. Si tiene que ser devueltas todas las filas:

  1. ir a su sitio de SharePoint usando su favorito (o menos favorito) Navegador Web
  2. Navegar hasta la Lista
  3. seleccionar la vista que se corresponde con el GUID que está utilizando como el segundo parámetro de su llamada al método GetListItems() (vea el ejemplo a continuación)
  4. Seleccione (del menú desplegable Ver) "Modifique esta vista"
  5. Desplácese hasta el final y expanda "Límite del artículo" "
  6. conjunto un número alto (utilicé 9000) como "Número de elementos para mostrar" y seleccione "Limitar el número total de elementos devueltos a la cantidad especificada".
  7. Haga clic en Aceptar.

    Service.GetListItems (ListGuid, ViewGuid, consulta, ViewFields, RowLimit, queryOptions, null);

Si el parámetro método RowLimit es inferior a limitar la vista de fila se había establecido en SharePoint, a continuación, los resultados se limitan al valor del parámetro.

1

Solo como referencia para otras personas que llegan desde Google.

Necesito extraer datos de un sistema heredado y tengo este mismo problema exacto. La diferencia es que no tenía control sobre la lista de sharepoints, así que no puedo cambiar la vista predeterminada.

var items = listSvc.GetListItems(listname, null, null, null, null, null); 

var pager = items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty; 
var pagerXml = new XmlDocument(); 
pagerXml.InnerXml = "<QueryOptions><Paging ListItemCollectionPositionNext=\"\" /></QueryOptions>"; 
var pagerNode = pagerXml.GetElementsByTagName("QueryOptions")[0]; 

while (!string.IsNullOrEmpty(pager)) 
{ 
    pagerNode.ChildNodes[0].Attributes[0].Value = pager; 
    var temp = listSvc.GetListItems(listname, null, null, null, null, pagerNode); 
    foreach (XmlNode c in temp.ChildNodes[1].ChildNodes) 
    { 
     var c2 = items.OwnerDocument.ImportNode(c, true); 
     items.ChildNodes[1].AppendChild(c2); 
    } 

    pager = temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty; 
} 

Este es un código de uso del tiempo, así que lo dejo al lector para poner en orden para arriba: D

pero la esencia es, si no se puede conseguir en una llamada, sólo conseguirlo en lotes usando el tamaño de página de vista como el tamaño del lote. El último argumento de GetListItems() acepta un parámetro XmlNode y se puede pasar algo como:

<QueryOptions><Paging ListItemCollectionPositionNext="{paging-option}" /></QueryOptions> 

donde {paging-option} es el valor del atributo (mismo nombre) de rs:data

1

Conjunto RowLimit a 0

var rowLimit = "0"; 
var result = client.GetListItems("ListName", null, query, viewFields, rowLimit, queryOptions, null); 

Tenga cuidado con los tiempos de espera. Si tiene muchos elementos en su lista de SharePoint, puede presionar http timeout. Los tiempos de espera se pueden cambiar en IIS y web.config de su sitio de SharePoint

Cuestiones relacionadas