Korzystam z usługi WWW GetListItems i zwraca tylko około 50% zapisanych wyników. Czy istnieje limit ilości danych, które można zwrócić? Czy mimo to jest wokół tego?Usługa sieci Web Sharepoint GetListItems nie zwracające wszystkich wierszy
Odpowiedz
Metoda pobiera tylko liczbę wierszy w domyślnym widoku listy. Aby rozwiązać ten problem, możesz po prostu zwiększyć liczbę wierszy w widoku domyślnym lub, jeszcze lepiej, użyć zapytań CAML. Oto artykuł na temat korzystania Caml z usług internetowych: http://dotnet.org.za/zlatan/archive/2007/08/01/collaborative-application-markup-language-caml-and-webservices-in-sharepoint-2007.aspx
Ten link jest uszkodzony. Bummer. –
Refer you this Artykuł o liczbie zwróconych wierszy bazuje na używanym widoku, Zmień rowlimit w widoku.
Spróbuj tego, SharePoint List Web Service GetListItems
Z mojego doświadczenia trzeba opcji: 1. Zmień widok użyć podczas wywoływania metody getlistitems do poprawny widok, który zwraca wszystkie wiersze 2. Sprawdź i zobacz, czy umieściłeś rowlimit w swojej metodzie getlistitems. Jeśli chcesz przywrócić wszystko w bieżącym widoku, możesz użyć "0", patrz przykład poniżej: XmlNode doc = doclist.GetListItems ("Moja lista", "Mój widok", zapytanie, viewFields, "0", queryOptions , zero);
Możesz także spróbować przejść do swojej witryny SharePoint, przejść do listy, z której pobierasz, a następnie wybrać ustawienia i zmodyfikować domyślny widok/stworzyć własny widok i rozwinąć grupę Sumy. W grupie Totals poszukaj unikalnego identyfikatora dla swojej listy (np. ID), a następnie w menu obok wybierz COUNT, a następnie zapisz swój widok. Po załadowaniu listy porównaj całkowitą liczbę, która będzie teraz wyświetlana w tym widoku z liczbą pozycji zwróconych przez zapytanie. Daj mi znać, jeśli nadal nie są takie same. :)
GetListItems() ogranicza wyniki w oparciu o ograniczenie wiersza widoku, którego używasz jako drugiego parametru w wywołaniu metody. Jeśli potrzebujesz wszystkie wiersze zostać zwrócone:
- Przejdź do witryny programu SharePoint za pośrednictwem swojego ulubionego (lub najmniej ulubioną) Przeglądarka WWW
- Przejdź do listy
- Wybierz widok, który odpowiada GUID jesteś używanie jako drugiego parametru wywołania metody GetListItems() (patrz przykład poniżej)
- Wybierz (z menu rozwijanego Widok) "Zmodyfikuj ten widok"
- Przewiń do końca i rozwiń opcję "Limit produktów" "
- Zestaw wysoki numer (użyłem 9000) jako "Liczba elementów do wyświetlenia" i wybierz "Ogranicz całkowitą liczbę produktów zwróconych do określonej kwoty."
Kliknij OK.
Service.GetListItems (ListGuid, ViewGuid, zapytań, viewFields, RowLimit, queryOptions, zero);
Jeśli RowLimit metoda parametr jest mniejszy niż widok Row Ograniczyć trzeba było ustawić w SharePoint, a następnie wyniki są ograniczone do wartości parametru.
Tylko w odniesieniu do innych osób, które przybywają tutaj z google.
Muszę wyodrębnić dane z dotychczasowego systemu i mieć ten sam dokładny problem. Różnica polega na tym, że nie miałem kontroli nad listą akcji, więc nie mogę zmienić domyślnego widoku.
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;
}
Jest to jeden raz użyć kodu, więc zostawiam ją do czytnika, aby uporządkować ją: D
ale sens jest, jeśli nie można dostać go w jednej rozmowy, po prostu go w partiach, używając rozmiaru strony widoku jako wielkości partii. Ostatnim argumentem GetListItems()
akceptuje parametr XmlNode
i można przekazać coś takiego:
<QueryOptions><Paging ListItemCollectionPositionNext="{paging-option}" /></QueryOptions>
gdzie {paging-option}
jest wartość atrybutu (ta sama nazwa) rs:data
Set rowLimit na 0
var rowLimit = "0";
var result = client.GetListItems("ListName", null, query, viewFields, rowLimit, queryOptions, null);
Uwaga na limity czasu. Jeśli masz wiele pozycji na liście programu SharePoint, możesz osiągnąć limit czasu http. Limity czasu można zmienić w usługach IIS i web.config witryny SharePoint.
Czy możesz udostępnić mechanizm (kod, jeśli to możliwe), którego używasz do pobierania danych. Ponadto, ile przedmiotów wracasz i ile jest ich wszystkich na liście? –