Clase SPListItem
Representa un elemento o una fila de una lista.
Jerarquía de la herencia
System.Object
Microsoft.SharePoint.SPSecurableObject
Microsoft.SharePoint.SPItem
Microsoft.SharePoint.SPListItem
Espacio de nombres: Microsoft.SharePoint
Ensamblado: Microsoft.SharePoint (en Microsoft.SharePoint.dll)
Sintaxis
'Declaración
Public Class SPListItem _
Inherits SPItem
'Uso
Dim instance As SPListItem
public class SPListItem : SPItem
Comentarios
Puede usar un indizador para devolver un único elemento de una colección de elementos de lista. Por ejemplo, si la colección se asigna a una variable denominada collListItems, use collListItems[index] en Microsoft C# o collListItems(index) en Microsoft Visual Basic, donde index es el número de índice del elemento de la colección o el nombre interno o nombre para mostrar de un campo de lista. Para un indizador basándose en un nombre, Microsoft SharePoint Foundation buscará primero el campo por su nombre interno y a continuación, por nombre para mostrar.
Importante
Para mejorar el rendimiento y optimizar el número de consultas de SQL Server que SharePoint Foundation debe ejecutar, use GetItems o a otro método de GetItem* de la clase SPList para recuperar los elementos en función del valor de sus campos. El método GetItems permite especificar criterios de búsqueda, se pasa una consulta de lenguaje de marcado de aplicación de colaboración (CAML) a través de la clase SPQuery o SPView . Además, rendimiento de la lista puede estar en peligro si una lista contiene un número de campos innecesariamente grande. Utilice el método GetItemByIdSelectedFields(Int32, []) para limitar los campos que se recuperan de un elemento.
Para asignar valores a un campo de un elemento de lista con un indizador, los valores deben estar representados en un formato adecuado para cada tipo de campo integradas. La tabla siguiente muestra cómo se asignan los tipos de datos que se usan en los tipos de campo SharePoint Foundation a tipos de Microsoft .NET Framework.
Nombre |
Formato |
---|---|
Attachments |
System.Boolean |
Boolean |
System.Boolean |
Calculated |
N/D |
Choice |
System.String |
Computed |
N/D |
Counter |
System.Int32 |
CrossProjectLink |
System.Boolean |
Currency |
System.Double |
DateTime |
System.DateTime |
GridChoice |
System.String |
Guid |
System.Guid |
Integer |
System.Int32 |
Lookup |
System.String |
MaxItems |
System.Int32 |
ModStat |
System.Int32 |
MultiChoice |
System.String |
Note |
System.String |
Number |
System.Double |
Recurrence |
System.Boolean |
Text |
System.String |
Threading |
System.String |
URL |
System.String, System.String |
User |
System.String |
Note |
System.String |
A diferencia de todos los demás miembros del modelo de objetos, el indizador para un campo de DateTime devuelve los valores de hora local en el sitio. En una consulta, establezca la propiedad DatesInUtc del objeto SPQuery en true para el indizador devolver los valores de hora Universal coordinada (UTC). Si se devuelven los valores de hora local y desea convertirlos a la hora UTC, utilice el método LocalTimeToUTC , como se indica a continuación:
oWebsite.RegionalSettings.TimeZone.LocalTimeToUtc(date)
For more information about the conversion and format of date and time values in SharePoint Foundation, see Converting Date and Time Values.
Uso de la clase SPListItem para modificar un evento que está vinculado a un área de reuniones sitio no actualizará el sitio de área de reuniones asociado y no se admite.
El tipo que se devuelve el valor de un campo de Calculated depende del tipo de resultado de la columna calculada.
Un campo Lookup contiene una cadena en el formulario ID;#VALUE, donde ID es el identificador de elemento de lista y VALUE es el valor del campo de búsqueda en la otra lista. Para las búsquedas de varios valores, un campo Lookup contiene una colección.
El valor de un campo de MultiChoice se representa como una cadena que contiene todas las opciones seleccionadas, separadas por ;#.
El campo URL forma única consta de dos cadenas que están separadas por una coma y un espacio. Una cadena contiene la ruta de acceso de dirección URL y la otra contiene la descripción que se usa como texto del hipervínculo.
Puede establecer el valor de un campo de User con un objeto SPUser , como se muestra en el ejemplo siguiente, que se actualiza un elemento en el campo Assigned To de una lista de tareas.
Dim site As SPWeb =
SPControl.GetContextSite(Context).AllWebs("Site_Name")
Dim list As SPList = site.Lists("Tasks")
Dim listItem As SPListItem = list.Items(5)
listItem("Assigned To") = site.AllUsers("User_Name")
listItem.Update() '
using(SPWeb oWebsite = SPContext.Current.Site.AllWebs["Site_Name"])
{
SPList oList = oWebsite.Lists["Tasks"];
SPListItem oListItem = oList.Items[5];
oListItem["Assigned To"] = oWebsite.AllUsers["User_Name"];
oListItem.Update();
}
Un campo User contiene una cadena en el formulario ID;#User_Display_Name, donde ID es el identificador de miembro (ID.) del usuario asociado. En el siguiente ejemplo se analiza el valor de un campo de Assigned To para devolver un objeto SPUser .
Dim userValue As String = listItem("Assigned To")
Dim index As Integer = userValue.IndexOf(";")
Dim id As Integer = Int32.Parse(userValue.Substring(0, index))
Dim user As SPUser = site.SiteUsers.GetByID(id)
string strUserValue = oList["Assigned To"];
int intIndex = strUserValue.IndexOf(';');
int intID = Int32.Parse(strUserValue.Substring(0, intIndex));
SPUser oUser = oWebsite.SiteUsers.GetByID(intID);
Al crear un elemento de lista, puede establecer el Author, Editor, Createdy Modified campos del mismo modo que se establece el resto de los campos de un objeto SPListItem . El código se debe ejecutar con derechos de administrador de sitio para funcionar correctamente. Establezca los campos Author y Editor con el identificador numérico del usuario, que puede obtener a través del modelo de objetos mediante el uso de los miembros de SPUser y las clases relacionadas. Los ejemplos siguientes muestran cómo establecer estos campos.
Tenga en cuenta que existen métodos o propiedades para recuperar los metadatos de la versión aprobada actualmente de un elemento de lista. (Esto se da por supuesto que ha habilitado la aprobación de control de versiones y de contenido para el elemento de lista.) Para solucionar este problema, se pueden recuperar los metadatos para la versión aprobada actual con el siguiente
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Collections;
namespace GetListItemVersionInformation
{
class Program
{
static void Main(string[] args)
{
SPSite oSite = new SPSite("http://sigr8-1b:1000/sites/MyTestSite");
SPWeb oWeb = oSite.OpenWeb();
SPList oList = oWeb.Lists["MyCustomList"];
SPListItem oListItem = oList.Items.GetItemById(1);
SPListItemVersionCollection oVersionInfo = oListItem.Versions;
int i=0;
foreach (SPListItemVersion oVersion in oVersionInfo)
{
if (oVersion.Level == SPFileLevel.Published)
{
// here we retrieve all metadata properties
// for this item with the current approved version.
// after taking these values we can export them
Console.WriteLine(oListItem.Versions[i]["Address"].ToString());
Console.WriteLine(oListItem.Versions[i]["Title"].ToString());
Console.ReadLine();
return;
// after getting the latest approved version
// we are exiting the code
}
i++;
}
}
}
}
Ejemplos
En el ejemplo de código siguiente se usa un indizador para comprobar el valor de un campo determinado en la lista especificada. Si el valor es igual a "None", los indizadores para los otros dos campos se usan para mostrar valores de campos específicos.
En este ejemplo se requieren using directivas (Imports en Microsoft Visual Basic) para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.Utilities .
Dim siteCollection As SPSite = SPControl.GetContextSite(Context)
Dim srcList As SPList =
siteCollection.AllWebs("Site_Name").Lists("List_Name")
Dim listItems As SPListItemCollection = srcList.Items
Dim listItem As SPListItem
For Each listItem In listItems
If listItem("Choice_Field_Name") <> "None" Then
Label1.Text += SPEncode.HtmlEncode(listItem("Field1_Name")) & "
:: " _
& SPEncode.HtmlEncode(listItem("Field2_Name")) & "<BR>"
End If
Next listItem
SPSite oSiteCollection = SPContext.Current.Site;
SPList oList =
oSiteCollection.AllWebs["Site_Name"].Lists["List_Name"];
SPListItemCollection collListItems = oList.Items;
foreach (SPListItem oListItem in collListItems)
{
if (oListItem["Choice_Field_Name"] != "None")
{
Label1.Text += SPEncode.HtmlEncode(oListItem["Field1_Name"]) + "
-- " +
SPEncode.HtmlEncode(oListItem["Field2_Name"]) + "<BR>";
}
}
En el ejemplo de código anterior se supone la existencia de una página .aspx que contiene un control de etiqueta.
En el ejemplo de código siguiente se agrega un elemento a una lista de anuncios, mediante los indizadores de fecha y hora para asignar valores a campos diferentes.
Dim site As New SPSite("http://Site_Name")
Dim web As SPWeb = site.OpenWeb("/")
Dim list As SPList = web.Lists("Announcements")
Dim item As SPListItem = list.Items.Add()
item("Title") = "My Item"
item("Created") = New DateTime(2004, 1, 23)
item("Modified") = New DateTime(2005, 10, 1)
item("Author") = 3
item("Editor") = 3
item.Update()
using (SPSite oSiteCollection = new SPSite("http://Site_Name"))
{
using (SPWeb oWebsiteRoot = oSiteCollection.OpenWeb("/"))
{
SPList oList = oWebsiteRoot.Lists["Announcements"];
SPListItem oListItem = oList.Items.Add();
oListItem["Title"] = "My Item";
oListItem["Created"] = new DateTime(2004, 1, 23);
oListItem["Modified"] = new DateTime(2005, 10, 1);
oListItem["Author"] = 3;
oListItem["Editor"] = 3;
oListItem.Update();
}
}
Nota
Certain objects implement the IDisposable interface, and you must avoid retaining these objects in memory after they are no longer needed. For information about good coding practices, see Disposing Objects.
Seguridad para subprocesos
Los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para los subprocesos.