문제

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

필터링 및 정렬이없는 경우 특정 경우에는 조금만 간소화 할 수 있습니다.

  1. 목록에서 처음 11 ID를 선택합니다
  2. 11 번째 ID를 사용하여 SPQUERY 에 대한 올바른 LISTITEMCollectionPosition을 만듭니다.
  3. 스프 큐리 객체의 RowLimit를 5 로 설정

    상위 11 개 ID를 신속하게 선택하려면이 쿼리를 사용하십시오.

    var query = new SPQuery()
    {
        ViewFields = "ID",
        ViewFieldsOnly = true,
        IncludePermissions = false,
        RowLimit = 11
    };
    
    .

다른 팁

n 항목을 건너 뛸 수는 없지만 페이징 된 쿼리를 수행 할 수 있습니다. 즉, RowLimitOrder를 설정하고 결과 항목을 제한 할 수 있습니다.결과에는 다음 페이지가 시작되는 위치를 정의하는 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을 반환합니다.
나는 자바 스크립트에서 그것을 테스트하지 않았지만, 그것도 그것이 작동하는 것도 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top