Compartir a través de


Trabajar con objetos de listas y colecciones

Para realizar acciones sobre datos de listas en un sitio web de SharePoint, primero debe obtener un objeto SPWeb que sirva como punto de entrada al modelo de objetos, con lo que tendrá acceso a listas, elementos, documentos, usuarios, alertas, etc. Para obtener más información acerca de la devolución de sitios web de SharePoint, consulte Obtención de referencias a sitios, aplicaciones web y otros objetos clave.

Objetos

La mayoría de las clases en el espacio de nombres Microsoft.SharePoint y Microsoft.SharePoint.Administration empiezan por SP. Por lo general, las clases del ensamblado Microsoft.SharePoint que no comienzan con este prefijo representan controles de formulario web.

Windows SharePoint Services normalmente no guarda las modificaciones de las propiedades de objeto en la base de datos hasta que se llama al método Update en el objeto determinado. El siguiente ejemplo muestra cómo se cambia el título y la descripción de la lista de tareas.

         
Dim myList As SPList = myWeb.Lists("Tasks")
myList.Title = "New_Title"
myList.Description = "List_Description"
myList.Update()
SPList myList = myWeb.Lists["Tasks"];
myList.Title="New_Title";
myList.Description="List_Description";
myList.Update();

Nota

Los metadatos para el documento no pueden modificarse mediante el método Update del objeto SPListItem si el documento está desprotegido desde una biblioteca de documentos.

Colecciones

Al igual que las listas son en el centro de un sitio de SharePoint, las colecciones lo son en el centro de sus modelos de objeto. Puede usar cada colección para agregar, eliminar, enumerar y actualizar un tipo de objeto. Las clases de colecciones normalmente comparten las siguientes características:

  • Tiene un nombre que termina en "Collection".

  • Implementa la interfaz System.Collections.ICollection.

  • Tiene una propiedad Count de tipo Int32.

  • Tiene un indizador Int32 que puede usarse para obtener el elemento n de la colección.

  • Tiene un indizador que toma un identificador de elemento.

  • Tiene los métodos Add y Delete.

Al llamar al método Add para una colección normalmente actualiza la base de datos en el servidor back-end con los datos adecuados, excepto cuando se necesita información adicional para actualizar los datos. En este caso, usando el método Add se devuelve un objeto que se puede usar para recopilar la información. Por ejemplo, para agregar un elemento a una lista, en primer lugar use el método Add de la clase Microsoft.SharePoint.SPListItemCollection para devolver un objeto SPListItem, asignar valores a las propiedades adecuadas del objeto y, a continuación, llamar al método Update para que los cambios surtan efecto en la base de datos de contenido.

Indizadores

Los indizadores proporcionan un medio útil para obtener acceso a elementos individuales de las colecciones. Para devolver un elemento, use corchetes ([]) en C# o paréntesis (()) en Visual Basic para contener un índice o una cadena que identifique el elemento de la colección.

Por ejemplo, si miSitio representa una instancia de la clase SPWeb, SPList myList = mySite.Lists["Announcements"] devuelve la lista Anuncios en C#, mientras que Dim myList As SPList = mySite.Lists("Announcements") devuelve la misma lista en Visual Basic. A continuación, puede usar la propiedad Items para el objeto de lista para devolver todos los elementos de lista en la lista (en C#, SPListItemCollection myItems = myList.Items o en Visual Basic Dim myItems As SPListItemCollection = myList.Items). Para devolver sólo un subconjunto de elementos de la lista, puede llamar al método del objeto de lista GetItems y pasar un objeto SPQuery para especificar el subconjunto: SPListItemCollection myItems = myList.GetItems(myQuery) (en Visual Basic, Dim myItems As SPListItemCollection = myList.GetItems(myQuery)).

Puede usar un indizador para devolver un campo específico de una lista (por ejemplo, myList.Items["Field_Name"] in C#, or myList.Items("Field_Name") en Visual Basic). También puede especificar un nombre de campo en un indizador y realizar una iteración en la colección de elementos de una lista para devolver los valores de campo. Este ejemplo muestra los valores Fecha de vencimiento, Estado y Título para cada elemento en una lista:

         
Dim myItem As SPListItem

For Each myItem In  myItems

    Response.Write(SPEncode.HtmlEncode(myItem("Due Date").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(myItem("Status").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(myItem("Title").ToString()) + "<BR>")

Next myItem
foreach(SPListItem myItem in myItems)
{
    Response.Write(SPEncode.HtmlEncode(myItem["Due Date"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(myItem["Status"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(myItem["Title"].ToString()) + "<BR>");
}

Nota

Además de requerir una directiva using (Imports en Visual Basic) para el espacio de nombres Microsoft.SharePoint, el ejemplo anterior requiere una directiva para el espacio de nombres Microsoft.SharePoint.Utilities.

En el siguiente ejemplo se muestra cómo devolver todos los valores Título y Estado para la lista de tareas en un sitio web de SharePoint.

         
Dim myWeb As SPWeb = SPContext.Current.Web
Dim myTasks As SPList = myWeb.Lists("Tasks")
Dim myItems As SPListItemCollection = myTasks.Items
Dim myItem As SPListItem

For Each myItem In  myItems

    Response.Write(SPEncode.HtmlEncode(myItem("Title").ToString()) + " :: " _
        & SPEncode.HtmlEncode(myItem("Status").ToString()) + "<BR>")

Next myItem
SPWeb mySite = SPContext.Current.Web;

SPList myTasks = mySite.Lists["Tasks"];
SPListItemCollection myItems=myTasks.Items;

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

Nota

Además de requerir una directiva using (Imports en Visual Basic) para el Microsoft.SharePoint espacio de nombres, en el ejemplo anterior se requiere una directiva para el espacio de nombres Microsoft.SharePoint.Utilities.

También puede usar los indizadores para modificar los valores de una lista. En el ejemplo siguiente, se agrega un nuevo elemento de lista a una colección y los valores para una columna de dirección URL se asignan al elemento:

         
Dim myNewItem As SPListItem = myList.Items.Add()

myNewItem("URL_Field_Name") = "URL, Field_Description"

myNewItem.Update() 
SPListItem myNewItem = myList.Items.Add();

myNewItem["URL_Field_Name"] ="URL, Field_Description";

myNewItem.Update();

Nota

El tipo de campo URL es único porque implica dos valores (separados por una coma y un espacio) y en el ejemplo anterior, estos valores se asignan al nuevo elemento mediante un indizador único.

El siguiente ejemplo establece los valores Estado y Título de un elemento de la lista.

Dim myItem As SPListItem = myItems(0)

myItem("Status") = "Task_Status"
myItem("Title") = "Task_Title"

myItem.Update() 
SPListItem myItem = myItems[0];

myItem["Status"]="Task_Status";
myItem["Title"]="Task_Title";

myItem.Update();

Nota

Un indizador produce una excepción ArgumentOutOfRange si no encuentra el elemento especificado.

Para obtener más información acerca de los formatos de datos específicos que se usan para los elementos de lista en Windows SharePoint Services, consulte la clase SPListItem.

Vea también

Referencia

Microsoft.SharePoint
Microsoft.SharePoint.Administration

Otros recursos

Espacios de nombres en el modelo de objetos de Windows SharePoint Services
Introducción a la personalización mediante programación de un sitio web de SharePoint en Visual Studio
Obtención de referencias a sitios, aplicaciones web y otros objetos clave
Registro e importación de espacios de nombres