2009-08-21 6 views
5

J'utilise le service Web GetListItems et il ne renvoie qu'environ 50% des résultats stockés. Y a-t-il une limite à la quantité de données pouvant être renvoyée? Y at-il de toute façon autour de ça?Service Web Sharepoint GetListItems ne retourne pas toutes les lignes

+1

Pourriez-vous partager le mécanisme (code, si possible) que vous utilisez pour récupérer les données? De plus, combien d'articles récupérez-vous, et combien y a-t-il de total dans la liste? –

Répondre

5

La méthode récupère uniquement le nombre de lignes dans la vue par défaut de la liste. Pour résoudre ce problème, vous pouvez simplement augmenter le nombre de lignes dans votre vue par défaut, ou mieux encore, utiliser les requêtes CAML. Voici un article sur la façon d'utiliser CAML avec les services Web: http://dotnet.org.za/zlatan/archive/2007/08/01/collaborative-application-markup-language-caml-and-webservices-in-sharepoint-2007.aspx

+0

Ce lien est cassé. Bummer. –

2

Référez this article que le nombre de lignes retournées est basé sur la vue que vous avez utilisée, Modifier la limite de ligne dans la vue.

4

De mon expérience, vous avez des options: 1. Changer la vue que vous utilisez lorsque vous appelez la méthode GetListItems à la vue correcte qui renvoie toutes les lignes 2. Cochez et vérifiez si vous avez placé une rowlimit dans votre méthode getlistitems. Si vous voulez retourner tout dans la vue courante que vous avez, vous pouvez utiliser "0" voir l'exemple ci-dessous: XmlNode doc = doclist.GetListItems ("Ma liste", "Ma vue", query, viewFields, "0", queryOptions , nul);

Vous pouvez également essayer d'accéder à votre site SharePoint, de vous rendre dans la liste à partir de laquelle vous sélectionnez et de modifier l'affichage par défaut/créer votre propre vue et développer le groupe Totaux. Sous le groupe Totaux, recherchez un identifiant unique pour votre liste (par exemple ID) puis dans la liste déroulante à côté sélectionnez COUNT puis sauvegardez votre vue. Une fois que les rechargements de liste comparent le nombre total qui sera maintenant affiché dans cette vue avec le nombre d'éléments renvoyés par votre requête. Faites-moi savoir si elles ne sont toujours pas les mêmes. :)

1

GetListItems() limite les résultats en fonction de la limite de ligne de la vue que vous utilisez comme deuxième paramètre dans l'appel de méthode. Si vous avez besoin de toutes les lignes à retourner:

  1. Allez sur votre site SharePoint en utilisant votre favori (ou moins favori) Navigateur Web
  2. Accédez à votre liste
  3. Sélectionnez la vue qui correspond au GUID que vous êtes en utilisant comme second paramètre de votre GetListItems appel de méthode() (voir exemple ci-dessous)
  4. Sélectionnez (dans le menu déroulant Afficher) « Modifier cette vue »
  5. faites défiler la liste vers le bas et d'élargir « Limite d'article "
  6. Set un nombre élevé (j'ai utilisé 9000) comme le "Nombre d'éléments à afficher" et sélectionnez "Limiter le nombre total d'éléments retournés au montant spécifié."
  7. Cliquez sur OK.

    Service.GetListItems (ListGuid, ViewGuid, requête, ViewFields, RowLimit, queryOptions, null);

Si le RowLimit paramètre méthode est inférieure à la vue Ligne limite que vous aviez mis en place dans SharePoint, les résultats sont limités à la valeur du paramètre.

1

Juste pour référence à d'autres personnes qui obtiennent ici de google.

J'ai besoin d'extraire des données d'un système hérité et d'avoir le même problème. La différence est que je n'ai pas de contrôle sur la liste des points de partage, donc je ne peux pas changer la vue par défaut.

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

Ceci est un code d'emploi du temps, donc je laisse au lecteur de ranger vers le haut: D

mais l'essentiel est, si vous ne pouvez pas l'obtenir dans un appel, il suffit obtenir en lots en utilisant la taille de la page d'affichage en tant que taille de lot. Le dernier argument de GetListItems() accepte un paramètre XmlNode et vous pouvez passer quelque chose comme:

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

{paging-option} est la valeur de l'attribut (même nom) de rs:data

1

Set MAXLIGNES à 0

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

Méfiez-vous des délais d'attente. Si vous avez beaucoup d'éléments dans votre liste SharePoint, vous pouvez cliquer sur timeout http. Les délais d'attente peuvent être modifiés dans IIS et web.config de votre site SharePoint.

Questions connexes