CAML 쿼리 - X 건너 뛰기 첫 결과
-
10-12-2019 - |
문제
100 개의 항목이있는 목록이 있음을 가정 해 봅시다.5 개의 항목을 얻으려면 CAML 쿼리를 작성할 수는 있지만 Beggining에서 10 항목을 건너 뜁니다.SQL에서 한계와 오프셋과 같은 것입니까?
해결책
불행히도 SharePoint Paging은 SQL의 제한 및 오프셋과 조금 다르게 작동합니다. 페이지가 찍힌 항목을 가져 오려면 원하는 페이지의 첫 번째 항목의 ID를 제공 한 다음 RowLimit를 설정하고 목록에 대해 정의 된 정렬이있는 경우 첫 번째 항목에 대한 열의 정렬 열 이름과 값을 제공해야합니다. 페이지에.
충분한 항목이있는 목록으로 이동하고 페이지를 통과하려고 시도하고 페이지의 쿼리 문자열이 어떻게 변경되는지 확인할 경우 어떻게 작동하는지 알 수 있습니다. 그런 다음 일부 항목을 삭제하고 다시 시도하십시오. 그런 다음 항목의 순서를 변경하고 다시 시도하십시오 ...
모든 매개 변수는 Spquery 객체의 ListItemCollectionPosition 속성을 전달해야합니다.
SharePoint의 페이징에 대한 자세한 정보 :
http : // www. DirectSharePoint.com/2011/03/step-wy-step-guide-to-implement-paging.html
필터링 및 정렬이없는 경우 특정 경우에는 조금만 간소화 할 수 있습니다.
- 목록에서 처음 11 ID를 선택합니다
- 11 번째 ID를 사용하여 SPQUERY 에 대한 올바른 LISTITEMCollectionPosition을 만듭니다.
- 스프 큐리 객체의 RowLimit를 5 로 설정
상위 11 개 ID를 신속하게 선택하려면이 쿼리를 사용하십시오.
.var query = new SPQuery() { ViewFields = "ID", ViewFieldsOnly = true, IncludePermissions = false, RowLimit = 11 };
다른 팁
n
항목을 건너 뛸 수는 없지만 페이징 된 쿼리를 수행 할 수 있습니다. 즉, RowLimit
로 Order
를 설정하고 결과 항목을 제한 할 수 있습니다.결과에는 다음 페이지가 시작되는 위치를 정의하는 ListItemCollectionPosition
속성 세트가 있습니다.
여기에 C # CSOM 예제가 있습니다.
int page = 2; // the desired page
string viewXml = $@"<View>
<Query>
<Where><Eq><FieldRef Name='FieldToFilter'/><Value Type='TypeOfField'>TheValue</Value></Eq></Where>
</Query>
<RowLimit>10</RowLimit> // Rowlimit is needed for paging, in your case to skip 10
<OrderBy>
<FieldRef Name='FieldToOrder' /> // In paged queries is advised to set an order
</OrderBy>
</View>";
using (ClientContext context = new ClientContext(YourUrl))
{
CamlQuery camlQuery = new CamlQuery
{
ViewXml = viewXml
};
List list = context.Web.Lists.GetById(ListGuid);
ListItemCollection items = null;
while (page > 0)
{
items = list.GetItems(camlQuery);
context.Load(items);
context.ExecuteQuery();
camlQuery.ListItemCollectionPosition = items.ListItemCollectionPosition;
page--;
}
items.ToList();
}
.
이 쿼리는 항목 11-20을 반환합니다.
나는 자바 스크립트에서 그것을 테스트하지 않았지만, 그것도 그것이 작동하는 것도 확신합니다.