Procedimiento para leer el valor de un campo en un elemento de lista
Última modificación: viernes, 16 de abril de 2010
Hace referencia a: SharePoint Foundation 2010
En este artículo
Introducción
Obtención de una referencia a una lista
Obtención de una referencia a un elemento de lista
Obtención del valor de un campo
En este tema se explica cómo leer mediante programación el valor de un campo específico (columna) en un elemento de lista concreto.
Introducción
Para leer el valor de un campo específico de un elemento de lista, el código debe obtener primero una referencia al sitio web en el que se implementa la lista; después, una referencia a la lista; a continuación, una referencia al elemento de lista y, finalmente, una referencia al campo específico. Este tema se centra en los últimos tres pasos, especialmente el último. Para obtener más información acerca de cómo obtener referencias a sitios web, vea Obtención de referencias a sitios, aplicaciones web y otros objetos clave.
Obtención de una referencia a una lista
Una vez que tenga una referencia al sitio web que contiene la lista, obtenga una referencia a la lista llamando el método GetList(String) del objeto SPWeb o mediante de un índice de la propiedad SPWeb.Lists del sitio web. Para usar el método GetList(String), el código debe ser capaz de pasar la dirección URL relativa al servidor de la lista en el tiempo de ejecución. A continuación se muestra un ejemplo del uso de este método cuando la dirección URL relativa al servidor literal de la lista se conoce en el tiempo de diseño.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.GetList("/sites/Contoso/Lists/Books");
}
}
Para obtener más información sobre direcciones URL relativas al servidor, vea Descripción de formularios de cadenas de dirección URL.
Hay tres tipos de índices que se pueden usar con la propiedad SPWeb.Lists.
El GUID de la lista; por ejemplo, SPList list = web.Lists[new Guid("53bd7850-49cc-4747-aded-e053659ace79")];. El GUID es el valor de la propiedad SPList.ID.
La posición ordinal basada en cero de la lista de la colección Lists; por ejemplo, SPList list = web.Lists[12];.
El nombre de la lista; por ejemplo, SPList list = web.Lists["Books"];. El nombre es el valor de la propiedad SPList.Title.
El último de ellos es el más común, ya que es relativamente poco frecuente que conozca en tiempo de diseño, o que el código "conozca" en el tiempo de ejecución, el GUID de la lista o su posición en la colección de listas del sitio web. A continuación, se muestra esta técnica en contexto.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.Lists["Books"];
}
}
Sugerencia |
---|
En Microsoft SharePoint Foundation, si hay disponible un método "Get" para devolver un determinado tipo de objeto, es preferible usar este método en vez de usar un índice de una colección. En general, se obtendrá un mejor rendimiento siguiendo esta regla. En este caso, si el código puede pasar la dirección URL relativa al servidor de la lista necesaria en el tiempo de ejecución, debe usar preferentemente el método GetList(String) en vez de un índice de la propiedad SPWeb.Lists. |
Obtención de una referencia a un elemento de lista
Una vez que tenga una referencia a la lista, tiene varias opciones para obtener una referencia a un elemento de lista específico. Para obtener el mejor rendimiento, la opción preferida es usar el método GetItemByIdSelectedFields(Int32, []) del objeto SPList. El primer parámetro es el número de identificación del elemento. Cada vez que se agrega un elemento a una lista, se le asigna un número de identificación entero basado en 1, que es un número mayor que el número de identificación del elemento anterior agregado. Cuando se elimina un elemento de una lista, su número de identificación no se vuelve a usar. El segundo parámetro es una matriz de los nombres internos de los campos del elemento que desea que devuelva la base de datos de contenido. Para maximizar el rendimiento, incluya solo los campos del elemento de lista a los que el código hará referencia después. A continuación se muestra un ejemplo.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.GetList("/sites/Contoso/Lists/Books");
SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");
}
}
Tenga en cuenta que se está recuperando el elemento de lista con ID 3, pero solo se están recuperando tres de sus campos. Tenga en cuenta también que se usa la propiedad InternalName del campo de precio minorista, y no la propiedad Title del campo, que en este caso es "Retail Price".
Si desea todos los campos del elemento de lista, use el método GetItemByIdAllFields(Int32). Su único parámetro es el identificador del elemento. Hay algunos métodos específicos para obtener elementos de lista de tipos especiales. Si conoce el GUID del elemento (el valor de la propiedad UniqueId) en lugar del valor de la propiedad ID, use el método GetItemByUniqueId(Guid).
Si no conoce el GUID ni el identificador del elemento de lista, pero conoce el valor de algunos de sus otros campos o propiedades, puede usar una de las sobrecargas del método GetItems() para devolver varios elementos de lista. A continuación, use un bucle y estructuras condicionales para seleccionar el elemento deseado. A continuación se muestra un ejemplo de esta técnica.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.GetList("/sites/Contoso/Lists/Books");
SPListItemCollection items = list.GetItems("Title", "ISBN", "Retail_x0020_Price");
SPListItem item = null;
foreach (SPListItem it in items)
{
if (it.Title == "Great Expectations")
{
item = it;
}
}
}
También puede consultar una lista para un conjunto filtrado de elementos usando el proveedor LINQ to SharePoint. Use la cláusula select de la consulta LINQ para especificar solo los campos que desee. Para obtener más información acerca de las consultas a SharePoint con LINQ, vea Procedimiento para consultar mediante LINQ to SharePoint.
Importante |
---|
El objeto SPList tiene una propiedad Items a cuyos miembros puede obtener acceso con un índice, pero no se recomienda este método, ya que captura todos los metadatos de todos los elementos de lista de la base de datos de contenido. |
Obtención del valor de un campo
Una vez que tenga una referencia al elemento de lista que desee, el código puede leer el valor de cualquier campo mediante un índice del objeto SPListItem. Hay índices Guid, Int32 y String. Puede usar el índice Guid si conoce el Id del campo. Puede usar el índice Int32 si conoce el número de columna basado en cero del campo de la lista principal. Puede usar el índice String si conoce el InternalName, el Title o el StaticName del campo. El tiempo de ejecución busca la cadena en los nombres internos en primer lugar, después en los títulos de campo y, finalmente, en los nombres de campo estáticos. Por lo tanto, el código funciona mejor si usa el nombre interno cuando lo conoce. Tenga en cuenta que el indizador siempre devuelve el valor del campo como un tipo Object. Normalmente, es necesario convertirlo a su tipo más específico, tal como se hace en este ejemplo.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.GetList("/sites/Contoso/Lists/Books");
SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");
String bookISBN = (String)item["ISBN"];
}
}
Si desea dar formato al valor del campo para la inserción en código HTML como el valor de un elemento o un atributo de un elemento, use el método SPListItem.GetFormattedValue(String). Devuelve el valor como una cadena, pero si el valor contiene los caracteres de Y comercial, comillas dobles, comillas simples, menor o mayor que, éstos se sustituyen por las referencias a la entidad HTML correspondientes.
La propia clase SPField (y, por lo tanto, cada clase que deriva de ella) tienen algunos métodos para convertir un valor de campo de modos especiales. En cada uno de ellos, primero se obtiene una referencia al valor del campo usando un índice con el objeto SPListItem, como se describió anteriormente. Esa referencia se pasa como parámetro a uno de los métodos siguientes; por ejemplo, GetFieldValueAsText(item["ISBN"]).
GetFieldValueAsHtml(Object) Funciona de forma idéntica a SPListItem.GetFormattedValue(String). Vea más arriba.
GetFieldValueAsText(Object) Devuelve el valor del campo como una String.
GetFieldValueForEdit(Object) Cuando se invalida en una clase derivada, devuelve el valor del campo con un formato más adecuado para el formulario de edición de elemento de lista y el formulario de creación de elemento de lista; por ejemplo, un valor de fecha y hora con un formato adecuado a la referencia cultural del usuario.
GetValidatedString(Object) Cuando se invalida en una clase derivada, devuelve una versión de cadena del valor del campo que ha pasado las comprobaciones de validación.
GetFieldValue(String) Cuando se invalida en una clase derivada, obtiene el valor del campo cuando el valor subyacente tiene un tipo de datos complejos, como SPFieldUrlValue, o un tipo de datos personalizado.
Para usar cualquiera de estos métodos, debe obtener una referencia al campo como un objeto SPField. Esto se hace mediante la propiedad SPListItem.Fields del elemento de lista. Se trata de una colección de los campos de la lista principal. El tipo es SPFieldCollection. Este objeto, a su vez, proporciona varias maneras de devolver un objeto SPField especificado.
Mediante el método GetField(String). Pase el nombre interno, el título o el nombre del campo estático. El nombre interno se busca en primer lugar, por lo que para un mejor rendimiento es conveniente usar el nombre interno cuando se conoce. El nombre estático se busca en último lugar.
Mediante el método GetFieldByInternalName(String).
Mediante el método TryGetFieldByStaticName(String).
Mediante un índice Guid, Int32 o String de la propiedad SPListItem.Fields del elemento de lista. El primer índice devuelve el objeto SPField, cuya propiedad Id coincide con el objeto Guid que se pasó. El segundo índice devuelve el objeto SPField en la posición ordinal basada en cero especificada en la colección. El tercer índice devuelve el objeto SPField, cuya propiedad Title coincide con la cadena que se pasa. (No se puede usar el nombre interno del campo como índice de la cadena).
El código siguiente muestra algunos ejemplos de cómo usar los índices y métodos de las clases derivadas de SPListItem y SPField para obtener el valor de un campo.
using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
using (SPWeb web = siteCol.RootWeb)
{
SPList list = web.GetList("/sites/Contoso/Lists/Books");
SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");
// Get price as Double straight from the SPListItem object.
Double dblPrice = (Double)item["Retail_x0020_Price"];
// Get the SPField object by using the GetFieldByInternalName method, and then get
// price as string.
SPFieldCurrency priceField = (SPFieldCurrency)item.Fields.GetFieldByInternalName("Retail_x0020_Price");
String strPrice = priceField.GetFieldValueAsText(item["Retail_x0020_Price"])
// Get price as string from the SPField object. Use string SPFieldCollection index
// to get the SPField object (must use field object Title as index parameter). But
// use internal name of field as SPListItem index for better performance.
String strPrice2 = item.Fields["Retail Price"].GetFieldValueAsText(item["Retail_x0020_Price"]);
}
}