Procedimiento para devolver elementos de una lista

Última modificación: viernes, 09 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

Para devolver elementos de una lista, use uno de los métodos GetItem* de la clase SPList para obtener un objeto SPListItemCollection que represente el elemento o subconjunto de elementos específico que necesita. En la siguiente tabla se enumeran los métodos proporcionados por SPList.

Método

Descripción

GetItemById(Int32)

Devuelve el elemento de lista con el identificador de número entero especificado.

GetItemByIdAllFields(Int32)

Devuelve el elemento de lista con el identificador de número entero especificado e incluye datos de todos los campos del elemento.

GetItemByIdSelectedFields(Int32, [])

Devuelve el elemento de lista con el identificador de número entero especificado e incluye solo los valores de los campos especificados.

GetItemByUniqueId(Guid)

Devuelve el elemento de lista asociado al identificador único global (GUID) especificado.

GetItems()

Sobrecargado. Devuelve una colección de elementos de la lista.

GetItemsWithUniquePermissions()

Sobrecargado. Devuelve una colección de elementos de lista que no heredan permisos de seguridad de la lista, sino que tienen un conjunto único de permisos.

En el siguiente ejemplo se devuelven elementos de la lista de calendario del sitio web actual si el evento se lleva a cabo después de una fecha especificada. Para mejorar el rendimiento, en el ejemplo se usa el método GetItems(SPQuery) para reducir el ámbito de la consulta a un conjunto limitado de elementos. En el ejemplo se usa un constructor para crear una instancia de un objeto SPQuery y, a continuación, se asigna a la propiedad Query del objeto de consulta de una cadena de Lenguaje de marcado de aplicaciones de colaboración (CAML) que especifica el XML interno de la consulta (es decir, el elemento <Where>). Una vez establecida la propiedad Query, el objeto de consulta se pasa al método GetItems para devolver y mostrar los elementos.

Dim listTitle As String = TextBox1.Text
Dim mySite As SPWeb = SPContext.Current.Web 
Dim myList As SPList = mySite.Lists(listTitle)

Dim myQuery As New SPQuery()

myQuery.Query = "<Where><Geq><FieldRef Name = ""EventDate""/>" & _
    "<Value Type = ""DateTime"">2010-06-01</Value></Geq></Where>"

Dim myItems As SPListItemCollection = myList.GetItems(myQuery)

For i As Integer = 0 To myItems.Count - 1
    Dim item As SPListItem = myItems(i)

    Label1.Text += SPEncode.HtmlEncode(item("Title").ToString()) & _
        SPEncode.HtmlEncode(item("Start Time").ToString()) & _
        SPEncode.HtmlEncode(item("End Time").ToString()) & "<BR>"
Next
string listTitle = TextBox1.Text;
SPWeb mySite = SPContext.Current.Web;
SPList myList = mySite.Lists[listTitle];

SPQuery myQuery = new SPQuery();

myQuery.Query = "<Where><Geq><FieldRef Name = \"EventDate\"/>" +
    "<Value Type = \"DateTime\">2010-06-01</Value></Geq></Where>";

SPListItemCollection myItems = myList.GetItems(myQuery);

for (int i = 0; i < myItems.Count; i++) 
{
    SPListItem item = myItems[i]; 

    Label1.Text +=  SPEncode.HtmlEncode(item["Title"].ToString()) + " : " +
        SPEncode.HtmlEncode(item["Start Time"].ToString()) + " : " + 
        SPEncode.HtmlEncode(item["End Time"].ToString()) + "<BR>"; 
}

En el ejemplo anterior se da por supuesto que existe un cuadro de texto que puede usarse para escribir el nombre de una lista, y una etiqueta para mostrar los elementos devueltos. Los indizadores se usan para devolver la lista escrita por el usuario y para enumerar la colección de elementos. Para trabajar con elementos individuales, los indizadores se usan para especificar los nombres de las columnas de las que se devolverán valores. En este caso, los nombres de campo especificados pertenecen a una lista de calendario estándar de SharePoint Foundation.

Nota importanteImportante

Tenga en cuenta que en el ejemplo se asigna la colección de elementos devuelta por la propiedad Items a un objeto SPListItemCollection, que se enumera posteriormente, en lugar de enumerar, por ejemplo, myList.Items[i] dentro del bucle. Esto mejora el rendimiento, ya que sin esta lógica el bucle volvería a crear la colección de elementos completa con cada iteración.

En el siguiente ejemplo solo se devuelven los valores de la columna Title en los casos en que el valor de la columna Stock sobrepasa 100.

Dim mySite As SPWeb = SPContext.Current.Web
Dim list As SPList = mySite.Lists("Books") 

Dim query As New SPQuery() 
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>" 

Dim myItems As SPListItemCollection = list.GetItems(query) 
Dim item As SPListItem 

For Each item In myItems 
   Response.Write(SPEncode.HtmlEncode(item("Title").ToString()) & "<BR>") 
Next item
SPWeb mySite = SPContext.Current.Web;
SPList list = mySite.Lists["Books"]; 

SPQuery query = new SPQuery(); 
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>"; 

SPListItemCollection myItems = list.GetItems(query); 

foreach (SPListItem item in myItems) 
{ 
   Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>"); 
}

En este ejemplo se da por supuesto que existe una lista Books con una columna Stock que contiene valores numéricos.

Nota

En el ejemplo anterior se requieren directivas de using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.Utilities.

Consultas en todas las listas

Puede realizar consultas en todas las listas para consultar de forma más eficaz los datos de varios sitios web. En el siguiente ejemplo se usa la clase SPSiteDataQuery para definir una consulta y, a continuación, se usa el método GetSiteData para devolver los elementos de una lista de tareas estándar de SharePoint Foundation (especificada por ServerTemplate = "107") donde la columna Status equivale a "Completed". Para obtener una lista de las plantillas del servidor de SharePoint Foundation, vea SPListTemplateType.

Dim webSite As SPWeb = SPContext.Current.Web
Dim query As New SPSiteDataQuery()

query.Lists = "<Lists ServerTemplate=""107"" />"
query.Query = "<Where><Eq><FieldRef Name=""Status""/>" & 
"<Value Type=""Text"">Completed</Value></Eq></Where>"

Dim items As System.Data.DataTable = webSite.GetSiteData(query)
Dim item As System.Data.DataRow

For Each item In items
   Response.Write((SPEncode.HtmlEncode(item("Title").ToString()) + "<BR>"))
Next item
SPWeb webSite = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();

query.Lists = "<Lists ServerTemplate=\"107\" />";
query.Query =
   "<Where><Eq><FieldRef Name=\"Status\"/>" +
   "<Value Type=\"Text\">Completed</Value></Eq></Where>";

System.Data.DataTable items = webSite.GetSiteData(query);

foreach (System.Data.DataRow item in items)
{
   Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}

En este ejemplo, se requieren directivas de using (Imports en Visual Basic) para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.Utilities.

Vea también

Referencia

Microsoft.SharePoint

Conceptos

Procedimiento para leer el valor de un campo en un elemento de lista

Trabajar con objetos de listas y colecciones

Uso de Visual Studio para el desarrollo de SharePoint

Validación de seguridad y realización de envíos para actualizar datos

Concesión de privilegio