¿Cómo leo los campos de búsqueda con múltiples valores en SharePoint?
-
28-10-2019 - |
Pregunta
¡Hola y gracias por mirar!
Fondo
He heredado un antiguo proyecto .NET basado en SharePoint 2007 y he diseñado y biblioteca de núcleo externo que simplemente accede a los datos SP, lo que hace que SP solo sea un backend. Sí, sé que sería mejor migrar a SQL, pero el cliente no está de acuerdo.
Los desarrolladores anteriores utilizaron un método de lectura simple para leer los datos en una lista de SP:
SPList list = CurrentRootWeb.Lists["SomeListName"];
Y luego acceden a las propiedades de la lista a través de una especie de diccionario (es decir, para cada elemento de la lista, obtenga el elemento ["SomeValue"]).
No soy experto en SharePoint, por lo que no sé si esta es la forma más eficiente para acceder a sus datos.
Problema
¿Cómo leo los campos de búsqueda con múltiples valores en SharePoint?
Cada propiedad que solicitan parece querer una cadena a cambio. Asi que item[SomeString]
está bien, pero item[SomeList]
¡Hace que todo Barf! Hubiera pensado que una columna de la lista de búsqueda de valores múltiples llega como una cadena serializada o delimitada que contiene los valores seleccionados (ejemplo: "rojo; azul; verde"). ¿Qué me estoy perdiendo?
¡Gracias!
Solución
Para cada uno de los SPField
s En los campos de la lista, debe probar el campo Type
.
Si el tipo es SPFieldType.MultiChoice
, entonces arrojas el SPField
a SPFieldChoice
y acceder al Choices
colección, que es una StringCollection
.
Otros consejos
Si está específicamente interesado en los campos de búsqueda con múltiples valores, no solo los Feild de MultiChoice, entonces el siguiente código debería ayudar:
item.Fields["LookFieldName"].Type == SPFieldType.Lookup;
SPFieldLookup LookUpField = item.Fields["LookFieldName"] as SPFieldLookup;
if (LookUpField.AllowMultipleValues)
{
SPFieldLookupValueCollection valueCollection = item[Field.Id] as SPFieldLookupValueCollection;
string[] arrLookupValues = (from SPFieldLookupValue val in valueCollection select val.LookupValue).ToArray<string>();
}