SharePoint 2010: Como enviar un elemento a la papelera de reciclaje con LINQ To SharePoint!

Como sabéis, cuando se elimina un documento de una biblioteca de documentos o un elemento de una lista de SharePoint, automáticamente se va a la papelera de reciclaje del usuario de forma que pueda recuperarlo dentro de la ventana de días de recuperación que se haya configurado en la papelera. Pero, ¿qué pasa si el borrado del elemento lo hacemos programáticamente utilizando LINQ To SharePoint? Pues que dependiendo de como hagamos el borrado, el elemento se irá o no a la papelera de reciclaje:

  • Si usamos el método DeleteOnSubmit(), el elemento será borrado de forma automática en cuanto hagamos un SubmitChanges() y no se irá a la papelera de reciclaje por lo que no podremos recuperarlo.
  • En cambio, si usamos el método RecycleOnSubmit() nos encontraremos con qué el elemento si irá a la papelera de reciclaje en cuanto hagamos un SubmitChanges() y por lo tanto será posible su recuperación de la misma.
  • Un ejemplo de borrado en LINQ To SharePoint con RecycleOnSubmit() es el siguiente:
   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5:  

   6: //Espacios de nombres necesarios

   7: using Microsoft.SharePoint;

   8: using Microsoft.SharePoint.Linq;

   9: using SPLINQProxy;

  10:  

  11:  

  12: namespace SPLINQToSPCADemo

  13: {

  14:     class Program

  15:     {

  16:         static void Main(string[] args)

  17:         {

  18:             string sSharePointSite =

  19:                 "http://demo2010a:100/sites/PortalIntranet";

  20:             try

  21:             {

  22:                 using (SPLINQProxyDataContext ctx =

  23:                     new SPLINQProxyDataContext(sSharePointSite))

  24:                 {

  25:                     EmpresasItem EmpresaToDelete =

  26:                         (from e in ctx.Empresas

  27:                          where e.Title.Contains("Microsoft")

  28:                          select e).First();

  29:                     if (EmpresaToDelete!=null)

  30:                     {

  31:                         ctx.Empresas.RecycleOnSubmit(EmpresaToDelete);

  32:                         ctx.SubmitChanges();

  33:                         Console.WriteLine("Se ha borrado la empresa");

  34:                     }

  35:                 }

  36:             }

  37:             catch (Exception ex)

  38:             {

  39:                 Console.WriteLine("Error: {0}", ex.Message);

  40:             }

  41:  

  42:             Console.ReadLine();

  43:         }

  44:     }

  45: }

  • Si probamos el código anterior con la lista de ejemplo (Empresas), podremos ver que al eliminar un elemento de la misma este se va a la papelera de reciclaje.
image image