Domanda

Sto cercando di tirare indietro l'ultimo numero x di voci di elenco in tutte le liste non nascoste per un determinato web.

Il mio codice originale sarebbe passare attraverso tutti gli elenchi ed eseguire il seguente codice:

SPQuery query = new SPQuery();
query.Query = "<OrderBy><FieldRef Name =\"Modified\" Ascending=\"FALSE\"/></OrderBy>";
query.RowLimit = (uint)this.ItemsToDisplay;

switch(list.BaseType)
{
    case SPBaseType.DocumentLibrary:
        query.ViewAttributes = "Scope=\"Recursive\"";
        break;
    default:

        break;
}

SPListItemCollection listItems = list.GetItems(query);

effettivamente ottenere gli ultimi articoli x modificati da ogni lista e poi vorrei mettere tutti in un elenco e specie, poi prendendo gli elementi di fondo x.

Questo codice è stato molto lento (a volte prendendo 20-30 secondi) così ho deciso di imboccare la strada di utilizzare il ChangeLog.

Ora sto facendo questo codice:

SPChangeQuery query = new SPChangeQuery(false, false);
query.Item = true;
query.Delete = false;
query.Add = true;
query.Update = true;
query.ChangeTokenStart = new SPChangeToken(SPChangeCollection.CollectionScope.Web, Web.ID, DateTime.Now.ToUniversalTime().AddDays(-14));
query.ChangeTokenEnd = new SPChangeToken(SPChangeCollection.CollectionScope.Web, Web.ID, DateTime.Now.ToUniversalTime());

SPChangeCollection changes = Web.GetChanges(query);

, che funziona bene in dev, ma ha problemi in prod. Si scopre che in prod poiché si corre MOSS e profili sono sincronizzati, ricevo 1000 di cambiamenti che stanno accadendo nella lista informazioni utente. Quindi, in questo momento in quanto il metodo GetChanges tira solo gli elementi in blocchi di 1000, devo usare le GetChanges lastchangetoken e call più volte e poi ordinare attraverso 1000 di elementi solo per ottenere a quello che voglio è.

Prima domanda:? Qualcuno sa come escludere gli elenchi nascosti o alcuni elenchi da uno SPChangeQuery

Seconda domanda: C'è un / modo migliore di fare questo più veloce? Ho pensato di usare Revisione per ottenere i dati dal momento che ho acceso che per tutte le collezioni del nostro sito, ma io non sono andato su questa strada ancora.

Grazie.

È stato utile?

Soluzione

SPListItems non è incluso nel auditlog (per ogni disegno a causa di problemi di prestazioni) quindi potete utilizzare il controllo, se siete alla ricerca di elementi della lista.

Io probabilmente andare per SPSiteDataQuery (come si parla da soli), che di solito funziona in modo ottimale per le query a livello di sito.

Un'altra opzione sarebbe la GetListItems servizio web che spesso i sorprendentemente veloce ...

Una terza opzione sarebbe ProcessBatchData utilizzando il metodo di visualizzazione, se può essere ottimizzato per fornire i dati necessari.

Altri suggerimenti

Puoi fare a un livello più granulare utilizzando SPList.GetChanges ()? Ovviamente sarebbe necessario fare un po 'di fusione di risultati, ma si sarebbe probabilmente lavorare con un minor numero di elementi complessivi di cambiamento. Credo che un fattore importante sarebbe quante liste si dispone, in quanto ciò sarebbe legato al numero di operazioni di fusione il codice avrebbe dovuto fare ..

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