¿Cómo obtener un registro único de la biblioteca de Sharepoint cuando los elementos de la biblioteca superan el valor del umbral de la lista?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/118030

  •  29-09-2020
  •  | 
  •  

Pregunta

Estoy tratando de obtener un registro único de la biblioteca Large Sharepoint usando SPQuery/CamlQuery. El valor de Umbral de vista de lista y el Umbral de vista de lista para auditores y administradores está establecido en 2000. Cuando ejecuto Query on List usando el método splist.GetItems(SPQuery), está fallando. Establecí el límite de filas en 1. Todos los campos/columnas de la consulta están indexados, pero son columnas de metadatos administrados que tienen un valor único. Está arrojando el error como "El intento de operación está prohibido porque excede el umbral de vista de lista impuesto por el administrador".

¿Fue útil?

Solución

Puede usar la API SPQueryThrottlingOption para lograr lo que necesitaba.Si el número de elementos en la lista > su límite de umbral, incluso obtener algunos elementos como 10 o 100 de la lista no le dará resultados.Debido a que primero ordena todos los elementos presentes en la lista, luego devolverá los 10 o 100 elementos principales.

Para superar esta parte, puede aumentar el límite de limitación desde Central Admin o puede usar el siguiente código para lograr lo mismo.

using (SPSite theSite = new SPSite("http://foo")) 
{
using (SPWeb theWeb = theSite.RootWeb)
{
SPList theList = theWeb.Lists["My List Name"];     
SPQuery qry = new SPQuery();
qry.QueryThrottleMode = SPQueryThrottleOption.Override; 
SPListItemCollection coll = theList.GetItems(qry);

     //do something with the data
}
}

SPQueryThrottlingOption invalida la regulación del administrador central por parte del modelo de objetos.Debe ejecutar su código como administrador para eso.

La otra forma en que puede pasar a la limitación mediante Content Iterator

a continuación se muestra el código para el mismo:

ContentIterator ci = new ContentIterator("Single Item Example);
SPQuery qry = new SPQuery();
qry.Query = "<Where><Eq><FieldRef Name='Colour'/><Value Type='Text'>Pink</Value></Eq></Where>";
qry.Query = qry.Query + ContentIterator.ItemEnumerationOrderByNVPField;
ci.ProcessListItems(list, qry,
    delegate(SPListItem item)
    {
         // Do stuff with the item
    },
    delegate(SPListItem item, Exception ex)
    {
      // Handle an exception. Return TRUE to rethrow the exception, FALSE to keep iterating  return false;
    }
 );

Referencias:http://msdn.microsoft.com/en-us/library/ff798376.aspx http://www.novolocus.com/2012/07/13/dealing-with-large-lists-part-3-the-conteniterator/

Licenciado bajo: CC-BY-SA con atribución
scroll top