Error de palabras clave empresariales (Palabra clave fiscal):Valor no se encuentra dentro del rango esperado

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

Pregunta

Solo intento recuperar el valor de la columna Palabras clave empresariales en mi SPList.Hago esto por:

if(item["TaxKeyword"] != null)
   Log(item["TaxKeyword"].ToString())

La única forma que puedo encontrar para recuperar el valor de la columna Palabras clave es item["TaxKeyword"].Ahora tengo una forma diferente de verificar si el campo existe en el objeto SPListItem del elemento, que es:

if((TaxonomyField)item.Fields["Enterprise Keywords"] != null))

Lo cual funcionará y nunca es nulo, pero cuando llega a cualquier instancia item["TaxKeyword"] el código falla con el mensaje de error:

Value does not fall within the expected range.

¿Este tipo de columna debe tratarse de manera diferente ya que son metadatos administrados?¿Cómo es posible que el campo pueda existir pero cuando intento obtener el valor no existe?

¿Fue útil?

Solución

Pude confirmar que la razón por la que se produce el error es porque item["TaxKeyword"] no está específicamente definido en el SPQuery.ViewFields.

Me pareció interesante ya que no defino ViewFields en mi consulta.En lugar de eso, dejé que SharePoint retirara todas las columnas.Probé esto agregando cada columna al ViewFields y ejecutando la consulta nuevamente.Recibí un error que me indicaba que excedí el número máximo de búsquedas para una vista.

¡Bombilla!

Aquí está el problema:

  1. Le pido a SharePoint que me proporcione cada columna.
  2. La cantidad de búsquedas en mi lista es mayor que el umbral de búsqueda establecido en la Administración central.
  3. SharePoint solo recupera tantas búsquedas como permite el umbral y luego se detiene sin errores.

Debido a esto, no se recuperó TaxKeyword.La solución es aumentar el umbral de búsqueda o definir ViewFields en su consulta.

Otros consejos

Clase SPFieldCollection

Para verificar si el elemento de la lista contiene el campo especificado, puede utilizar uno de los siguientes métodos desde Clase SPFieldCollection:

Por ejemplo, para determinar si el elemento de la lista contiene el campo Palabras clave empresariales:

if (!listItem.Fields.ContainsField("TaxKeyword")) {
}

Campo Palabras clave empresariales

El campo Palabras clave empresariales es de TaxonomíaFieldValueCollection tipo

Ejemplo

//Get Enterprise Keywords value
public static TaxonomyFieldValueCollection GetTaxKeywordValue(SPListItem listItem)
{
    if (!listItem.Fields.ContainsField("TaxKeyword"))
         return null;
    return (TaxonomyFieldValueCollection) listItem["TaxKeyword"];
}
Licenciado bajo: CC-BY-SA con atribución
scroll top