El monstruito no soy yo, es el SharePoint

El Blog de Luis Mañez, dedicado a tecnologías MS, principalmente SharePoint y Office 365

SharePoint 2010: Actualizando el campo “Creado por” desde código

En algunos escenarios (por ejemplo en migraciones de datos y entornos), es posible que necesitemos actualizar o asignar los campos de sistema de los elementos de una lista de SharePoint.

Los campos de sistema, serían: Creado, Creado por, Modificado y Modificado por.

Os paso el código necesario para actualizar el campo Creado, de un item de una lista.

   1: string createdBy = @"DOMAIN\myUser";
   2:  
   3: using (SPSite site = new SPSite("http://team.domain.lab"))
   4: {
   5:     using (SPWeb web = site.OpenWeb())
   6:     {
   7:         SPList list = web.GetList("Lists/Products");
   8:         UpdateSystemProperties(list, createdBy);
   9:     }
  10: }

En el código anterior tan sólo accedemos a la lista que nos interesa, y llamamos al método de actualizar:

   1: public static void UpdateSystemProperties(SPList list, string createdBy)
   2: {
   3:     if (list.ItemCount > 0)
   4:     {                
   5:         SPListItem item = list.Items[0];
   6:  
   7:         SPUser user = list.ParentWeb.EnsureUser(createdBy);
   8:  
   9:         if (user == null)
  10:         {
  11:             throw new ArgumentNullException("User not found");
  12:         }
  13:  
  14:         item[SPBuiltInFieldId.Author] = user.ID;
  15:         item.UpdateOverwriteVersion();
  16:     }
  17: }

Fijaros en que hacemos uso de la clase SPBuiltInFieldId Esta clase nos permite acceder a los IDs de todos los campos de SharePoint que vienen OOB.

Ojo, aunque existe una propiedad de esta clase que es: “Created_x0020_By”, el campo que realmente almacena lo que vemos en el item como “Creado por”, es el campo “Author”.

Fijaros como aparece un item que he creado desde la interfaz de SharePoint:

image

Y así quedaría cuando ejecutamos el código:

image

PD: No lo he probado en Office 365, pero si lo usamos en un webpart y sacamos el SPWeb del contexto, debería funcionar igual, ya que el resto de operaciones son permitidas en modo Sandbox.

Saludos!

Posted: 31/1/2012 15:02 por Luis Mañez | con no comments
Comparte este post: