Domanda

Supponiamo di avere una lista con 100 articoli.È possibile scrivere la query di caml per ottenere 5 elementi, ma salta 10 elementi dall'inizio?Qualcosa come limite e offset in SQL?

È stato utile?

Soluzione

Sfortunatamente, il paging di SharePoint funziona un bit diversamente rispetto al limite e offset in SQL. Per ottenere oggetti incorporati è necessario fornire ID del primo elemento per la pagina desiderata e quindi impostare Rowlimit e, se si ha l'ordinamento definito per l'elenco, è necessario anche fornire nomi e valori delle colonne di ordinamento di quelle colonne per il primo elemento sulla tua pagina.

Puoi vedere come funziona se vai in qualsiasi elenco che ha abbastanza oggetti e prova a passare attraverso le pagine e vedere come la stringa di query della pagina cambia. Quindi elimina alcuni elementi e riprova. Quindi modificare l'ordine degli articoli e riprova ...

Tutti quei parametri dovrai trasmettere nella proprietà ListItemCollectionPosition dell'oggetto SpQuery.

Maggiori informazioni sul paging in SharePoint:

http:// www. directSharePoint.com/2011/03/step-by-Step-Guide-T-Implement-Paging.html

Nel tuo caso particolare, è possibile semplificare un po 'le cose, se non si dispone di filtraggio e ordinamento:

    .
  1. Seleziona i primi 11 ID dall'elenco
  2. Utilizzare l'11 ° ID per creare la corretta listItemCollectionPosition per la tua SpQuery
  3. Set rowlimit dell'oggetto spquota a 5

    Per selezionare rapidamente i primi 11 ID, utilizzare questa query:

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

Altri suggerimenti

Per saltare gli elementi n non è possibile, ma è possibile eseguire una query di paging, il che significa che è possibile impostare un RowLimit con un Order e limitare gli elementi del risultato.Il risultato ha un set di proprietà ListItemCollectionPosition, che definisce dove inizia la pagina successiva.

Qui hai un esempio 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();
}
.

Questa query restituisce l'articolo 11-20.
Non l'ho testato in JavaScript, ma sono sicuro che funziona anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top